Multi-prime RSAの計算方法&実際に計算する

投稿日: 更新日:

RSA暗号との違い

まずRSA暗号を知らない人は以下の記事を読んでみてください!

https://www.ochappa.net/posts/rsa-calc

NNの値が2つの素数からではなく、3つ以上の素数からなります。

RSA:N=p×qMultiprime RSA:N=p1k1×p2k2×...×pnkn\begin{aligned} RSA : N &= p\times q\\ Multi-prime\ RSA: N &= p_1^{k_1} \times p_2^{k_2} \times ...\times p_n^{k_n} \end{aligned}

オイラー関数

鍵の生成の前にオイラー関数について知っておく必要があります。
本題ではないので簡単に説明します。
オイラー関数とは以下のことです

φ(n)=nと互いに素である1以上n未満の自然数の個数\varphi(n) = nと互いに素である1以上n未満の自然数の個数

φ(10)\varphi(10)を考えてみましょう!
10と互いに素な自然数は{1, 3, 7, 9}の4つです。 したがって、φ(10)=4\varphi(10) = 4となります。

鍵を作る

鍵の作成はRSAとほとんど同じです。

  1. NNを作る
  2. φ(N)\varphi(N)を求める
  3. EEを作る
  4. DDを作る

1. Nを作る

いくつかの素数p,q,r...p, q, r ...を選びNNを作ります

N=pk1×qk2×rk3...N=p^{k_1} \times q^{k_2} \times r^{k_3}...

2, オイラー関数を計算する

φ(N)\varphi(N)を計算します。
もしも、N=p×q×r...N=p \times q \times r...のような一乗の素数だけで構成されいると以下のような簡単な式で計算できます。

φ(N)=(p1)(q1)(r1)...\varphi(N) = (p-1)(q-1)(r-1)...

3, Eを作る

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

1<E<φ(N)gcd(E,φ(N))=11 < E < \varphi(N)\\ \gcd(E, \varphi(N))=1

1<E<φ(N)1<E<\varphi(N)の中でφ(N)\varphi(N)と互いに素な数ということです!

4, Dを作る

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

1<D<φ(N)E×D1modφ(N)1 < D < \varphi(N)\\ E\times D \equiv 1 \mod\varphi(N)

E×DE\times Dの値をφ(N)\varphi(N)で割った余りが1ということですね!

完成!

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

実際に計算してみる

1, Nを作る

今回はp=3,q=5,r=7p=3, q=5, r=7でいきます!

N=3×5×7=105\begin{aligned} N&=3\times 5 \times 7\\ &= 105 \end{aligned}

2, オイラー関数の計算

今回はすべて1乗なので簡単に計算できます!

φ(105)=(31)(51)(71)=48\begin{aligned} \varphi(105) &= (3-1)(5-1)(7-1)\\ &= 48 \end{aligned}

3, Eを作る

1<E<481 < E < 48の中で48と互いに素(gcd(E,48)=1\gcd(E, 48)=1)の数を探します。
E=5,7,11...E = 5, 7, 11...と複数の候補が見つかります。どれを選んでも良いですが、今回はE=5E=5とします!

4, Dを作る

1<D<481 < D < 48の中で 5E1mod485E \equiv 1 \mod 48 となるDDを探します。
D=29D = 29の時に条件を満たします!

完成!

得られたE=5,N=105E = 5, N = 105が公開鍵、そしてD=29,N=105D = 29, N=105が秘密鍵です。

暗号化、復号化してみる

今回は「32」を暗号化してみましょう!

暗号化

公開鍵はE=5,N=105E = 5, N = 105ですので以下の式で暗号化できます

暗号文=325mod105=33554432mod105=2\begin{aligned} 暗号文 &= 32^{5}\mod 105\\ &= 33554432 \mod 105\\ &= 2 \end{aligned}

得られた「2」が暗号文です!

復号化

D=29,N=105D = 29, N=105の秘密鍵で先ほどの暗号「2」を復号しましょう!

平文=229mod105=536870912mod105=32\begin{aligned} 平文&=2^{29}\mod 105\\ &= 536870912 \mod 105\\ &= 32 \end{aligned}

先ほど暗号化した「32」が得られています!
正しく復号化できました!

まとめ

今回はMulti-prime RSAについて学びました。ほどんどRSA暗号と同じということが分かったと思います!

参考文献

Hinek, M. Jason. "On the security of multi-prime RSA." Journal of Mathematical Cryptology 2.2 (2008): 117-147.

書いた人

profile_image

お茶の葉

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