ワンタイムパッド:XORで完全秘匿
平文を鍵と XOR するだけで完全秘匿。でも鍵を使い回した瞬間に秘匿は崩れる ── その理由を「動かして」確かめます。
操作モード
72
201
#23
ビット格子のマスをクリックすると、その平文ビットを 0↔1 反転できます。
平文 P₁
—
鍵 K
—
暗号文 C₁ = P₁⊕K
—
漏れ C₁⊕C₂ = P₁⊕P₂
—
ビットごとの XOR(クリックで反転)
攻撃者の視点:暗号文だけ見てもどの平文か決められない
XOR(排他的論理和 ⊕)は「2つのビットが違えば 1、同じなら 0」を返す演算です。
平文 P と、平文と同じ長さの真の乱数の鍵 K を 1 ビットずつ XOR すると暗号文
受信者は同じ鍵で
ところが同じ鍵を 2 つの平文に使い回すと、
C = P ⊕ K ができます。受信者は同じ鍵で
C ⊕ K = P と元に戻せます(XOR は自分自身で打ち消す)。
鍵が完全な乱数で一度きりなら、暗号文からは平文について何も分かりません ── これが
クロード・シャノンが証明した完全秘匿(perfect secrecy)です。ところが同じ鍵を 2 つの平文に使い回すと、
C₁ ⊕ C₂ = P₁ ⊕ P₂ となって鍵が消え、平文どうしの差が漏れてしまいます。
「ワンタイム(1回限り)」が名前に入っている理由を、右の図で体感しましょう。
いま何が起きている?
ここがポイント
- C = P ⊕ K ── XOR は可逆。同じ鍵でもう一度 XOR すれば
C ⊕ K = Pに戻る。 - 鍵が真の乱数で1回限りなら、どの平文も等確率であり得る(完全秘匿)。攻撃者は総当たりしても全候補が残る。
- 使い回し厳禁 ──
C₁ ⊕ C₂ = P₁ ⊕ P₂で鍵が打ち消され、平文どうしのビット差がそのまま露出する。 - 鍵は平文と同じ長さが必要で、安全に共有・保管するのが難しい。だから実用では擬似乱数を使うストリーム暗号に発展した(ただし同じ脆さを継ぐ)。