🦁

世界大戦時の暗号機 Enigma を Rust で実装し、WebAssembly 化してブラウザで動くシミュレータにした

2022/09/08に公開

Rust に入門したので、大戦時にドイツが利用していた暗号機エニグマを実装してみました。
せっかくの Rust なので WebAssembly にしてブラウザで動くようにしました。

作ったもの

https://lemonadern.github.io/enigma-playground/

エニグマによる暗号化・復号がブラウザ上で体験できます。

使い方

エニグマでは、暗号化と復号を同じ方法で行います。手順は Input に入力 ⇨ Encrypt ボタンを押す だけです。

下部にある 「Rotor Settings」, 「PlugBoard Settings」 が暗号化の鍵になっています。暗号化されたメッセージと暗号化時の鍵があれば、復号が可能になります。

エニグマのコードはこちら

Enigma / エニグマ とは

エニグマ は、第二次世界大戦時にドイツ軍などが利用していた電気機械式の暗号機です。
当時のドイツでは、エニグマによる暗号と電気通信とを組み合わせた暗号通信が運用されていました。
エニグマによる暗号を手作業で解読することはほとんど不可能でしたが、イギリスは戦時中に専用の機械を使った解読に成功してドイツ軍の通信内容を掌握したと言われています。

筆者がエニグマを知ったきっかけは、イギリスでのエニグマ解読が題材の『イミテーション・ゲーム / エニグマと天才数学者の秘密』という映画でした。
ベネディクト・カンバーバッチ演じる主人公はチューリングマシンで有名なアラン・チューリングです。興味のある方はぜひ見てみてください。

エニグマについて詳しく知りたい人のための参考資料

エニグマを実装してみたくなった人のために、参考になった資料をまとめておきます。

  • エニグマを実装してみた - Qiita

    • Java によるエニグマ実装の記事
    • 換字式暗号の話や、エニグマの内部動作の図解もあり、わかりやすくコンパクトにまとまっている
    • UML図によるクラス構成や実際のコードを使いながら説明されており、とても丁寧な内容
  • エニグマ (暗号機) - Wikipedia

    • 内部構造や歴史など、盛りだくさんの内容
    • 最初に読むにはハードかもしれない
  • 暗号解読(上) (新潮文庫)

    • 人類と暗号の歴史を知ることができる本
    • エニグマの内部構造以外にも、暗号の歴史の観点から様々なドラマを知ることができる
    • 下巻ではRSA暗号や量子暗号について読むことができる
    • とても読みやすく、面白かった
  • 甦るチューリング―コンピュータ科学に残された夢

    • チューリングの生涯を知ることができる本
    • エニグマの内部構造についても書かれている
    • 数学が嫌いな人が読むのは厳しいかも

感想

エニグマについて調べていたら、暗号の歴史や、チューリングについても知ることができて楽しかったです。
Rust も好きになったのでもっと勉強します。

Discussion