暗号機エニグマ
エニグマとは
みなさん暗号機エニグマを知っていますか。Wikipediaによると第二次世界大戦でナチス・ドイツが用いたローター式暗号機である。幾つかの型がある。暗号機によって作成される暗号も広義にはエニグマと呼ばれる。意味は本義でもある「謎」。エニグマ暗号機は、1918年にドイツの発明家アルトゥール・シェルビウスによって発明された電気機械式暗号機械で、1925年にはドイツ軍が正式に採用。続いてドイツ政府や国営鉄道なども採用し、3万台以上を販売した。 暗号方式は換字式であり、詳しくは順変多表式である。エニグマはM-209(英語版)と同様な反転暗号となり、暗号文を同じ鍵で再暗号化すると平文が得られる特徴がある。大戦中に連合国側はエニグマ解読に成功したが、その事実は徹底して秘密にされ、ドイツ軍は終戦までエニグマを使用し続けた。
仕組み
エニグマには3つのスクランブラーと呼ばれる装置がある。これが入力された文字を暗号化した文字に変換する装置です。そしてこれはローターとも呼ばれ、1文字入力されるたびに1回転するという仕組みを持っています。1つ目のローターが1回転すると2つ目のローターが1文字分動くようになっています。こうすることで暗号化する前の同じ文字が暗号化すると違う文字になるようになります。例えば、helloを暗号化するとivneeのようになるということです。lがnとeになったり、loがeeになったりすることで解読を困難にします。この3つのローターが回転する仕組みにより変換表が26x26x26=17,576通りできることになります。そして、3つ目のローターの次にリフレクターと呼ばれる装置があり、入力された信号を反射して返す役割がある。こうすることで暗号文を復号できるようになります。エニグマの暗号化と復号で必要となる情報は、スクランブラーの配置とローターの初期位置などです。
実装
まず、0から25までの数字をランダムに並べた配列を3つ作ることで3つのスクランブラーを作ります。ローターの機能は1文字入力される毎にスクランブラーの先頭を一番後ろにし、26回転するとその次のスクランブラーを回転させる処理で解決します。リフレクターは3つ目から送られてきた信号を上下反転させて3つ目に送り返します。具体的には0->25に1->24に2->23に...こういうふうにやることで解決します。それでは入力と出力について説明します。入力された文字をアルファベット順で何番目にあるかを調べます。その番号をローター1のインデックスとし、そのローターの番号を調べます。その番号をローター2のインデックスとし、先ほどと同様にしていきます。この処理をリフレクターを通してローター1まで繰り返します。こうすることで得られた番号をアルファベットで何番目にあるかを調べ、アルファベットに変換することで暗号化が成功するという仕組みです。意外と簡単に実装することができるのでみなさんも是非作ってみて下さい。
参考ページ:
https://qiita.com/opengl-8080/items/995778d1cce43ed5babc https://www.az-prolog.com/manual/sample/sample_list_002.html https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13229161928