RSA暗号 — 素因数分解の難しさが錠前になる
「掛け算は一瞬、素因数分解は絶望的」という計算の非対称性から、誰でも施錠できるが本人しか開けられない南京錠を作る。鍵の生成から暗号化・復号、そして安全性の根拠まで、公開鍵暗号の代表 RSA を数を動かしながら分解します。
1. 公開鍵という発想 — 施錠と解錠を別の鍵に分ける
共通鍵暗号は高速ですが、「その鍵をどうやって相手に渡すか」という鍵配送問題がつきまといます。RSA の答えはこうです — 施錠する鍵と解錠する鍵を別物にしてしまえばいい。
メタファーは開いた南京錠です。ボブは開いた南京錠(公開鍵)を世界中にばらまく。誰でもそれをパチンと閉じて箱に掛けられる(=暗号化)。しかし開けられるのは、対になる鍵(秘密鍵)を持つボブただ一人(=復号)。閉める操作と開ける操作が別の鍵なので、閉める鍵は隠す必要がないのです。
2. 鍵生成工場 — 5ステップで鍵ペアを作る
RSA の鍵ペアは、素数2つから流れ作業で作られます。下の工場で p, q, e を選び、「次のステップ」を押して5工程を順に実行してください。各部品が公開してよいもの(緑)か絶対秘密(赤)かに注目を。ここでは目で追える小さな素数を使います(実物は各309桁級です)。
3. 暗号化と復号 — e で施錠、d で解錠
鍵ができたら、あとは時計の算術(mod)の世界でべき乗するだけです。メッセージを数 m にして、公開鍵 (n, e) で c = me mod n(施錠)。受け取った側は秘密鍵 d で m = cd mod n(解錠)。下のデモは教科書の定番例 p=61, q=53 → n=3233, e=17, d=2753 で、繰り返し2乗法の途中経過ごと再生します。
つまり「e 乗してから d 乗する」と、指数の世界で ed = 1 + kφ(n) となり、φ(n) 乗ごとに 1 に戻る周期性のおかげでちょうど m に帰ってくるのです。順番を入れ替えて「d 乗してから e 乗」しても同じく戻る — これが署名モードの正体です。
4. 安全性の根拠 — 素因数分解の壁
盗聴者イブは n も e も c も知っています。それでも m を取り出せないのは、d を作るのに必要な φ(n) が、n の素因数分解なしには求まらないから。ではその素因数分解はどれくらい大変なのか。桁数のスライダーを動かして、壁の高さを体感してください。
ただしこの壁は「古典コンピュータにとっての壁」です。量子コンピュータのショアのアルゴリズムは素因数分解を多項式時間で解いてしまうため、大規模な量子機が実現すると RSA は根本から崩れます。「量子が来たら?」の答えは ショアのアルゴリズム と 耐量子暗号 のレッスンへ。
5. まとめ — RSA の設計図
- 鍵生成:素数 p, q → n = pq、φ(n) = (p−1)(q−1)、gcd(e, φ(n)) = 1 な e を選び、d = e−1 mod φ(n)。公開鍵は (n, e)、秘密鍵は d。
- 暗号化 / 復号:c = me mod n、m = cd mod n。オイラーの定理が「ちょうど元に戻る」ことを保証する。
- 逆向きに使えば署名:d で作り e で確かめる。作れるのは d の持ち主だけ。
- 安全性の根拠:n から p, q を割り出す素因数分解の困難さ。推奨は 2048 ビット以上、ただし量子計算機(ショア)には破られる。