プログラマが観たイミテーション・ゲーム エニグマのはなし
これは、Qiita Advent Calendar 1日目の記事です。
プログラマが見ると"アガル映画"を独断と偏見で紹介していこうという趣旨です。
今回は、「イミテーション・ゲーム」です。
あらすじや、映画的な感想は、他のブログにたくさんあるので、詳細はそちらにお任せしますが、簡単に紹介すると、アラン・チューリングとエニグマの映画です。
第二次世界大戦中のドイツ軍によって使用された暗号エニグマは、暗号の名称でもあり、暗号化と複合を行う機械の名称でもあります。
エニグマの仕組み
エニグマは、主にキーボード、ランプ、ローター、ブラグボードという部品で構成されていて、キーボードを押すと、ローターとプラグボードで出来た暗号アルゴリズムを経て暗号化された文字が点灯する仕組みです。
実は、Web上で体験できるシミュレータがあったりします。
右側の黄色と黒の配色のアイコンが設定関連ですね。
試しに「工具」のアイコンを押して出てきたメニューから「Reset」を押してみましょう。
ローター(アルファベットの円環)が、左から「I」「 II」「 III」。
初期位置(ローター上の水色で囲われた文字)がすべて「A」になるかと思います。
キーボードの入力は、左下の2段並んでいるアルファベットの下段の方へ伝わります。
よく見るとひとつひとつのアルファベットから薄い灰色線が伸びていて…
下段のアルファベット→上段のアルファベット→ローターへと結線されているのが分かるかと思います。
試しに、Inputのところに「A」と入力してみましょう。
エニグマの暗号アルゴリズムが機能して、「B」というOutputが得られるはずです。
注目すべきは、一番右の「 III」と書かれたローターです。
左へ1文字分回転して初期位置が変化しているのが分かります。
この機能があるため、続けて同じ「A」という文字を入力しても「D」「Z」…という全く違った文字が得られるのです。
ちなみに一番右のローターが1回転すると、真ん中のローターが1文字分回転します。
複合の手順は、暗号化と全く同じ。
もう一度「Reset」を押して、「BDZ」をInputに入力すると、「AAA」という文字が得られるはずです。
しかし、「AAA」が毎回「BDZ」に置き換えられたのでは、すぐに解読されてしまいます。
そのためエニグマは、ローターの位置、種類、初期位置、それから「下段のアルファベット」と「上段のアルファベット」をつなぐ結線を変更する事によって、異なる暗号文を作成できる様に設計されています。
今度は、「工具」アイコンのメニューから「Reset」ではなく「Random」を押して見ましょう。
ローターの初期位置や結線が変更されたと思います。
「AAA」と先ほどと同じ文字列を打ち込んでも得られる結果は違うはずです。
この暗号文を複合するには、複合する方の機械も同じ設定から始めなければなりません。この設定こそが、「第一の鍵」になります。
第2次世界大戦中のドイツ軍は、日毎の「設定表」を配布して、毎日この設定を変更していました。
さらには、この日毎の設定を使用して、通信ごとの新たな設定を暗号化して送信。
これを「第二の鍵」としていました。
テンションが上がるポイント
さて、アラン・チューリングは、このエニグマの鍵を再プログラミング可能なデジタル計算機を作成して解こうと試みます。
プログラマとして感動の瞬間のひとつは、マシンが動作するとき。
ことチューリングが作り上げたマシンこそが、現在のコンピュータの元になっていることは、分かっていましたが、やがて、自分が今日のご飯にありつけるという事実の遠縁となっていることを思うとやはり、マシンが動く瞬間には、テンションが上がりました。