genigma は、第2次世界大戦までドイツが使用した暗号機 ENIGMA (謎 という意味) のシミュレータです。
ENIGMA は、日本軍の Purple (紫暗号) と並んで最も複雑な暗号と言われ、 ドイツは解読不可能と信じていたようです。 Alan Turing (→ gTuring のページ を参照) がイギリス諜報機関に協力して解読を行なったことでも有名で、 最初はリレー式 (Bombe) の、後には電子式の解読装置 (Colossus) が作成され、 ある意味で初期のコンピュータの発達に大きな寄与をしました (当時の「計算機」のもうひとつの使い道は弾道の計算でした)。
イギリス諜報局による ENIGMA の解読は長く極秘とされていました。 Turing らが作った Colossus も存在が公表されたのは 1976 年になってからで、 これが ENIAC に先だつ「電子計算機」であるかどうかで 大議論になったことがありました。
作者: Martin Oberzalek さん他
ホームページ:
http://kingleo.home.pages.at/?language=EN&show=/development/gnome/#genigma
バージョン: 1.2.3 (2000/04/06)
ライセンス: GPL
READMEを読む
付属ドキュメント
Enigma - a very famous story of cryptology を読む
インストールすると MLD 5,6 では 「プログラム」→「アプリケーション」にメニュー genigma が追加されます。 MLD 7 ではメニューには追加されないので適当なターミナル・エミュレータから
$ genigma
で起動します。
暗号化するテキストはファイルから与えることもできますが、 起動時のデフォルトではウィンドウに入力するようになっています。 画面下部の「エニグマ」のタブをクリックして、入力欄に適当な文字列を入力してみましょう。 リターンを入力するか、「計算」をクリックすると下の出力欄に暗号化した文字列が表示されます。
ENIGMA の暗号は分類としては多表式暗号で、3つの Wheel
の仕掛けで周期の長い暗号鍵 (鍵字列) を自動生成するものです。
暗号化した文字列を入力すると、同じ操作で元の文字列 (平文) が復元できます。 ENIGMA では暗号化されるのは英字だけです。小文字は大文字に変換されます。 英字でない文字 (空白も含む) はそのまま出力されます。
オプションではファイルからの入力、ファイルへの出力を選択できます。
メイン画面のファイルメニューにある、「開く」や「保存」もオプションでの設定と同じです。
Wheel などの設定を保存する機能はありません。
ENIGMA の構造は付属のドキュメント Enigma - a very famous story of cryptology に詳しく述べられています。
キーボード (右側) からの入力は、まず Plugboard で文字の交換が行なわれ、
3つの Wheel で撹乱されて Reflector を通り、今度は Wheel
を逆順に通って再び撹乱され、Plugboard を経て lampboard にたどり着きます。
Wheel は、一文字の入力ごとに一ステップ回転します。
Wheel にはノッチ (位置は Wheel によって異なります)
があり、その位置まで来ると次の Wheel が一ステップ回転するようになっていて、
全体で非常に長い暗号鍵を自動生成する仕組みになっています。
Wheel は5種類のうちから3つを選んで使います。
各 Wheel ごとに、最初の位置 (Start) と、Ring 位置を設定します。
Start と Ring を同じだけずらした場合は、最初は同じ暗号鍵を生成しますが、
ノッチの位置に達するタイミングが異なるのでそれ以降は異なる暗号鍵を発生するようになります。
本物の ENIGMA では後期のタイプは Wheel は8種類になったようです。
genigma は、Wheel の動きなどがリアルに分かるようにはなっていません (後述の非 GUI モードでは Wheel 位置をその都度出力させることもできます)。 下でご紹介している Web ページには実際に近いキーボード、ランプ、Wheel を備えた Java アプレットが あります。
genigma は GUI なしで使うこともできます。
オプション -h
で起動すると使用法が表示されます。
$ genigma -h genigma 1.2.3 使用法: genigma [-h] [--help] [--loud] [-l] WHEELORDER RINGS STARTPOS PLUGBOARD GUI で使用する場合はパラメータを何も付けないで起動します。 -h --help 使い方を表示します。 -l --loud 一文字処理するごとに wheel の位置をプリントします。 WHEELORDER wheel の並べ方を指定。5 種類の wheel があり、 その中から 3 つを使います。 RINGS 3 つの ring の位置を指定。 STARTPOS 3 つの wheel のスタート位置を指定。 PLUGBOARD plugboard の指定。最大 26 文字。 例: $ genigma 215 adg bsa hasdfg genigma はテキストを標準入力から読み、暗号化して標準出力に書き出します。 注意: enigma は英字 A から Z のみを暗号化します。それ以外の文字は 暗号化されずにそのまま標準出力に書き出されます。 $ echo 'Hello World!' | genigma -l 123 AAA AAA Wheels 1 2 3 Start A A A Rings A A A Plugboard "" Wheel position : A A B Wheel position : A A C Wheel position : A A D Wheel position : A A E Wheel position : A A F Wheel position : A A G Wheel position : A A H Wheel position : A A I Wheel position : A A J Wheel position : A A K ILBDA AMTAZ!
LinuxMLD 5,6,7 用の RPM
genigma-1.2.3-1_mlb1.i386.rpm (289,233 bytes)
をインストールします。
rpm コマンドでインストールするにはスーパーユーザになって
# rpm -i genigma-1.2.3-1_mlb1.i386.rpm
とします。
MLD 5,6 では
Gnome の GUI でインストールすることもできます。
genigma は NLS 化されていますが、 デフォルトはドイツ語という作り方になっています。 このため日本語環境で使用すると GTK により日本語化されている部分は日本語になるけれど その他はドイツ語になってしまいます。これでは不便 (わたしはドイツ語は分からない ^_^;) なので、日本語のメッセージファイルを追加しています (バージョン 1.2.4 に取り入れられました)。
Web 上の参考になるページを御紹介します。 gTuring のページ も参考にしてください。
ENIGMA の原理的な動作が分かる Java アプレットがあります。
情報社会におけるセキュリティ at 明治大学理工学部情報科学科システム科学研究室の 授業用掲示板