戻る エニグマ (Enigma)



エニグマは第二次世界大戦でドイツ軍が使用した暗号システムです。

簡単な暗号機で極めて複雑な暗号を作ることができたので、 ドイツ軍の無線通信に使用され、大戦初期の快進撃に貢献しました。 ドイツ軍の U ボート と呼ばれた潜水艦は、連合国軍の船団に壊滅的ともいえる損害を与えていました。

ドイツ軍はエニグマに絶大の自信を持っていたため、 これが連合軍に解読されるとは夢にも思っていませんでした。

しかし、1930年代にはポーランドで解読に成功し、 次いでイギリスでも、チューリングらによって、エニグマが解読されました。

映画 "U-571" には、U ボートから、 エニグマ暗号機をドイツ軍に察知されないで奪うためにどのようなドラマが展開されたか… が描かれています。 (ま、映画ですから、そもそもエニグマとは… が省略されていて、 連合軍がどれほどエニグマに手を焼いていたかについても殆ど説明がありません。 予備知識がないと、 「面白いけれどもよく分からない」 映画だったかもしれません。 このページを見てから、もう一度映画を見ると、よく分かるかも…)

暗号解読によって得た情報は、1944年6月のノルマンディ上陸作戦でも 連合軍の勝利に大いに寄与しました。
戦争では通信内容の秘匿 (暗号の信頼性) がいかに重要かということを示す一例です。

歴史に "もし" は禁物ですが、 エニグマ暗号が "もし" 解読されていなければ、 ノルマンディ上陸作戦や大戦での連合軍の勝利はずっと遅れたか、 あるいは、勝利そのものさえなかった (?) かもしれません。


Enigma Machine
エニグマ
右の写真はエニグマ暗号機です。

本体上面は、大きく分けると奥から順に、 3つのローターとリフレクタからなる 「スクランブラー」、 暗号化された文字がランプで表示される 「ランプボード」、 文字を入力する 「キーボード」 の3つのユニットで構成されています。

手前前面は 「プラグボード」 と呼ばれています。 このプラグボードにコネクタ付きケーブルをセットすることによって、 任意の文字の配線を入れ替えることができるので、暗号をさらに複雑なものにすることができます。

キーボードのキーを押すと、電流はまずスクランブラーの右端のローターに伝えられます。

ローターは右下の写真のように、26個の接点を持っています。 反対側の面にも、隣のローターに接触するための 26個の端子があります。 そして、この26組の電極は、 ローターの内部でそれぞれランダムに 接続されています。
このため、"A" のキーから電流が流れてきても、ローターを通過すると 例えば "G" の文字に対応する接点に電流が流れます。
このようにして、ローターを通過するたびに電流は別の文字に対応する接点に移されながら、 左端のリフレクタに到着します。
リフレクタは回転しませんが、ここでも電流は別の文字の端子に移され、 逆方向にもう一度ローターに送り出されます。
3つのローターを更に逆にたどって、右端のローターに伝えられた電流は、 ストレートに接続されているランプボードの電球を光らせます。

エニグマは、キーを押すたびに右端のローターが1ステップ回転します。
右端のローターが一回転すると中央のローターが1ステップ回転します。
中央のローターが一回転すると左端のローターが1ステップ回転します。
自動車の走行距離計のように、左のローターが1回転すると、 右隣のローターが1ステップ回転するため、それぞれのローターは右から順に "Fast Rotor", "Medium Rotor", "Slow Rotor" と呼ばれています。

1文字打つとローターが回転するので、1文字毎に暗号化キーが変わることになります。 同じ文字が続いても、一般的には別の文字に暗号化されますから、 これを解読することは非常に困難です。

ドイツ軍のエニグマに対する過信も、このあたりから生まれたのではないでしょうか。

エニグマのもう一つの特徴は、この機械が暗号化だけでなく、暗号文の平文化にもそのまま使えることです。
ローターを正しく設定して暗号文をタイプすると、平文化された文字のランプが光ります。
このページの下にある Java applet で試してみて下さい。
Rotor
ローター
Scrambler Unit
スクランブラー(上) と ランプボード(下)

このページの写真は University of North Dakota の Crypto Drop Box から引用しています。 写真をクリックするとオリジナルの GIF 画像が表示されます。 ファイルサイズは上から順に 196KB、74KB、176KB です。


簡単に間違いなく暗号化するためには、どんな装置を作ればいいかを考えてみましょう (アルファベットは A から F までの6文字しかないものとします)。

下図のように、スイッチを押すと暗号化された文字がランプで表示される ようにしたらどうでしょうか。

このままでは、たとえば C のスイッチは C のランプに接続されていますから、 C のスイッチをマウスでクリックすると C のランプが点灯します。 これでは暗号作成機とはいえません。



ボタンをクリックするたびに、スイッチとランプの配線がズレます。
C のスイッチをクリックすると、例えば E のランプが点くようになります。 このように一定の数だけ文字をずらせて暗号にしたものを シーザー暗号といいます。
しかし、ずらせ方はこの図では5通りしかありません。 アルファベット 26 文字でも 25 通りです。
シーザー暗号だと分かってしまえば解読は簡単です。
ボタンをクリックするとスイッチとランプがランダムに接続されます。 こうなると解読するのは少しやっかいになります。


キーを押せば暗号化された文字のランプが光るというのは、 戦場で使用する暗号機には、いいアイデアです。

暗号化のアルゴリズムがどんなに複雑であっても、 暗号化の手順は 「キーを押す」→「ランプが光る」→「その文字を書き写す」 だけです。

エニグマで暗号文を作るには、まず定められたとおりにローターを設定します (この設定は毎日変わります)。

下図では各ローターの上のボタンをクリックするとローターの設定ができます。

あとはキーボードのキーを押すだけです。

エニグマは、キーを押すとランプボードの文字が光りますが、上の Java アプレットではキーをクリックすると、 暗号化された文字のキーが光る (?) ようにしてあります。
どのような経路で暗号化されたかが、図の上部に表示されます。 キーからスタートした電流は、赤く表示されるルートを経てランプに至ります。 マウスのボタンを押したままにすれば、暗号化の経路がずっと表示され、 ボタンを放すとローターが 1/26 だけ回転します

キーの配列はパソコンのものと少し違いますが、ここではエニグマにあわせてあります。 すこし打ちにくいかもしれません。

暗号化された文章は右下のボタンをクリックするとクリアされます。

暗号文は、ローターの設定を元に戻して、暗号文をタイプすれば平文化できます。
例えば、ローターを左から順に、12, 3, 25 に設定して "HELLO" と打つと、 "PJMCP" と暗号化されます。
ローターは少し回転しているので、これを元に戻して "PJMCP" とタイプすると、 "HELLO" という平文を得ることができます。


情報処理概論 に戻る  目次 に戻る  戻る


*1  エニグマは 5種類のローターのうち、任意の 3個をどの位置にでもセットできます。 もちろん、この5種類のローターは、どのエニグマに使われるものも すべて同じように作られていなくてはなりません。


このページは、 Enigma and the Turing Bombe を参考にして作成しました。 エニグマの写真は University of North Dakota の Crypto Drop Box から許可を得て引用しています。

このページの Java applet は、エニグマの原理を説明するためのもので、 エニグマの動きをシュミレートするものではありません。
プラグボードで任意の文字の接続を変更する機能や、 ローターを自由に交換できる機能などを省略しています。 また、隣のローターを回転させるタイミングも固定しています。
エニグマをシュミレートする Java applet には Russell Schwager 氏の Enigma Machine Applet などがあります。興味のある方はご覧下さい。


アンケートのページに、「はじめまして。検索 ”エニグマ”でこちらに辿り着きました。 友人達との暗号通信で活用させていただいております。 楽しいですね。 古いコンピューターのお話も楽しく読ませていただきました。 ありがとうございました。」 というコメントを戴きました(2004.07.26)。
エニグマのページはたくさんの方々にご覧いただいているようですが、 「実用的」 に活用されているという方がいらっしゃるとは思いませんでした。 メールアドレスが分かりませんので、この場を借りてお礼申しあげます。
エニグマのアプレットで暗号化して通信するのは楽しいと思いますが、暗号強度をもっと高めるなら PGP がお薦めです。 営利目的でなければ、こちら からダウンロードして無料で使用できますからお試しください。

update: 2004.07.26  address