RSA暗号を実装してみる(理論編)
知識編で説明したように、RSA暗号の最大の特徴は暗号鍵から復号鍵を類推することが難しいというところにある。今回は、この特徴が数学的にどのように実現できているのかについて見ていく。
RSA暗号を実装してみる(知識編) - 技術メモ
RSA暗号を実装してみる(プログラム編) - 技術メモ
オイラー関数
自然数に対して、未満でと互いに素な自然数の個数をで表し、オイラー関数と呼ぶ。
例えば、未満でと互いに素な自然数はなので
オイラー関数には以下のような性質がある。
(1)素数に対して、 (2)互いに素な自然数に対して、
これらより
異なる素数に対して
となる
RSA暗号に用いる定理
これまで説明したようなフェルマーの小定理やオイラー関数を使って、RSA暗号で以下の性質が利用される。
異なる2つの素数について、とする。 自然数がならば、任意の自然数に対して、が成り立つ。
証明
がと互いに素でない時、明らかであるがと互いに素な時、の約数,とも互いに素であり、 かつを示せば十分である。 まず、より、 (kは非負整数)と表せる。 したがって、 フェルマーの小定理から以下が成り立つ よって かつが示された。
RSA暗号の暗号化・復号化の手順
では、実際にどのように暗号化復号化するのだろうか。
受信側Aから送信側Bにメッセージ P を送ることを考える。(メッセージは何かしらの符号化で数字になってるとする)
(A1) A は異なる2つの巨大な素数 p, q を選ぶ。そして、n = pq を計算する。
(A2) n に対するオイラー数 ϕ(n) = (p − 1)(q − 1) を計算する。
(A3) ϕ(n) 以下で、ϕ(n) と互いに素となる自然数 e を探す。
(A4) ϕ(n) 以下で、ed ≡ 1 (mod ϕ(n))を満たす自然数 d を求める。
(A5) p, q, ϕ(n), d を秘匿して、n と e のみを公開する。
それでは、BがAに暗号を用いて通信を行うにはどうすればよいか。
(B1) B が A に送りたい平文を P (<n)とする。B は を計算して、C を A へ送る。
(A6) 暗号文 C を受信した A は によって復号化する。
上で説明した性質から D=P が成立するため、暗号・復号ができている。
()
復号化の困難性について
暗号鍵・復号鍵の具体的な内容についてはわかったと思うが、どうして暗号鍵から復号鍵を見つけることが難しいのだろう。
その理由は、e とn からd を導き出すことが難しいからだ。
d を知るにはを知らなければいけないが、を知るにはnの素因数分解ができなければいけない。このnの素因数分解はnが巨大になればなるほど難しくなってくるが、このことが復号鍵を類推することを難しくしている。
難しそうに書いてみたけれど、ひとつひとつ見てみるとそんなに複雑ではない気もする。次は実際にコーディングに取り掛かる。
関連記事:
参考サイト:
情報数理:暗号理論入門 高畑弘(pdf)
フェルマーの小定理の証明と例題 | 高校数学の美しい物語
RSA 暗号がようやく分かった気がしたのでまとめてみる - tsujimotterのノートブック