名前¶
Crypt::OOEnigma - 柔軟なOOフレームワークによる第二次世界大戦でのEnigmaマシン
概要¶
use Crypt::OOEnigma;
my $enigma = Crypt::OOEnigma->new();
# OR set the default rotors' start positions
Crypt::OOEnigma->new( start_positions => [10,20,5] );
# OR choose rotors from the set (0..5)
Crypt::OOEnigma->new( rotor_choice => [3,4,5]);
# OR both
Crypt::OOEnigma->new( rotor_choice => [3,4,5],
start_positions => [10,20,5] );
my $cipher = $enigma->encipher("Some Text");
my $decode = $enigma->decipher($cipher);
# OR, since Enigma's are self-inverse:
my $decode = $enigma->encipher($cipher);
説明 =head2 Enigmaとは何?¶
エニグマ暗号機(Enigma Machine)は、第二次世界大戦中、よく使われた暗号機械です。 それは電気式機械で、構成要素暗号(constituent)とは違い、全ての暗号が破りにくい ような方法で置換とローテーションを組み合わせた、タイプライターのようなものでした。 その機械ではメッセージのエンコードと同様にデコードもできました。
簡単に言えば、電気式のエニグマはいくつかのローター -通常は3つで、 それぞれにアルファベットの文字にだけ簡単な置換暗号を実装しています-と リフレクタによって構成されています。リフレクタはショートしないで 自己反転する簡単な置換暗号です。送信するための平文のメッセージを受け取ると オペレータはメッセージを機械に打ち込む前に、最初に全てのスペースは文字Xで 置き換えます。キーが押されるたび、暗号文メッセージを生成するため、電流が 各ローター、リフレクタを通り、逆の順序でローターを戻ってきます。 メッセージが処理されると、最初のローターは各文字がエンコードされるたびに 、2番目のローターは26文字毎に一度、3番目のロータは各26文字の二乗にといった具合に ずれていきます。
エニグマより大きなセットからはいくつかのローターを選び、それらを特定の順序と 特定の開始位置に置くことにより構成されます。受け取られたメッセージは エンコードしたエニグマと同じ状態にエニグマを設定し、再びメッセージを処理する ことによりデコードされます。結果の平文にはスペースの代わりに文字Xが入っています。
いくつかの面白い練習も含めて、エニグマについて素晴らしい説明については、 Part IV of "The Pleasures of Counting" by T W Korner, Cambridge University Pressをご覧ください。
商用エニグマ¶
商用エニグマは典型的には3つのローターとリフレクタで構成されます。 商用エニグマはこのパッケージで提供されます。
軍用エニグマ¶
商用エニグマが強引なやり方によって比較的簡単にクラックされること(Kortnerの本を参照)、 そして、プラグコードという単純な装置を追加することにより簡単に強くすることができる ことがわかりました。プラグコードは電気的なプラグの集合で、交換される文字の 組の数 - 例えば6 -を持った、いつでも同じの置き換え(A -> A, B -> B など)を実装します。 ブラグボードはオエペレータのキーボードと商用エニグマの間に置かれ、 その複雑さをはるかに超えた影響を与えました。
軍用エニグマ・マシンはこのパッケージに入っています。
OOEnigmaモジュール¶
簡潔さのため、OOEnigmaモジュールはいくつかのローターと軍用エニグマ・マシンを 提供しています。そのためユーザは以下のいずれかを行うことができます:
デフォルトのエニグマを使う
3つのローターを選ぶ
開始位置を選ぶ
3つのローターとそれぞれの開始位置の両方を選ぶ
そして後はEnigmaが面倒を見てくれます。独自の置換コードや独自のエニグマを 作りたいユーザはそれぞれのモジュールのドキュメントをご覧ください。
独自のエニグマを作る¶
任意の数のローターをベースとしローター、リフレタクタ、プラグボードを合理的な 暗号で使うエニグマは簡単に作ることができます。ユーザは必要なRotor、Reflactor、 Plugboardオブジェクトを作り、そしてMilitaryあるいはCommercialのエニグマの どちらかのインスタンスを作るために使うことができます。
注意¶
何もありません
バグと警告¶
エニグマは脆弱です!¶
暗号の専門家はコンピュータ的にやぶれやすいかどうかという面から 暗号アルゴリズムの強さを語ります。もちろんエニグマ暗号はコンピュータ的には やぶられやすいものです。そのため重要なものには使わないでください!
歴史¶
このパッケージはOO PerlとCPANのための適切な準備の練習のため、2002年の春に 作成されました。さらに重要なことはEnigmaが面白いことです。
CPANにはオブジェクト指向ではなく、1つのEnigmaだけを実装している Crypt::Enigmaが既にありました。(これに対してこれらのオブジェクトでエニグマに似た 機械を作ることができます)。そのためこのパッケージをCrypt::OOEnigmaと 名付けました。
参考資料¶
The Pleasures of Counting, T W Korner, CUP 1996. A great book for anyone with the slightest interest in mathematics: ISBN 0 521 56087 X hardback ISBN 0 521 56823 4 paperback
エニグマ: Crypt::OOEnigma::Military Crypt::OOEnigma::Commercial
コンポーネント: Crypt::OOEnigma::Rotor Crypt::OOEnigma::Reflector Crypt::OOEnigma::Plugboard
作者¶
S J Baker, Ambriel Consulting, http://ambrielconsulting.com
著作権(=COPYRIGHT)¶
This package is licenced under the same terms as Perl itself.
翻訳者¶
川合孝典 (GCD00051@nifty.ne.jp)