RSA暗号のアルゴリズム

提供: MochiuWiki : SUSE, EC, PCB

2021年5月23日 (日) 10:03時点におけるWiki (トーク | 投稿記録)による版 (安全性)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

公開鍵暗号方式の具体的なアルゴリズムであるRSA暗号の仕組みと安全性について記載する。


前提知識

以下の初等整数論の知識を用いる。



RSA暗号の仕組み

  • 公開鍵
    • n : 2つの素数の積
    • k1 : ϕ(n)=(p1)(q1)と互いに素な整数k1 (ただし、1<k1<nを満たすこと)
  • 秘密鍵
    • 素数p
    • 素数q
    • φ(n) : (p1)(q1)の積
    • k2 : k1k21mod(p1)(q1)となるk2


メッセージを受け取る側の準備

大きな素数pとqを生成して、n=pqとする。
ϕ(n)=(p1)(q1)と互いに素な整数k1を取る。
k1k21mod(p1)(q1)となるk2を取る。

※注意
上記の有名な定理により、0k2(p1)(q1)とすると、k2は一意に定まる。
また、ここまでの操作は高速にできることが知られている。

  • nとk1を公開する(公開鍵)
  • k2は非公開にする(秘密鍵)


メッセージを送る側の暗号化方法

送信するメッセージをMとする時、暗号文をCは、以下の式で求められる。
ただし、0Mnを満たす。
C=Mk1modn

メッセージを受け取る側の復号方法

受信した暗号文Cと秘密鍵k2を使用して復号する時、以下の式から求められる。
M=Ck2modn

これが元のメッセージに一致する。(後述)

安全性

暗号文Cと公開鍵n、k1が分かっても、(現実的な時間では)mを復元することはできない。

  • 復号できる理由
    暗号化:mk1modn
    復号 :Ck2modn


証明
mk1k2mmodnを証明すればよい。
mk1k2mmodpを証明すれば十分である。(対称性より、modqも同様)

mがpの倍数のとき、両辺ともにpの倍数よりOK。
mがpの倍数でないとき、k1k21p1の倍数となるように設定したので、
整数Nを用いて、k1k2=1+N(p1)とおける。
よって、mk1k2=m*(mp1)Nm*1Nmodn=mとなる。
(ただし、途中のmodnであり、フェルマーの小定理を用いた)


RSA暗号の安全性と素因数分解

素因数分解が簡単に(短時間で)計算できれば、RSA暗号は破られる。

  • RSA暗号が破られる理由
    暗号文C、公開鍵k1、nは誰でも見ることができる。
    ここで、nを素因数分解することでpとqが求まる。
    すると、"メッセージを受け取る側の準備"と同じ方法で秘密鍵k2が求まり、元のメッセージMを復号できる。