Lahの部屋

落書き帳です。見たい人は見てください。

RSA暗号の原理(+証明)

概要

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

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

 

暗号化と復号

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

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

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

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

\begin{align} d \equiv e^{-1} \pmod n \end{align}

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

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

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

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

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

とかけ、 a' = aである。

 

原理の証明

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

\begin{align} de -x\phi(n)= 1\end{align}

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

定義より

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

である。したがって、

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

が成立する。

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

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

 フェルマーの小定理より

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

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

\begin{align} a^{\phi(n)} \equiv 1 \pmod n \end{align}

であるから、

\begin{align} a' = (a^{\phi(n)})^x \cdot a \equiv a \pmod n \end{align}

が成立する。

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

\begin{align} a \equiv 0 \pmod p \end{align}

であるから、

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

である。

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

\begin{align} a^{q-1} \equiv 1 \pmod q \end{align}
が成立する。よって、

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

であることから、

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

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

\begin{align} a' \equiv a \pmod n \end{align}

が成立する。

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

 ( ii )と同様にして

\begin{align} (a^\phi(n))^x \cdot a \equiv a \pmod n \end{align}

が示される。

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

\begin{align} a' \equiv a \pmod n \end{align}

が成立する。

  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 を定義したとき、

\begin{align} \phi(n) = (p-1)(q-1) \end{align}

が成り立つ。

 

フェルマーの小定理

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

\begin{align} a^p \equiv a \pmod p \end{align}

が成立する。

証明

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

\begin{align} (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{★} \end{align}

が成り立つ。

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

\begin{align} (m+1)^p \equiv m^p+1 \pmod p \end{align}

が成立する。

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

\begin{align} 2^p \equiv 2 \pmod p \end{align}

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

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

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

\begin{align} (k+1)^p \equiv k^p+1 \pmod p \end{align}

であり、仮定より、

\begin{align} k^p \equiv k \pmod p \end{align}

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

\begin{align} (k+1)^p \equiv k+1 \pmod p \end{align}

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

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

 

まとめ

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