=encoding euc-jp =head1 名前 Crypt::OOEnigma - 柔軟なOOフレームワークによる第二次世界大戦でのEnigmaマシン =head1 概要 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); =head1 説明 =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をご覧ください。 =head2 商用エニグマ 商用エニグマは典型的には3つのローターとリフレクタで構成されます。 商用エニグマはこのパッケージで提供されます。 =head2 軍用エニグマ 商用エニグマが強引なやり方によって比較的簡単にクラックされること(Kortnerの本を参照)、 そして、プラグコードという単純な装置を追加することにより簡単に強くすることができる ことがわかりました。プラグコードは電気的なプラグの集合で、交換される文字の 組の数 - 例えば6 -を持った、いつでも同じの置き換え(A -> A, B -> B など)を実装します。 ブラグボードはオエペレータのキーボードと商用エニグマの間に置かれ、 その複雑さをはるかに超えた影響を与えました。 軍用エニグマ・マシンはこのパッケージに入っています。 =head2 OOEnigmaモジュール 簡潔さのため、OOEnigmaモジュールはいくつかのローターと軍用エニグマ・マシンを 提供しています。そのためユーザは以下のいずれかを行うことができます: =over 4 =item * デフォルトのエニグマを使う =item * 3つのローターを選ぶ =item * 開始位置を選ぶ =item * 3つのローターとそれぞれの開始位置の両方を選ぶ =back そして後はEnigmaが面倒を見てくれます。独自の置換コードや独自のエニグマを 作りたいユーザはそれぞれのモジュールのドキュメントをご覧ください。 =head2 独自のエニグマを作る 任意の数のローターをベースとしローター、リフレタクタ、プラグボードを合理的な 暗号で使うエニグマは簡単に作ることができます。ユーザは必要なRotor、Reflactor、 Plugboardオブジェクトを作り、そしてMilitaryあるいはCommercialのエニグマの どちらかのインスタンスを作るために使うことができます。 =head1 注意 何もありません =head1 バグと警告 =head2 エニグマは脆弱です! 暗号の専門家はコンピュータ的にやぶれやすいかどうかという面から 暗号アルゴリズムの強さを語ります。もちろんエニグマ暗号はコンピュータ的には やぶられやすいものです。そのため重要なものには使わないでください! =head1 歴史 このパッケージはOO PerlとCPANのための適切な準備の練習のため、2002年の春に 作成されました。さらに重要なことはEnigmaが面白いことです。 CPANにはオブジェクト指向ではなく、1つのEnigmaだけを実装している Crypt::Enigmaが既にありました。(これに対してこれらのオブジェクトでエニグマに似た 機械を作ることができます)。そのためこのパッケージをCrypt::OOEnigmaと 名付けました。 =head1 参考資料 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 =head1 作者 S J Baker, Ambriel Consulting, http://ambrielconsulting.com =head1 著作権(=COPYRIGHT) This package is licenced under the same terms as Perl itself. =head1 翻訳者 川合孝典 (GCD00051@nifty.ne.jp)