エニグマ暗号

第2次大戦中に用いられたエニグマ暗号を再現

エニグマ暗号とは

エニグマ暗号は紀元前から広く用いられてきたシーザー暗号の応用である。まずシーザー暗号について解説する。

シーザー暗号

シーザー暗号はアルファベットを決められた規則でずらしていくごく単純な暗号である。最も単純なシーザー暗号は全ての原文をアルファベット1文字を使ってずらすのだが、その程度の暗号ではたったの26パターンの総当りで破られる。ここでは任意の単語を使った多項式のシーザー暗号を紹介する。

例えば原文がHELLOWORD、鍵がKEYであったとする。KはAから数えて11番目、Eは5番目、Yは25番目になる。まず原文の1文字目のHをKで暗号化する、具体的にはHを11文字ずらす。Hの11文字後はSになる。次はEをEで、つまり5文字ずらす。EはJになる。この動作を繰り返す。Zを越えた場合はAに戻る。

原文 H E L L O W O R D
K E Y K E Y K E Y
暗号文 S J K W T V Z W C

よってHELLOWORDSJKWTVZWCに暗号化される。

手動では時間がかかるので自動的に処理してくれるスクリプトを書いた。試して欲しい。

シーザー暗号デモ
原文(アルファベット)

暗号文

エニグマ暗号

最初にエニグマ暗号はシーザー暗号の応用と言ったが、シーザー暗号は先の例でいえば有限長の鍵を繰り返す使うタイプの暗号である。これだと一部でも文字が分かると全ての暗号が解読されてしまう。シーザー暗号では特にアルファベットの使用頻度が重要な手がかりになるため、短い鍵は有限回のパターン分析で解読されてしまう。

ではどうするか。同じ鍵の反復が原因なら、いっそ鍵の長さを無限にすればいい。それを実現したのがエニグマ暗号である。有限の鍵からほぼ無限の長さの鍵を生成し、その無限長の鍵で暗号化するというものだ。

エニグマ暗号の仕組み

エニグマ暗号は有限長の鍵から無限長の鍵を生成して暗号化する。機械制御で作れらた当時、これは複数の周期の違う輪を使って実現された。具体的にはアルファベットが振られたギアを組み合わせ、1番目のギアが1回転すると2番目のギアが1つ動く、2番目のギアが1回転すると3番目のギアが1つ動く。それぞれのギアにはアルファベットが振られており、各ギアの特定の位置にあるアルファベットの合計分だけ原文のアルファベットをずらすことにとって暗号化する。例えば4つの輪で構成され各輪の周期が11,13,17,19なら鍵の長さは11*13*17*19で46189となる。輪が増えれば増えるほど鍵の長さは爆発的に増大する。なお、ば途中で重複を起こさないように輪は全ての輪の周期の最大公約数が1だけにする必要がある。

エニグマ暗号デモ

シーザー暗号と同じくアルファベットのみしか使えない。鍵はカンマで区切って幾つでも入力できる。

実際には"多くの工夫"がなされたが、これは上に書いた最も単純な方式で作られている。

エニグマ暗号デモ
原文(アルファベット)

暗号文
鍵の長さ

ページ情報

作成日時
2006/03/15
最終更新日時
2006/03/15
HTML4.01版
index.html
XHTML1.1版
index.xhtml
XML原本
index.xml