5. 鍵生成 素数 p, q(p ≠ q) を用意する n = p * q , φ = (p – 1) * (q – 1) φ との最大公約数が 1 になるような e を選ぶ d * e ≡ 1 (mod φ) である最小の d を求める ( d*e を n で割った余りが 1 ) n, e を公開鍵, p, q, d を秘密鍵とする
6. 暗号化と復号 平文 m から暗号文 c を生成する c = m e mod n 暗号文 c から平文 m に復号する m = c d mod n
7. 暗号解読 公開鍵 (n, e) から秘密鍵 (p, q, d) を割り出すには? n = p * q -> 素因数分解 φ = (p – 1) * (q – 1), d * e ≡ 1 (mod φ) -> d * e + (-x) * φ= 1 -> 拡張ユークリッド互除法
8. 素因数分解を暗算 適当な整数 k を思い浮かべる (素数だとわかっていればなお良い) n を k で割ってみる(暗算) 割り切れたら , p = k, q = n / k 割り切れなかったら, 1 へ戻る
10. 拡張ユークリッド互除法を暗算 a = φ, b = e とおく 右辺が 1 になるまで頑張る(暗算) r 0 : 1 * a + 0 * b = φ r 1 : 0 * a + 1 * b = e r 2 = r 0 – (r 0 /r 1 )*r 1 : 1 * a – (φ/e) * b = (φ mod e) … r k = r k-2 – (r k-2 /r k-1 ) * r k-1 : x * a + y * b = z … r n : -(d*e/φ) * a + d * b = 1