🔐 RSA暗号を手で計算してみよう!
鍵生成・暗号化・復号を数値例で完全解説

もふねこ

もふねこだよ🐾 「RSA暗号ってよく聞くけど、具体的にどう計算するの?」って思ったことない?

今回は小さな素数(p=3, q=5)から始めて、手で計算できる超シンプルな例で、RSAの仕組みを一から体験してみよう!

RSA暗号は「大きな素数の掛け算は簡単だけど、答えから元の素数を求めるのは超難しい」という性質を使った暗号。でも「難しい」とだけ言っても実感がわかないよね。だから今回は、実際に手で計算できる小さな数値で動きを確認してみよう!

RSA鍵生成の4ステップ

RSAの鍵生成は次の4つのステップで行う。これを「小さな数」で確認しよう。

🔑 鍵生成の流れ(p = 3, q = 5 の例)

STEP 1
2つの素数 p, q を選んで N = p × q を計算
p = 3, q = 5 → N = 3 × 5 = 15
STEP 2
L = (p-1) と (q-1) の最小公倍数を計算
L = lcm(3-1, 5-1) = lcm(2, 4) = 4
STEP 3
L と互いに素な E(公開鍵)を選ぶ
E = 3(gcd(3, 4) = 1 ✓)
STEP 4
E × D mod L = 1 となる D(秘密鍵)を計算
3 × D mod 4 = 1 → D = 11(3×11=33, 33 mod 4 = 1 ✓)
結果: N = 15  公開鍵 E = 3  秘密鍵 D = 11

暗号化・復号を手で確認

上で求めた N=15, E=3, D=11 を使って、実際に平文 M = 7 を暗号化・復号してみよう。

📝 暗号化の計算(M = 7 → 暗号文 C)

公式:C = ME mod N

計算:C = 73 mod 15 = 343 mod 15

343 ÷ 15 = 22 余り 13(22 × 15 = 330, 343 - 330 = 13)

➡️ 暗号文 C = 13

✅ 復号の計算(C = 13 → 平文 M)

公式:M = CD mod N

計算:M = 1311 mod 15

1311 = 1,792,160,394,037… (大きい!)

これ mod 15 を計算すると → 7

➡️ 復号結果 M = 7(元の平文に戻った! ✓)

🧮 RSA手計算ウォークスルーツール

2つの素数を入力すると、鍵生成・暗号化・復号のステップを自動で計算して表示するよ。小さな素数(3〜20程度)から試してみよう!

🔐 RSA鍵生成ウォークスルー

📋 もっとリアルな例:9bit RSA(N = 323)

手計算では小さな数で確認したけど、実際に使うにはもっと大きな数が必要。以下は 9bit(N が9桁二進数)の鍵ペアの例だ。上記の計算と同じ4ステップで生成されている。

📊 9bit RSA 鍵ペアリスト

N(法) 素数の積 L E(公開鍵) D(秘密鍵)
32317 × 191441717
39117 × 231761951
43719 × 23198541

例:N=323, E=17, D=17 → 平文 M=7 を暗号化 → C = 717 mod 323 を計算

もふねこ

9bitのN=323だと、平文は1〜322の整数に対応。ASCII文字1文字(8bit = 0〜255)を暗号化するのに使えるよ🐾
でも現実のRSAは2048bit以上!素数も何百桁もある数を使うんだ。

ビット数と送れるメッセージ量の関係

RSAで暗号化できる平文のサイズは、Nのビット数によって決まる。

ビット数 N の最大値 送れるメッセージの目安 現実の用途
4bit 15 1〜14の整数(手計算の例) 学習・演習用
9bit 511 ASCII 1文字(0〜255) 演習・体験用
17bit 131,071 ASCII 2文字(0〜65535) 演習用
2048bit 約10617 ハイブリッド暗号の鍵交換 現在の標準(TLS, SSL等)

なぜRSAは安全なの?

RSAの安全性は、「大きな数の素因数分解が極めて困難」という数学的性質に依存している。

⚠️ RSAの解読への脅威

  • 2009年:768bitの素因数分解に成功(スーパーコンピュータで数年)
  • 現在:1024bitの解読法を探索中(安全とは言い切れない)
  • 現在の標準:2048bit以上を推奨(NIST勧告)
  • 将来の脅威:量子コンピュータのShorアルゴリズムによる高速因数分解
RSAの次世代

楕円曲線暗号(ECC):ビットコインが実際に使う技術

ビットコインが実際に使っているのはRSAではなく楕円曲線暗号(ECC)です。RSAよりも短い鍵長で同等の安全性を実現できる点が特徴。楕円曲線上の「離散対数問題」という数学的な困難性が、秘密鍵の安全性を保証しています。

T = sG
T:公開鍵 s:秘密鍵(数百桁の整数) G:楕円曲線上の基準点
TとGからsを逆算するのは現実的な時間では不可能
💬 「Not your keys, not your coins(鍵がなければコインではない)」— 秘密鍵の数学的な安全性がこの格言を支えています

🚀 RSAを実際に体験してみよう

計算の仕組みを理解したら、実際にRSA暗号を体験できる「RSAプレイグラウンド」で試してみよう!

🎮 RSAプレイグラウンドへ 📖 STEP 4:公開鍵暗号を最初から読む

🔗 関連コンテンツ

この記事を読み終えたらスタンプをゲットしよう!

🔙 STEP 4:公開鍵暗号へ戻る 🎮 RSAを実際に体験する 🔜