RSA暗号を手計算で体験!
小さな数字で暗号化・復号の全工程を解説
- RSA暗号の鍵生成・暗号化・復号を小さな数字(N=15)で実際に計算できる
- 「素因数分解の難しさ」が暗号の強さになる理由が直感的にわかる
- RSA暗号がビットコインではなく楕円曲線暗号(ECC)に置き換えられた理由もわかる
「RSA暗号って難しそう…」と思っているかもしれないけど、実は小学校レベルの計算だけで体験できるんだよ🐾
今日はN=15という超シンプルな例を使って、暗号化から復号まで全部手計算でやってみよう!
1. RSA暗号とはなにか?
RSA暗号は1977年に開発された公開鍵暗号方式だよ。世界で最も広く使われてきた暗号で、インターネットのHTTPS通信(鍵マーク)にも使われているんだ。
RSAの安全性の根拠はシンプルだよ:
「大きな数を2つの素数に分解するのは、現実時間では不可能」
例えば「N = 143」を見ても、これが「11 × 13」だとすぐわかる人は少ないよね。これが何百桁になると、世界最速のコンピュータでも数万年かかるんだ。この「素因数分解の難しさ」を安全性の根拠にしているんだよ🐾
2. ステップ①:秘密鍵と公開鍵のペアを作る
今回使う超シンプルな例(大阪大学 三浦研究室の講義演習より):
「素数」とは、1と自分自身でしか割り切れない数のことだよ。3も5も素数だよ🐾
この N = 15 が公開される数字だよ。でも「15 = 3 × 5」と分かっている人は今だけ!実際のRSAは何百桁もあるから逆算は不可能なんだ。
「lcm」は最小公倍数のことだよ。2と4の最小公倍数は4だね。
L(=4)と「互いに素」な数を選ぶんだ(共通の約数が1のみ)。3と4の最大公約数は1なので OK。E は公開していい数字だよ。
3 × D mod 4 = 1 → D = 11(秘密鍵)
確認:3 × 11 = 33。33 ÷ 4 = 8 余り 1。✅ OK!
D = 11 は絶対に秘密にしておく数字だよ🐾
| 項目 | 値 | 公開? |
|---|---|---|
| N(法) | 15 | ✅ 公開 |
| E(公開鍵) | 3 | ✅ 公開 |
| D(秘密鍵) | 11 | 🔴 秘密 |
| p, q(素因数) | 3, 5 | 🔴 秘密(捨てる) |
3. ステップ②:暗号化してみよう
平文(送りたいメッセージ)を M = 7 としよう。
本来は「A=1、B=2...」のような文字コード変換をして数字にするんだけど、今回はシンプルにM=7で試すよ。
73 = 7 × 7 × 7 = 343
343 ÷ 15 = 22 余り 13
→ 暗号文 C = 13
「7」というメッセージが、「13」という暗号文に変換されたよ!
これを受け取った人には、N=15とE=3(公開鍵)は知っていても、秘密鍵D=11がわからないと復号できないんだ。
4. ステップ③:復号してみよう
受け取った暗号文 C = 13 を、秘密鍵 D = 11 で復号するよ。
1311 = 1,792,160,394,037
1,792,160,394,037 ÷ 15 = 119,477,359,602 余り 7
→ 復号された平文 M = 7 ✅
7が13に暗号化され、13が7に戻ってきた!元のメッセージが正確に復元されたよ🐾
この「魔法」の理由は、オイラーの定理という数学的な証明にあるんだけど、今は「そういう仕組みになっている」と覚えておけば大丈夫だよ。
5. 全体の流れをまとめると
| ステップ | 計算内容 | 値 |
|---|---|---|
| 素数選択 | p=3, q=5 | – |
| N(法) | p × q | 15 |
| L(最小公倍数) | lcm(2, 4) | 4 |
| E(公開鍵) | Lと互いに素な数 | 3 |
| D(秘密鍵) | E × D mod L = 1 を満たす | 11 |
| 暗号化 | 73 mod 15 | 13 |
| 復号 | 1311 mod 15 | 7 ✅ |
6. ビットコインの秘密鍵との違い
🔗 RSA暗号 vs ビットコインの秘密鍵
ビットコインはRSAではなく楕円曲線暗号(ECC/secp256k1)を使っているんだ。理由はシンプル——同じ安全レベルなら、ECCはRSAより約1/10の鍵長で済むから。
RSA では128bit相当の安全性に3,072bitの鍵が必要。ECCなら256bitで同等。スマホでビットコインを管理する場合、計算量が少なく端末への負荷が低いECCが最適なんだよ🐾
RSA暗号の手計算を体験したことで、「なぜ公開鍵から秘密鍵を逆算できないのか」が感覚でわかったんじゃないかな。N=15のような小さな数でさえ、1311という膨大な計算が必要だったよね。現実のRSAやECCは桁数が何百倍も大きいから、逆算は事実上不可能なんだよ🐾
← 技術と仕組みに戻る