genigma

genigma

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 のページ も参考にしてください。

[2001/07/11 作成] [2003/10/30 更新]


このページに関する御意見、御要望を science@mlb.co.jp までお寄せ下さい
Copyright © 2001-2005 Media Lab. All Rights Reserved.