← 暗号ラボへ戻る

03 / 公開鍵暗号

南京錠パズル(RSAの直感)

RSAのような公開鍵暗号は「誰でもかけられるが、特定の人しか開けられない南京錠」に例えられます。ここでは、その考え方を小さな数字で体験します。

1. 鍵ペアを見る

あなた(受信者)は「公開鍵」と「秘密鍵」の2つを持っています。公開鍵は誰に見せても構いませんが、秘密鍵は誰にも渡しません。

公開鍵(誰でも見られる) — 南京錠

n = 33, e = 7

秘密鍵(あなただけが持つ) — 開ける鍵

n = 33, d = 3

実際の n は 33 のような小さな数ではなく、数百桁の巨大な数です。33 = 3 × 11 のように簡単に素因数分解できてしまうと、秘密鍵が計算で割り出せてしまうため危険です。今回は「仕組みを見るため」にあえて小さくしています。

2. 送信者になって、メッセージをロックする

0〜25 の数字を1つ選んでください(A=0, B=1... のようなイメージ)。これがあなたの「秘密のメッセージ」です。送信者はあなたの公開鍵だけを使ってロックします。

m = 15
→ 公開鍵でロック (m^e mod n) →
c = ?

3. 秘密鍵なしで開けようとしてみる

ロックされた数字 c だけを見て、元の数字を当てられるでしょうか? 秘密鍵 d を知らないと、計算では簡単に戻せません。

4. 秘密鍵で開ける

受信者だけが持つ秘密鍵 d を使うと、簡単に元のメッセージへ戻せます。

c = ?
→ 秘密鍵で開錠 (c^d mod n) →
m = ?

この「ロックは誰でもできるが、開けるのは鍵を持つ人だけ」という非対称性が公開鍵暗号の核心です。ウェブサイトが https で安全に通信できるのも、この仕組みが土台になっています。