エニグマ機
エニグマ暗号の大きな欠点は、ある文字をそれ自身として暗号化することができないことであった。 言い換えれば、”M” は決して “M” として暗号化されることはありません。 これはエニグマコードの大きな欠陥で、暗号解読者にメッセージの解読に使用できる情報の断片を与えてしまいました。 もし、暗号解読者がメッセージの中に現れるであろう単語やフレーズを推測することができれば、その情報を使って暗号を解読し始めることができるのです。 ドイツ軍はメッセージの最初に必ず天気予報を送り、メッセージの最後に「ハイル・ヒトラー」というフレーズを入れるのが普通だったので、解読者は探すべきフレーズを知っていた。 復号者は、与えられたフレーズと暗号の文字を比較し、フレーズの文字が暗号の文字と一致すれば、その部分にはフレーズが含まれていないことを知ることができるのだ。 そして、デコーダは消去法で暗号を解き始めることができた。
以下のコード化された文字列の中で、「RAIN」という単語のコード化の候補を探します。 (未知の文字を示すために記号 % が使われている)。
符号化メッセージ E R W N I K O L K M M Phrase Ra i n % % %9110 % % RAIN の N と ERWN の N は一致するので ERWN として符号化することはできない。 Nはそれ自身としてエンコードできないので、これはエンコードではありません。
メッセージを1スロット右にシフトして、その結果が有効なエンコーディングであるかどうか見てみましょう。
符号化メッセージ E R W N I K O L K M M Phrase r
a i n % % %% % RAIN の R は RWNI の R と一致するので RWNI として符号化することはできない。 もう一度シフトしてみましょう。
Coded Message E R W N I K O L K M Phrase % % r a i n % %% % RAINのIはWNIKのIと一致するのでWNIKとして符号化することができない。
Coded Message E R W N I K O L K M Phrase % % % r a i n % %% % RAIN は一致する文字がないので NIKO と符号化される可能性があります。 つまりNIKOはRAINのエンコードの可能性がある。
このプロセスを繰り返すと、RAIN とエンコードの間に一致する文字がないので、NIKO、IKOL、KOLK、OLKM、LKMM、KMMM、および MMMM はすべて RAIN の可能なエンコーディングであることがわかります。 MMMMはR、A、I、Nをエンコードすることになるけれども、RAINをエンコードすることができる。
アラン・チューリングとゴードン・ウェルチマンは、電気回路を使ってエニグマ暗号を20分以内に解くボンベマシンと呼ばれる機械を設計しています。 ボムマシンは、与えられた暗号メッセージを送信するために使用されるエニグママシンのローターとプラグボードの設定を決定しようとしました。
英国の標準的なボムマシンは、36台のエニグママシンを配線したもので、この方法でボムマシンは一度に複数のエニグママシンをシミュレートすることができました。 ほとんどのエニグママシンは3つのローターを持っていました。これをボムマシンで表現するために、ボムマシンのエニグマシミュレーターはそれぞれ3つのドラムを持っていました。
Bombe マシンのドラム
Bombeのドラムはどのローターをシミュレートしているかに応じて色分けされていました。 3ローターのエニグママシンは一度に3つのローターしか使用しませんが、それ以上のローターを使用することができます。 ドラムは、3つのうち上のものがエニグマ機の左側のローターを、真ん中のものが真ん中のローターを、下のものが右側のローターを模擬するように配置されていた。 ドラムは回転して新しい配置を試します。 上のドラムが一回転するごとに、真ん中のドラムの位置が一つ増え、同様に真ん中と下のドラムの位置も増え、合計で 26 × 26 × 26 = 17,576 の位置が 3 ローターのエニグマ・スクランブラーになりました。
そして、あるローターの配置に対して(ドラムが回るごとに)、ボムマシンは「A は Z とつながっています」とプラグボード設定を推測しました。 そして、他のすべての文字がプラグボード上でどのように設定されていなければならないかを調べ、決定するのである。 もし矛盾が生じたら、例えば「AはWに接続されている」と推論したなら、プラグボード上ではAはZに接続されていないはずで、矛盾が生じる。 今マシンが導き出した他の文字の組み合わせは、誤った仮定(つまり、AがZに接続されているという仮定)に基づいて決定されているので、それらの組み合わせはすべて無効であり、ボムマシンはそれらの組み合わせを後で確認しても時間を無駄にしないことを知っています。 AがZに接続されていないと判断した場合、BはEに接続されていないことが分かる。このような矛盾が生じた後、ボムマシンは再びAがZに接続されていると推測しないし、BがEに接続されていると推測しないことが分かる。 ボムマシンは、ローターの位置をずらし、新しい推測を選び、納得のいく設定の配置が現れるまで、この作業を繰り返す。 電気回路は非常に高速に計算を行うことができるので、ボムマシンは20分ほどですべてのローターの組み合わせを行うことができる。
ドラムの各位置で、構成が論理的矛盾につながるかどうかをテストし、その設定を除外することになる。 テストが矛盾をもたらさなかった場合、マシンは停止し、デコーダはその構成を解決策の候補として記録します。 その後、マシンを再始動し、さらに多くの設定をテストする。 これらのテストにより、可能な構成が絞り込まれ、解決策の候補はさらにテストされ、うまくいかないものを排除していく。 正しい解が見つかるまでに、多くの失敗した解の候補があるのが普通である
。