どうやって暗号化するのか?
計算式自体はとてもシンプルです。
平文をE乗してNで割った余りを求めるだけです。
EはEncryption(暗号化)の頭文字です。
暗号文=(平文)EmodN
どうやって復号化するのか?
こちらも計算式はシンプルです。暗号文をD乗してNで割った余りを求めるだけです。
DはDecryption(復号化)の頭文字です。
平文=(暗号文)DmodN
鍵を作る
鍵の作成手順は次の通りです。
- Nを作る
- Lを求める
- Eを作る
- Dを作る
1, Nを作る
まず2つの素数 p,q を用意します。 そして、その2つを掛けたものが N です。
N=p×q
何とシンプル。。。
2, Lを求める
Lはp−1とq−1の最小公倍数(lcm)です。
p−1 と q−1の最小公倍数を lcm(p−1,q−1) と書きます。
L=lcm(p−1,q−1)
3, Eを作る
Eは以下の条件式を満たすものです。
1<E<Lgcd(E,L)=1
1<E<Lの中でEとLが最大公約数 (gcd) が「1」、つまり互い素であるものです。
EとLの最大公約数を gcd(E,L) と書きます。
4, Dを作る
Dは以下の条件式を満たすものです。
1<D<L(E×D)modL=1
Dは1<D<Lの中でE×Dの割ったあまりが「1」であるものです。
完成!
このようにして得られたEとNのペアが公開鍵、DとNのペアが秘密鍵です!
実際に計算してみる
1, Nを作る
p=5, q=11としてみます。どちらも素数です。
N=5×11=55
となり、N=55となりました!
2, Lを求める
5−1と11−1の最小公倍数を求めます
L=lcm(5−1,11−1)=lcm(4,10)=20
となり、L=20となりました!
3, Eを求める
1<E<20の中でgcd(E,20)=1となる数を探します。
E=3,7,11,...と複数の候補があります。どれを選んでも良いです!
今回はE=3とします!
4, Dを求める
1<D<20の中で (3×D)mod20=1 となる数を探します。
D=7の時に条件を満たします!
完成!
得られた(N,E)=(55,3)が公開鍵、そして(N,D)=(55,7)が秘密鍵です!
暗号化、復号化してみる
暗号化できる平文にはN未満の正の整数という条件があります。
今回は「4」を暗号化してみましょう!
暗号化
先ほど求めたようにN=55,E=3です
暗号文=43mod55=64mod55=9
となり、暗号文は「9」です!
復号化
先ほど求めたようにN=55,D=7です。
暗号文「9」を復号化してみましょう!
平文=97mod55=4782969mod55=4
となり、先ほど暗号化した「4」が得られてます!!
まとめ
今回は世の中で多く使われているRSA暗号についてその計算方法を解説しました。日常生活での通信にこのような数学が生きていることが分かっていただけたら嬉しいです!
参考文献
結城浩(2015)暗号技術入門 第3版