1.6K Views
March 15, 22
スライド概要
Raspberry PiとPythonを使用してエニグマを再現したものになります。
Enigma Pi seigo2016
自己紹介 seigo2016 • Python / Go / TypeScript • Docker / Debian / WSL2 • T.M.Revolution / 中森明菜 • PlanetSide 2 / Apex Legends • さんばか(lzan) / 葛葉 • 今日は推し(アンジュ・カトリーナ)の誕生日。
エニグマとは -歴史• 第2次世界大戦時にナチスドイツが使用した暗号機 • 当時世界最先端の装置 (後に大戦中に連合軍によって解読された) 余談 • エニグマで暗号化して無線通信をすることで, Uボートは効果的に作戦を行うことができた • 「計算機科学の父」Alan Turingも解読に携わった
前提: 換字式暗号について 単一換字式暗号 • 平文の文字に対して,必ず同じ暗号文の文字に変換される • アルファベット1文字に対して暗号文字は1つ → 頻度分析によって解読 A B C D E ↓ ↓ ↓ ↓ ↓ E D S A V ・・・ V W X Y Z ↓ ↓ ↓ ↓ ↓ C L M H U
エニグマの各部パーツ • ローター • キー・ランプ(入出力) • プラグボード 画像出典: Bob Lord - German Enigma Machine by en:User:Matt Crypto https://commons.wikimedia.org/w/index.php?curid=258976
エニグマ -特徴 プラグボード使い方 3-10個の文字のペアを作ってケーブルで繋ぐ 目的 プラグの両端に対応する文字を入れ替える →3.5×106以上の鍵規約数を実現 画像出典: Bob Lord - German Enigma Machine by en:User:Matt Crypto https://commons.wikimedia.org/w/index.php?curid=258976
エニグマ -特徴 ローター- ① ② ③ 役割 • 単文字換字表として動作する ローター3枚で105,456通り 動作 画像出典: Enigma_rotor_set by Wapcaplet https://commons.wikimedia.org/w/index.php?curid=23793 • ①のローターは1文字入力されるごとに1文字分ずれる • ②のローターは①のローターが1回転すると1文字分ずれる • ③のローターは②のローターが1回転すると1文字分ずれる →Aを入力し続けても,17576回入力しないと 同一文字にならない = 頻度分析対策
エニグマ -特徴 リフレクター役割 • 反転ローターとも呼ばれるが,回転しない • ローターを通った信号を再びローターに返す • 暗号化と復号が同じ手順で可能
エニグマとは –機構A B C D E キー/ライト プラグボード ローター x3 リフレクター
エニグマ -設定• ローター配列 (どのローターをどの順で使用するか) • ローター位置 (1文字目をローターのどこで始めるか) • プラグボードの組み合わせ • (日鍵 / 通信鍵) これらの主に3つの要素の設定で暗号・復号を行う →本体が盗まれても設定がわからなければ解読が難しい
エニグマの再現 電気機械としてすべてを再現するのはハードルが高い (技術,コスト) エニグマをモダンに再実装する →暗号化の処理はソフトウェアで実装 →入出力は実際に物理ボタンや液晶等で実装 その他の動機 • • ソフトウェアの実装だけでは面白くない 見た目も凝りたい!(電子工作に挑戦)
対比 エニグマ ランプ(出力) ローター キー プラグボード 画像出典: Bob Lord - German Enigma Machine by en:User:Matt Crypto https://commons.wikimedia.org/w/index.php?curid=258976 エニグマ
エニグマの再現 -プラグボード実装 AとEをつないだ場合 • 処理途中で変化しないことから, 最初に状態を読み取り記憶しておく 処理順序 • 1つのピンに信号を送信 • 他のすべてのピンの入力を確認 • 入力がある場合接続されているとみなす (これをA-Zの分だけ繰り返す) A B C D 入力なし 出力 入力を確認 E 入力有り
エニグマの再現 -ローターパーツ • ロータリースイッチで指定 • 3つのスイッチはそれぞれ5通り選択可能 (5枚のローターから3枚選んで並べる動作を簡略化)
エニグマの再現 -入力パーツ タクトスイッチ + キーキャップ(3Dプリンターで作成) 特徴 • キー配列はオリジナル準拠(QWERTZ配列)+Enterキー
エニグマの再現 -出力• LCDキャラクタディスプレイモジュール (SC1602) • エラー・ステータス・処理結果を表示
エニグマの再現 -外見• 3Dプリンターで作成したパーツと木材を使用
エニグマの再現 -処理環境 • Raspberry Pi Zero WH • Raspberry Pi OS Lite • Python 3.8
エニグマの再現 -処理暗号技術入門(結城 浩 著)等を読みつつ設計 換字表 • ローターごとにシードを固定してランダム生成 設定 • プラグボードやローターは状態を記憶→処理
その他 デモ : https://youtu.be/QfIU4Iw-8Hs 追記 みんなのラズパイコンテスト2021にて,学生賞を受賞しました • 「エニグマを再現! 見た目にも凝った「EnigmaPi」