RSA暗号について、実際に何をしているか調べてみた。
詳細な数学理論は省き、以下について1ステップずつ追ってとにかく試してみる。
まず、RSA暗号の流れは以下3ステップからなる。
- 鍵ペア作成
- 暗号化
- 複号化
鍵ペア作成の流れ
STEP1 素数を2つ用意する
2つの素数を
で表す。
今回は計算を簡単にするため小さい数で試してみる。
STEP2 N を計算する
代入すると
STEP3 φ(N) を計算する
代入すると
STEP4 下記条件を満たす e を探す。
ただし、e
とφ(N)
は互いに素*1となる数を選ぶ。
e
はφ(N)
より小さい素数にしておけば、確実に互いに素となるため楽。
今回は下記にした。
STEP5 下記条件を満たす d を計算する。
これは e
× d
÷ φ(N)
の余りが 1 になると言う意味。
拡張ユークリッド互除法を使うと求められる*2。
このステップが一番の山場だと思う。
以下は完成した表。
最初に下記を埋める。
埋めると下記になる。
以降は下記計算を になるまで繰り返す。
の場合を計算すると
埋めると下記になる。
の場合を計算すると
埋めると下記になる。 のため完成。
ここで、 の時の、 が になる。
ただし、 が条件なので、 を正の値にするため、 とする。
従って
鍵ペア作成完了
ここまでのステップでやっと暗号化と複号化に必要な情報が揃った。
公開鍵(暗号鍵)
秘密鍵(複号鍵)
暗号化してみよう
実際に作成した公開鍵を使って暗号化してみよう。
平文を暗号化するには、公開鍵で以下計算をする。
今回は下記にした。
実際に計算すると…
従って、暗号文は 106 になる。
RSA暗号では、大きな数の累乗計算が登場する。
普通に計算したら、桁溢れを起こしてしまうので高速剰余計算(バイナリ法)を使う。
複号化してみよう
今度は作成した秘密鍵を使って暗号文を複号してみよう。 平文を複号するには、秘密鍵で以下計算をする。
実際に計算すると…
従って、得られた平文は 123 になり、元の平文との一致した。
分かっているけど、キチンと計算できると嬉しい。