入門§
エニグマ暗号は、第二次世界大戦中にドイツ軍が使用したフィールド暗号である。 エニグマは歴史的によく知られた暗号機の一つで、実際には様々な類似の暗号機を指している。 エニグマの最初の機械は、第一次世界大戦の終わりにアルトゥール・シェルビウスというドイツの技術者によって発明されました。 この機械は1920年代の初めから商業的に使用され、また多くの国の軍隊や政府機関、特に第二次世界大戦前と戦時中のナチス・ドイツに採用されたことは有名な話です。
もし、あなた自身がエニグマのメッセージを暗号化したいならば、 javascriptの例を見てください。
アルゴリズム §
このセクションでは、エニグマI、別名国防軍のエニグマについて話します。
- ローターとその順番
- ローターの開始位置
- リングの設定
- プラグボードの設定
ドイツ軍が第二次大戦中にエニグマメッセージを送る際に用いた手順、指標の設定方法についてはこの記述を参照してください。
ローター§
ローターが左から右に動くI,II,IIIで、文字「A」を暗号化しようとしているとします。 ロータはI,II,IIIで左から右へ動いているので、文字AはまずロータIIIを通過することになる。 各ロータは単純な置換操作を適用する。 8077>
ABCDEFGHIJKLMNOPQRSTUVWXYZBDFHJLCPRTXVZNYEIWGAKMUSQO
BはDに、CはFに置換されるなど。 したがって、文字「A」がロータを通過した後、「B」として出力されます。 B’はローターIIに入力され、’J’などに置き換わる。 各ローターの配線については、このwikipediaのページを参照してください。
III | II | I | Reflector | inv(I) | inv(II) | inv(III) |
A -> B | B – 。> J | J -> Z | Z -> T | T -> L | L -> K | K -> U |
文字がローターⅢを通過した後、そのローターを通過します。II,Iは反射板にぶつかり、再び単純な置換が行われる。 表から、暗号化された文字が最後にロータIIIから戻ってきた後、我々は文字Uを残していることがわかります。
ローターのインクリメント§
エニグマを実装する際によくある間違いは、ローターが標準的な走行距離計として機能すると仮定することだが、いくつかの重要な相違点がある。 各ローターにはノッチがあり、そのノッチによって左側のローターがステップする。 ローターIはQからRへの移行時に、ローターIIはEからFへの移行時に、次のローターをステップさせます。 ローターIからVはドイツ軍のエニグマに使用されており、後に2つのノッチを持つローターが追加された。
i | ii | iii | iv | v | vi | vii | viii |
q | e | v | j | z | z,M | Z,M | Z,M |
もう一つ、「ダブルステップ」という混乱する詳細がある。 あるローターがステップすると、その右側のローターもステップする。 これは、最初のローターがキーを押すたびにステップするので、2番目のローターがステップするときには気づかれません。 しかし、3番目(一番左)のローターがステップすると、2番目のローターもステップしてしまうのです。
The Ringstellung §
The Ringstellung(リング設定)は、一般的に3文字の文字列、例えば’FAM’(または1~26までの数字で文字を表す)として提供されます。 これまでの議論では、各ローターの単純な置換暗号は固定されていると仮定してきた。 リングステリングは、以下のように置換暗号をシフトさせる機能を提供します。 リングが’A’(または1)の場合、ローターIの置換は次のようになります:
ABCDEFGHIJKLMNOPQRSTUVWXYZEKMFLGDQVZNTOWYHXUSPAIBRCJ
リングが’B’(または2)の場合、ローターIの置換は次のようになります:
ZABCDEFGHIJKLMNOPQRSTUVWXYEKMFLGDQVZNTOWYHXUSPAIBRCJ
The Steckerverbindungen §
steckerverbindungen (plugboard) はセキュリティの追加層で13本のワイヤーからなり、エニグマ機の正面のソケットに差し込んで使うもので、このプラグは “on the plugboard “と呼ばれ、”connect in the socket on the front of the enigma “と呼ばれています。それぞれの線は、例えばPとOのように2つの文字をつないでいます。これらの組み合わせは、鍵の材料の一部として指定されています。 文字がタイプされると、それが最初のローターに入る前に、 プラグインに従った置換が行われ、文字が出力された後、再びプラグインに従った置換が行われ、 出力されます。 プラグボードの設定例は次の通りである。 PO ML IU KJ NH YT GB VF RE AC (PとO,MとLが入れ替わるという意味です)。
上記の例で、文字「A」を開始位置AAAでローターI、II、IIIで暗号化した場合、文字「A」は「U」として暗号化されています。ここでプラグボードを考慮すると、前項のプラグボード設定を使用して「A」はまず「C」に変換されてから暗号化されます。 暗号化は通常通り続けられ、今度は「C」が「J」として出力される。 この文字は再びプラグボードに送られ、「K」に置き換えられる。 つまり、プラグボードを使用することで、「A」が「K」として暗号化されるわけです。 プラグボードはエニグマ暗号の全体としての強度を、ローターをもう一つ追加するよりも大幅に向上させます。
リングの設定。
ローター
プラグボードの設定。
Ciphertext
その他の実装 §
python で独自のメッセージを暗号化するには、pycipher モジュールを使用できます。 これをインストールするには、pip install pycipher を使用します。 エニグマ暗号 (あるいは他の暗号、ドキュメントはここを参照) を使ってメッセージを暗号化するには、 ここにある例を見てください。 これらの方法は、ウィキペディアのページで説明されています。
より現代的なアプローチとしては、ジム・ギログリーの論文 ‘Ciphertext only Cryptanalysis of the Enigma’があります。 この論文のいくつかの誤りを訂正したフォローアップレターがここにあります。 また、Jim Gilloglyの論文をベースにした論文として、Heidi Williamsによる’Applying Statistical Language Recognition Techniques in the Ciphertext only Cryptanalysis of Enigma’があります。 また、The Cryptographic Mathematics of Enigma.
も興味深い資料です。