RSA暗号との違い
まずRSA暗号を知らない人は以下の記事を読んでみてください!
https://www.ochappa.net/posts/rsa-calc
Nの値が2つの素数からではなく、3つ以上の素数からなります。
RSA:NMulti−prime RSA:N=p×q=p1k1×p2k2×...×pnkn
オイラー関数
鍵の生成の前にオイラー関数について知っておく必要があります。
本題ではないので簡単に説明します。
オイラー関数とは以下のことです
φ(n)=nと互いに素である1以上n未満の自然数の個数
例
φ(10)を考えてみましょう!
10と互いに素な自然数は{1, 3, 7, 9}の4つです。
したがって、φ(10)=4となります。
鍵を作る
鍵の作成はRSAとほとんど同じです。
- Nを作る
- φ(N)を求める
- Eを作る
- Dを作る
1. Nを作る
いくつかの素数p,q,r...を選びNを作ります
N=pk1×qk2×rk3...
2, オイラー関数を計算する
φ(N)を計算します。
もしも、N=p×q×r...のような一乗の素数だけで構成されいると以下のような簡単な式で計算できます。
φ(N)=(p−1)(q−1)(r−1)...
3, Eを作る
Eは以下の条件式を満たす者です
1<E<φ(N)gcd(E,φ(N))=1
1<E<φ(N)の中でφ(N)と互いに素な数ということです!
4, Dを作る
Dは以下の条件式を満たすものです。
1<D<φ(N)E×D≡1modφ(N)
E×Dの値をφ(N)で割った余りが1ということですね!
完成!
このようにして得られたEとNが公開鍵、DとNが秘密鍵です!
実際に計算してみる
1, Nを作る
今回はp=3,q=5,r=7でいきます!
N=3×5×7=105
2, オイラー関数の計算
今回はすべて1乗なので簡単に計算できます!
φ(105)=(3−1)(5−1)(7−1)=48
3, Eを作る
1<E<48の中で48と互いに素(gcd(E,48)=1)の数を探します。
E=5,7,11...と複数の候補が見つかります。どれを選んでも良いですが、今回はE=5とします!
4, Dを作る
1<D<48の中で 5E≡1mod48 となるDを探します。
D=29の時に条件を満たします!
完成!
得られたE=5,N=105が公開鍵、そしてD=29,N=105が秘密鍵です。
暗号化、復号化してみる
今回は「32」を暗号化してみましょう!
暗号化
公開鍵はE=5,N=105ですので以下の式で暗号化できます
暗号文=325mod105=33554432mod105=2
得られた「2」が暗号文です!
復号化
D=29,N=105の秘密鍵で先ほどの暗号「2」を復号しましょう!
平文=229mod105=536870912mod105=32
先ほど暗号化した「32」が得られています!
正しく復号化できました!
まとめ
今回はMulti-prime RSAについて学びました。ほどんどRSA暗号と同じということが分かったと思います!
参考文献
Hinek, M. Jason. "On the security of multi-prime RSA." Journal of Mathematical Cryptology 2.2 (2008): 117-147.