メインコンテンツへスキップ

RSA暗号の原理(+証明)

目次

概要
#

 RSA暗号は現在普及している公開鍵暗号の基礎となる暗号技術である。説明しているサイトは色々あるが、他人が書いたものなので読みにくかった。私にとって分かりやすいように書く。Wikipediaの同項目を参考にした。

 証明中で用いたオイラーのφ関数とフェルマーの小定理については後半で解説した。

暗号化と復号
#

 0以上n未満の整数の集合を \(\mathbb{Z}_n\)とおく。

 異なる2つの素数 \(p, q\) をとり、\( n:=p,q\) を定義する。

 \( (p-1)(q-1)\)と互いに素であるような \( e\)(公開鍵)を任意に設定する。

 このとき、秘密鍵 \( d \in \mathbb{Z}_n\)は

$$ d \equiv e^{-1} \pmod n $$

、すなわち \( e\) のモジュラ逆数となるように作成される。\( e\) のみから導くのは困難だが、 \(p, q\) が既知であれば、ユークリッドの互除法によって導出できる。

 平文 \( a \in \mathbb{Z}_n-\{0\}\) について、暗号文 \( b\) は、

$$ b = \{ z \in \mathbb{Z}_n | z \equiv a^e \pmod n \} $$

と算出できる。これを復号したものを ( a’]とすると、

$$ a' = \{ z \in \mathbb{Z}_n | z \equiv b^d \pmod n \} $$

とかけ、 \( a' = a\) である。

原理の証明
#

  \( e\) と \( \phi(n)=(p-1)(q-1)\)(オイラーのφ関数)は互いに素だから、任意の正の整数 \( d\)について、

$$ de -x\phi(n)= 1 $$

となるような正の整数 \( x\)が存在する。

定義より

$$ a' \equiv a^{de} \pmod n = a^{x\phi(n)+1} = (a^\phi(n))^x \cdot a \tag{1} $$

である。したがって、

$$ a' \equiv (a^\phi(n))^x \cdot a \pmod p \tag{2} \\ a' \equiv (a^\phi(n))^x \cdot a \pmod q \tag{3} $$

が成立する。

  \( a\)は \( n\)未満であることから、以下の( i )( ii )( iii )によって、すべての場合を扱える。以下では式(1),(2),(3)を用いる。

( i ) \( a\)が \( p,q\)のそれぞれと互いに素であるとき

 フェルマーの小定理より

$$ a^{\phi(n)} \equiv 1 \pmod p \tag{3} \\\ a^\phi(n) \equiv 1 \pmod q \tag{4} $$

が成立する。式(3),(4)より

$$ a^{\phi(n)} \equiv 1 \pmod n $$

であるから、

$$ a' = (a^{\phi(n)})^x \cdot a \equiv a \pmod n $$

が成立する。

( ii ) \( a\) が \( p\) の倍数であるとき

$$ a \equiv 0 \pmod p $$

であるから、

$$ a' = a^\phi(n) \cdot a \equiv a \pmod p \tag{5} $$

である。

  \( a\) は \( q\) と互いに素だから、フェルマーの小定理より、

$$ a^{q-1} \equiv 1 \pmod q $$

が成立する。よって、

$$ a^\phi(n) = a^{(p-1)(q-1)} \equiv 1 \pmod q $$

であることから、

$$ a' = (a^\phi(n))^x \cdot a \equiv a \pmod q \tag{6} $$

となる。式(5),(6)より、

$$ a' \equiv a \pmod n $$

が成立する。

( iii ) \( a\) が \( q\) の倍数であるとき

 ( ii )と同様にして

$$ (a^\phi(n))^x \cdot a \equiv a \pmod n $$

が示される。

 ( i )( ii )( iii )より、すべての場合について

$$ a' \equiv a \pmod n $$

が成立する。

  \( a,a' \in \mathbb{Z}_n-\{0\}\) であるから、 \( a'=a\) である。

オイラーのφ関数
#

 正の整数 \( n\) に対して、 \( n\) と互いに素である \( 1\) 以上 \( n\) 以下の整数の個数 \( \phi(n)\) のことをこう呼ぶ。

 したがって、 \( n\) が素数ならば \( \phi(n)=n-1\) である。

 異なる2つの素数 \(p, q\) について \( n:=pq\) を定義したとき、

$$ \phi(n) = (p-1)(q-1) $$

が成り立つ。

フェルマーの小定理
#

 任意の素数 \( p\) と、 \( p\) の倍数でない任意の整数 \( a\) について、

$$ a^p \equiv a \pmod p $$

が成立する。

証明
#

 任意の素数 \( p\) と任意の正の整数 \( m\) をおく。二項定理より、

$$ (m+1)^p=m^p+{}_p\mathrm{C}_1 m^{p-1} + {}_p\mathrm{C}_2 m^{p-2} + \cdots + {}_p\mathrm{C}_{p-1} m + 1 \tag{★} $$

が成り立つ。

  \( p\) が素数であるため、 \( p\) 未満の正の整数 \( k\) について \( {}_p\mathrm{C}_k\) が \( p\) の倍数となることから、

$$ (m+1)^p \equiv m^p+1 \pmod p $$

が成立する。

( i ) 式(★)に \( m=1\) を代入すると、

$$ 2^p \equiv 2 \pmod p $$

となり、 \( a=2\) において命題は成り立つ。

( ii ) 命題が \( a=k (k = 2,3,\cdots) \) において成立すると仮定する。

 このとき、式(★)から、

$$ (k+1)^p \equiv k^p+1 \pmod p $$

であり、仮定より、

$$ k^p \equiv k \pmod p $$

であることを踏まえると、

$$ (k+1)^p \equiv k+1 \pmod p $$

となり、 \( a = (k+1) \) においても命題が成立する。

 ( i )と( ii )より、題意は示された。

まとめ
#

 楽しかった。せっかく原理を学んだので、RSAで平文を暗号化するツールを作りたい。