RSA暗号の計算方法&実際に計算してみる

投稿日: 更新日:

どうやって暗号化するのか?

計算式自体はとてもシンプルです。 平文をEE乗してNNで割った余りを求めるだけです。
EEはEncryption(暗号化)の頭文字です。

暗号文=(平文)EmodN暗号文=\left(平文\right)^E\mod N

どうやって復号化するのか?

こちらも計算式はシンプルです。暗号文をDD乗してNNで割った余りを求めるだけです。
DDはDecryption(復号化)の頭文字です。

平文=(暗号文)DmodN平文 = \left(暗号文\right)^{D} \mod N
用語解説
平文暗号化する前の文。
暗号文暗号化された文章。
x mod yxをyで割った余り。プログラミングではx%yと書かれる。
E, D, N整数

鍵を作る

鍵の作成手順は次の通りです。

  1. NNを作る
  2. LLを求める
  3. EEを作る
  4. DDを作る

1, Nを作る

まず2つの素数 p,qp, q を用意します。 そして、その2つを掛けたものが NN です。

N=p×qN = p \times q

何とシンプル。。。

2, Lを求める

LLp1p-1q1q-1の最小公倍数(lcmlcm)です。
p1p-1q1q-1の最小公倍数を lcm(p1,q1)lcm(p-1, q-1) と書きます。

L=lcm(p1,q1)L = lcm(p-1, q-1)

3, Eを作る

EEは以下の条件式を満たすものです。

1<E<Lgcd(E,L)=11 < E < L\\ gcd(E, L) = 1

1<E<L1 < E < Lの中でEELLが最大公約数 (gcd)(gcd) が「1」、つまり互い素であるものです。
EELLの最大公約数を gcd(E,L)gcd(E, L) と書きます。

4, Dを作る

DDは以下の条件式を満たすものです。

1<D<L(E×D)modL=11 < D < L\\ (E\times D) \mod L = 1

DD1<D<L1 < D < Lの中でE×DE\times Dの割ったあまりが「1」であるものです。

完成!

このようにして得られたEENNのペアが公開鍵、DDNNのペアが秘密鍵です!

実際に計算してみる

1, Nを作る

p=5p=5, q=11q=11としてみます。どちらも素数です。

N=5×11=55N=5\times 11=55

となり、N=55N=55となりました!

2, Lを求める

515-111111-1の最小公倍数を求めます

L=lcm(51,111)=lcm(4,10)=20\begin{aligned} L &= lcm(5-1, 11-1) \\ &= lcm(4, 10)\\ &= 20 \end{aligned}

となり、L=20L=20となりました!

3, Eを求める

1<E<201 < E < 20の中でgcd(E,20)=1gcd(E, 20) = 1となる数を探します。
E=3,7,11,...E = 3, 7, 11, ...と複数の候補があります。どれを選んでも良いです!
今回はE=3E=3とします!

4, Dを求める

1<D<201 < D < 20の中で (3×D)mod20=1(3\times D)\mod 20 = 1 となる数を探します。
D=7D=7の時に条件を満たします!

完成!

得られた(N,E)=(55,3)(N,E) = (55, 3)が公開鍵、そして(N,D)=(55,7)(N,D) = (55, 7)が秘密鍵です!

暗号化、復号化してみる

暗号化できる平文にはNN未満の正の整数という条件があります。
今回は「4」を暗号化してみましょう!

暗号化

先ほど求めたようにN=55,E=3N=55, E=3です

暗号文=43mod55=64mod55=9\begin{aligned} 暗号文&=4^{3}\mod 55\\ &=64 \mod 55\\ &=9 \end{aligned}

となり、暗号文は「9」です!

復号化

先ほど求めたようにN=55,D=7N=55, D=7です。 暗号文「9」を復号化してみましょう!

平文=97mod55=4782969mod55=4\begin{aligned} 平文&=9^{7} \mod 55\\ &= 4782969 \mod 55\\ &= 4 \end{aligned}

となり、先ほど暗号化した「4」が得られてます!!

まとめ

今回は世の中で多く使われているRSA暗号についてその計算方法を解説しました。日常生活での通信にこのような数学が生きていることが分かっていただけたら嬉しいです!

参考文献

結城浩(2015)暗号技術入門 第3版

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人