エニグマ 暗号 機。 暗号機 エニグマ

簡単な線形代数で考えるエニグマ暗号

エニグマ 暗号 機

構造はエニグマとほぼ同様の、スイス軍が使用した「NEMA」 資料提供:中央大学辻井研究室(クリックすると拡大します) エニグマの仕組み エニグマは、「スクランブラー」と呼ばれる歯車の組み合わせでできた鍵が決め手だ。 暗号文を作る際は、最初にスクランブラーの位置をセットする。 その後、送りたい平文をキーボードで打つと、スクランブラーを経由して変換された暗号アルファベットがランプボードに点灯する。 これが暗号アルファベットとなる。 続けて2文字目を入力すると、歯車も連動して動き、対応した暗号アルファベットが打ち出されていく、という仕組みだ。 辻井教授が所有する写真のエニグマは、第2次世界大戦頃よりスイス軍が使用していた「NEMA」と呼ばれるもので、ドイツが使用していた「エニグマ」とは別物。 しかし、第2次世界大戦時にドイツ軍が主に使っていたエニグマは、スクランブラーの数が3個~5個。 これはスクランブラーが10個あるので、改良型と言ってよい。 今回は、「NEMA」を使って暗号文を元に戻す方法を解説する。 暗号文「RLIN」を順に入力、平文が点灯する。 スクランブラーを見ると、ランダムに動いているのが分かる (クリックすると拡大します) 平文「CHUO」(中央)を受け取ることができた。 入力から出力まで、機械の中がどのようになっているかを簡単に説明すると、図のようになる。 図、エニグマの入力から出力までの簡単な流れ キーボードを押すと、まず1番目のスクランブラーが別のアルファベットに変換する。 これを10回通過した電流は、リフレクターと呼ばれ、電流をさらに別の文字に入れ替える反射板に当たって、10番目のスクランブラーから1番目まで戻り、結果がランプで点灯される。 同じ鍵であれば、「R」が「C」に、「C」が「R」と、1対になる仕組みになっている。 エニグマ誕生の経緯 中央大学研究開発機構の藤田亮氏によれば、エニグマは1918年、ドイツのアルトゥール・シェルビウス(1878年~1929年)によって発明された。 シェルビウスは同様の特許を1919年に取得していたフーゴ・コッホから買い取り、手軽に携行できて機密性が高い暗号機として売り出した。 販売当初は、当のドイツ軍が第1次大戦時の暗号を解読されていた事実を知らず、暗号強化に対する意識が低かったこともあり、エニグマは見向きもされなかった(第4回参照)。 1台あたり約200~300万円という価格設定も、暗号に対する危機感の薄いドイツ軍が手を出さない要因になった。 しかし、第1次世界大戦時に英国によって暗号が解読されていた事実が判明すると、ドイツ軍はエニグマ採用を決定。 続いてドイツ政府や国営鉄道なども採用し、3万台以上を販売する結果となった。 ヒトラーが政権を握った後、ドイツ軍はエニグマの改良を施す。 5個あるスクランブラーの中から3個を選んで組み合わせたり、3個しか設置できなかったスクランブラーを最大5個まで設置可能にしたりなどの手を加えた。 エニグマが注目されたのは、当事者以外の解読の困難さである。 スクランブラーが5個あれば、 ・スクランブラーの並び替え ・スクランブラーの位置 ・の配線 以上のパターンを組み合わせると、鍵を解くのはほぼ不可能となる。 ドイツ軍が絶対の信頼を寄せていた「エニグマ」だが、やはりこれで作成された暗号も解読される運命となる。 次回はコンピュータの誕生にも一役買った、エニグマを解読していく連合国の様子を紹介する。

次の

エニグマを解読した『アラン・チューリング』の人生。暗号の仕組みとは?

エニグマ 暗号 機

エニグマ暗号の解読 チューリング・ボンベによるエニグマ解読の詳しい方法 ご注意 この解読法の文章や図面の全部または一部をコピーすることを禁じます。 このサイトの所在を明記して引用すること、または URLリンクを貼ることは自由です。 なお、パワーポイント・スライド版には不正確な部分があるので非公開としました。 機と暗号通信 エニグマ暗号はドイツの軍事暗号の一つで、文字の間に対称性のある「換字暗号」の一種である。 換字とは任意の二文字が交換されることで、たとえば文字AとN、文字YとHは相互に交換される。 文字の対応関係が固定されていて、ある程度の文章の量があれば、文字の出現頻度を統計的に分析することで解読できる。 たとえば英語ではeが最も出現頻度が多く、次に多いのはaやtだから、暗号文中で出現頻度の大きい文字に、これらを当てはめてみるのが最初になされることである。 頻度以外にも、単語中の出現位置や他の文字との多重相関をとり、元の文の意味を推定するなど、まるでクロスワードパズルを解くように、元の文章を復元していく。 しかし、エニグマ暗号では、一文字毎に文字の交換関係が変わり、単純な頻度分析では解読できない。 ドイツ軍はエニグマ暗号をどのように使っていたのか?暗号化はエニグマ暗号機という頑丈なタイプライターのような機械で行った。 エニグマ暗号特有の対称性により、同じ機械で暗号文をタイプすれば、平文に戻る。 ローターには、円周上に二十六の文字が表示されているリングがある。 リングは可動で、どこかの位置(リング座標)で固定する。 ローターには爪があり、一回転する間に隣のローターに力を伝え、それを一文字だけ回転させる。 いわば歯車計算器の桁上げ機構のようなものである。 この爪による桁上げが起こる位置は、最初にリングを固定した位置で決まる。 同様の桁上げメカニズムにより、左端のローターは中央のローターが一回転するまでに、一文字分回転する。 エニグマ暗号機には三つの内部スロットがある。 ローターは全部で五つあり(後に八つになった)、そのうちの三つを選び、内部スロットに挿入する。 ステッカー結線は十本あり、二十六文字のうちの二十文字(各二文字十組)を選んで結線する。 しがたって、エニグマ暗号機の設定の総組み合わせは、150のあとに0が18個並ぶぐらいの巨大な数になる(5つのローターから3つを選ぶのは60通り、各ローターの初期文字位置を選ぶのは26の3乗=17576通り、26文字から20文字を選び、それを十本のコードで結線するのは、約 150掛ける10の12乗通りある。 したがって、総組み合わせは約1・58掛ける10の20乗通りになる)。 もちろん真正面から、全数探索することは不可能だ。 つまりこれを全部試してみて、典型的なドイツ語の文字頻度分布が出てくるかどうか調べてみるというような計算は、今のスーパーコンピュータでも少々無理である。 ドイツ軍は、エニグマ暗号は絶対に破られないと信じていた。 エニグマ暗号機によって、送り手は平文を暗号化し、受け手に送信する。 暗号文を受信した受け手は、同様にエニグマ暗号機によって復号化し平文をえる。 その具体的な手順を次に詳しく述べよう。 (a) ローター設定 送り手は五つあるローターから、暗号表でその日に指定された三つのローターを取り出す。 (b) リング設定 ローター外周のリングをすべらせて、同じくその日に指定されたローターの文字と電気接点間の対応をとる。 これにより桁上げのタイミングが決まる。 (c) スロット挿入 三つのローターを、その日に指定されたエニグママシンの挿入位置(左・中央・右)に差し込む。 (d) ステッカー結線 十本のコードによって、その日に指定されたステッカーボードの二十六文字中二十文字を結線する。 以上の(a)〜(d)の指定は、日鍵 key of the day と呼ばれる、特定の日に設定すべき鍵である。 日鍵は暗号表にして司令部より一ヶ月分を配布される。 当然、通信する相手(ドイツ軍)も同じ暗号表を持っている。 (a)〜(d)によってローターを挿入し、ステッカー結線を終えると、暗号化の準備が整う。 (1)インディケーター設定 送り手は、ローターを回転させ、ランダムに選んだ初期回転位置にセットする。 たとえばJCMという文字が窓から見える位置までローターを回転させる。 このJCMをインディケーター設定という。 (2)インディケーター この状態でランダムに選んだ三つの文字(BGZとしよう)を二回タイプする(無線通信はノイズに弱いから、同じ文字を二回くり返す)。 たとえばBGZBGZと。 これはインディケーターと呼ばれる。 この二つ、インディケーター設定とインディケーターは、今の通信だけに有効で、メッセージ鍵 message key と呼ばれる。 BGZBGZは暗号化されてTNUFDQになる。 (3)ローターをインディケーター設定BGZに合わせ、本番のテキストをタイプする。 ランプを読みとり暗号化文を記録する。 (4)無線で、まず、コールサイン、時刻、文字数を送り、エニグ暗号機の型コードを送る。 次にインディケーター設定JCMを送る。 ここまでは暗号化されていない平文である。 (5)次に暗号化されたインディケーターTNUFDQを送る。 (6)そして暗号化された本文を送る。 つまり、電文は、 インディケーター設定JCM(平文) インディケーターTNUFDQ(暗号文) 本文(暗号文) という順に送信される。 受け手(ドイツ軍)は、あらかじめ暗号表を見て、その日の日鍵に合わせて、エニグマ暗号機を設定し、電文の到着を待っている。 そして、送られてきたインディケーター設定JCMにローターを合わせる。 次に送られてきたインディケーターTNUFDQをタイプする。 するとBGZBGZという復号されたメッセージ設定が現れるので、ローターをBGZに合わせ、いよいよ暗号化された本文をタイプすると、最終的な平文がえられる。 イギリス側もこの同じ電文を傍受するが、日鍵(a)〜(d)が不明なので、まず日鍵を解読する必要がある。 なお、エニグマ暗号機には初期の商業的な利用の時代のもの、軍用の暗号になっても陸海空軍によって異なるいくつかの種類がある。 また年とともに、日鍵の決め方の複雑さ、ローターの数とスロットの数、スッテカー結線の本数などが増えている。 その事情は、サイモン・シン『暗号解読』に詳しい。 ポーランドは、エニグマ暗号機の構造、説明書や暗号化の手順と通信方法を、フランス経由で入手していた。 一九三八年以前のドイツ軍は、前記(1)のインディケーター設定を採用していなかった。 またローターは三枚しかなく、ステッカー結線も六本しかなかった。 したがって、ローターの挿入方法の六通りと、インディケーター(ローターの初期回転位置)の組み合わせ26の3乗=17576との積、すなわち105456通りがすべての日鍵の組み合わせになる。 ドイツ軍はその日の日鍵に従ってステッカー結線をし、ローターを挿入する。 そして、任意に選んだインディケーターを二度タイプする。 その次に本文をタイプする。 この暗号化されたインディケーターと本文を無線で送信する。 無線を傍受したポーランド側が、日鍵の解読に成功しても、それはその日だけに有効な鍵である。 次の日には日鍵は変わってしまうので、与えられた時間は限られている。 エニグマ暗号の解読にあたったのは、ポーランドのレイェフスキーらの数学者たちだった。 彼らは、ローターのインディケーター設定を二回タイプするという特殊な通信方法に目をつけた。 つまり1番目の文字と四番目の文字は平文では同じ文字だが、ローターが回転しているので文字変換が違っているだけである。 同じように二番目の文字と五番目の文字、三番目の文字と六番目の文字は、平文では各々同じ文字がエニグマ暗号に変換された結果である。 いま一番目と四番目の文字に注目する。 暗号文の一番目と四番目の位置の平文の文字はわからないが、それを暗号化した文字はわかっている。 上段の文字が電文の一番目に現れるとき、下段の文字が四番目に現れる。 たとえば、Eという文字が一番目に出てくると、四番目ではXという文字になっている。 そのXが一番目に出てくると四番目ではOという文字が出現する。 そのOはMになり、MはHになり、HはEになって元に戻る。 そしてこの四つのループで二十六文字すべてを尽くしている。 ポーランドの数学者たちの重要な発見は、こういうループの数とその長さは、ローターによる変換に固有のものであり、ステッカー結線によって影響を受けないということであった。 ステッカー結線では二つの文字が入れ替わるだけで、ループの構成(分割数と長さ)は変わらない。 日鍵のすべての組み合わせについて、このループの構成を調べ上げ、それを表にする。 そして、ある日の暗号文を集めて、最初の六文字からループを抽出し、この表を逆引きすれば、日鍵が発見できる。 もちろん事はそれほど簡単ではない。 六文字のうちには必要なループが含まれていない可能性が多い。 ローター設定がわかっても、ステッカー結線で文字が入れ替わっているから、すぐには平文が読みとれるわけではない。 最終的な解読には、本物のエニグマ暗号機により実際に試してみて、ドイツ語として自然かどうかを調べる試行錯誤が必要なのである。 しかし、エニグマ解読の本質的な問題はこのループの分析で乗り越えられた。 しかし、一九三八年十二月以後、ローターの数とステッカー結線の本数が増え、エニグマ暗号の解読にはさらに作業量を要するようになった。 彼らは一の長さのループを自動的に発見するリレー式の電気回路( Bomba)を作って新しい暗号方式に対抗したが、ドイツのポーランド侵攻が迫ってきた一九三九年夏、すべてのノウハウをフランスとイギリスに譲り渡して、ポーランドの活動は終わった。 エニグマ暗号解読の活動は、イギリスのブレッチレイ・パークにおけるチューリングらに移る。 ポーランドの先駆的な仕事をチューリングはどのように発展させたのか? 解読には、平文の一部分(単語でもいい)が推定できるといい。 これはクリブ( crib)と呼ばれた。 虎の巻とかカンニングという意味である。 暗号文中によく現れる常用句、たとえば「ビスカヤ湾の天気予報」、「師団長閣下」、「特に異常なし」などがそれである。 最初、チューリングはクリブを重視したアプローチをとろうと思っていた。 彼はポーランドの努力を知って、機械化と数理的考察をさらに進めることにした。 そして開発した機械が「チューリング・ボンベ Bombe 」である(ポーランドの解読マシン Bombaと区別するために、ここでは Bombeをボンベと呼んでおく)。 そこには、チューリングらによってなされた重要な技術革新があった。 その三つのローターと反射板の中を流れる電流の向きが一方向になるように、出入り口が二つあるスクランブラーに置き換えた。 スクランブラーは機能的には三つのローターと同じ働きをするが、エニグマ暗号機のローターに備わっていた桁上げ機構がない。 なお、数種類のローターの中の結線は、諜報活動などによってほぼ判明している。 また、日鍵のリング設定は、仮にZZZとしておく。 解読された鍵は、この初期位置から相対的に解釈しなおされる。 ポーランドの Bombaでは、電流の経路は一本の電線であったが、チューリングは、それを二十六本の並行ケーブルとした。 これにより二十六文字を同時並列にスキャンすることが可能となった。 ボンベにおける最も独創的な発明はフィードバック結線で、これについては後の章で議論する。 チューリング・ボンベは、スクランブラーを多数、横方向(文字列の方向)へ並べ、各スクランブラーの入出力にある二十六文字の端子を多芯ケーブルで自由に接続できるようにしたものである。 並んでいるスクランブラーは全部同じ構造だが、右隣のスクランブラーは、ちょうど一文字打って回転した左のスクランブラーの状態に設定されている。 暗号文も平文も、各文字を横方向へ並んだスクランブラーに対応させる。 逐次的にエニグマ暗号機のキーボードへ文字を打ち込んだときのローターの状態が、ボンベでは空間的に展開されている。 図中の一本の線で描かれている結線は、実は二十六文字に対応したケーブルである。 またボンベにはステッカーボードはない。 ただエニグマ暗号のローターを二十六文字並列に展開し、さらに文章の文字列を空間的に配置されたスクランブラーに展開しているだけである。 ブレッチレイの暗号解読部隊は、過去の諜報活動によって、エニグマ暗号機の構造は知っていたし、日鍵とメッセージ鍵の存在と、それを用いた通信方法(ドイツ軍がそれを変更しない限り)を承知していた。 もちろん、その日の日鍵とメッセージ鍵はわからないので、傍受した暗号文を解読して、それを発見しなくてはならない。 次の日には日鍵は変わってしまうので、解読作業が急がないといけない。 チューリング・ボンベは、リレー回路により電圧の分布を調べ、鍵(日鍵とメッセージ鍵)とステッカー結線が矛盾なく発見されていれば、自動運転をストップする。 そのときの先頭のスクランブラーの設定が、求める日鍵とメッセージ鍵である。 矛盾があるとき、スクランブラーの状態は次の鍵の候補に自動的に変化し、自動判定を繰り返す。 では、その判定条件とは何か? 簡単な例をあげよう。 暗号文「UILKNX」は平文「GEHEIM」に対応していると、推定されるとしよう。 「GEHEIM」は「秘密」という意味で、クリブである。 これ以外の端子には電圧はかかっていない。 番号1のスクランブラーの状態が、(未知の)日鍵とメッセージ鍵を正しく模擬していると仮定しよう。 最初のスクランブラーのG出力端子、二番目のスクランブラーのE出力端子、同様に三、四、五、六番目のスクランブラーのH、E、I、M出力端子だけに電圧が現われるだろう。 これが正しく解読された状態であるが、このような状態を一気に発見することはほとんど不可能である。 一方、ボンベにはステッカー結線がない。 各スクランブラーに、各々二十六本の入出力端子があるだけである。 エニグマ暗号では、暗号化と復号化は対称、つまり同じマシン上で同じ手順で行うので、スクランブラーの入力と出力を区別する必要はない。 また、入力側で(出力側でも)同じ文字をつなぐとき、ステッカー結線は影響しない。 したがって、スクランブラーによる文字変換に関する限り、ステッカー結線はないも同然である。 このエニグマ暗号の特徴は、すでにポーランドの学者たちによって利用されていた。 暗号解読の最初の作業はクリブから、スクランブラー間を結線する「メニュー」を取り出すことである。 そして、二番目のスクランブラーの暗号文側にかけられた電圧は、メニューを構成しているスクランブラー全体に拡がる。 第二番目のスクランブラーに対応する暗号文の文字をMとしよう。 二番目のスクランブラーの二十六ある文字端子のどれが(エニグマ暗号機では最右側のローターの接点のどれが)Mという文字の入力を受けているのかは未知である。 その不明の文字を仮にAとしよう。 すなわちMとAを結ぶステッカー結線があると想像する。 これをM/A仮説と呼ぶ。 ステッカー結線は日鍵であるから、一旦、結線されると一日中変わらない。 したがって、二番目のスクランブラーの暗号文の側でM/A仮説が成り立つとすると、六番目のスクランブラーの平文側のMが(仮想的なステッカー結線を経て)接続されている端子は、当然Aでなければならない。 二番目のスクランブラーの暗号文側の端子Aに電圧をかけると、六番目のスクランブラーの平文側の端子Aだけに電圧が現れるはずである。 もし、この条件が満たされないときは、二番目のスクランブラーの端子Bに電圧をかけて六番目の端子Bの電圧を確かめ、それが満たされないとき、さらに端子Cを、端子Dをと、全部の組み合わせについて試行し、判定を繰り返すことになりそうである。 それでは、暗号を解くのに長い時間を要するだろう。 この判定を一気にやってしまう方法がフィードバックである。 フィードバック結線の考え方は、等しくなるべき変数は最初から等しい、それも恒に等しい(恒等的)として結合することである。 はたしてそれで技術的に不都合なことは起こらないのだろうか? まず文字変換の基本サイクルという概念を説明しよう。 この例では、M/Aという仮説を立てて(MはAと結線されていると仮定して)電圧をAにかけると、六番目のスクランブラーではFという端子に電圧がでてくる。 しかしこれはありえない。 なぜなら、二番目のスクランブラーでM/Aというステッカー結線を仮定すれば、それは一日中変化しないはずなので、六番目でM/Fという結線になるわけがないから。 対応関係は と と と という共通部分を含まないサイクル(今まで使ってきたループという意味ではないので、サイクルという用語を使う)を含んでいる。 サイクル の意味は、EはXに対応し、XはOに、OはMに、MはHに、Hは再びEに対応するというループを意味している。 の意味は、VはVだけに対応づけられていることで、数学的には不動点である。 従って仮説M/Vが正しいとすると、暗号文入力Mはステッカー結線でVに変換され、それは複数のスクランブラーを経てVへ戻り、ステッカー結線で再びMになる。 これが正しく暗号が解読された状態である。 サイクルとは、スクランブラーによる変換行列を、互いに素 disjoint な行列に分解したときの特性行列である。 具体的には、ローターによる文字変換によって、順次変換される文字端子を表しており、そのどこかの文字端子に電圧が加わると、電圧が伝わっていく端子群を意味している。 サイクルの集合に含まれるどの端子に電圧をかけても、この集合のすべての要素の端子に電圧が現われる。 しかし、正解(正しい暗号・平文対応)の対応関係はただ一つだから、正解の文字集合(結線)と正解でない文字集合(結線)とは、共通部分(導通)を持たない。 電圧がループの結線を伝搬して、サイクルを構成する端子群に拡がる有様は、(1)メニューが適切ではないか、スクランブラー1の設定(日鍵とメッセージ鍵)が間違っている場合と、(2)どちらも正しい場合とで異なる。 (1)メニューが適切ではないか、スクランブラー1の設定が間違っている場合 ほとんどの場合がこれで、電圧はどこまでも拡がる。 なぜなら、実際のエニグマ暗号機のローターがもっていた変換行列と、ボンベの現在のスクランブラーの設定は一致していないし、ループの結線も間違っているのだから、電圧は本来のサイクルの境界を越えて、無秩序に拡がるだろう。 これは、述語論理の命題、「間違った仮定から導出される定理は全部真になってしまう」の好例であるといわれている。 ただし、電圧が十分に拡がるためには、すくなくとも三つ以上のループが必要だと(経験的に、また確率の計算から)推定されていた。 (2)メニューも適切で、スクランブラー1も正しく設定されている場合 電圧はどこまでも拡がることはなく、以下のどちらかになる。 C1 正解の文字端子に電圧をかけると、その文字端子に限って電圧が現われる。 C2 間違った端子に電圧をかけると電圧は拡がるが、正解の端子だけには電圧が現われない。 前述したように結線された端子群は、相互に独立なサイクルに分けられている。 たまたま正解の文字端子に電圧がかけられると、電圧はその文字端子だけに現れ、ほかのサイクルに属する端子群には現れない。 なぜなら両者は相互に導通がない(数学的には disjoint)からである。 この正解端子が偶然わかる確率は低い。 普通は、正解でない文字端子を含むサイクルに電圧をかけてしまうだろう。 その結果、電圧は正解端子を除いた端子群に拡がる。 これで、仮説M/A、M/B、……、M/Zを全部試す必要はなくなった。 正解かどうかの判定は一度の電圧の印可によって可能となった。 ただし、メニューが不適切でループが不足しているか、まったくメニューが間違っている場合、これらの条件がたまたま満たされる「偽の停止」が起こりうる。 極端な例として、まったくメニューに基づく結線がない場合を考えよう。 任意の端子に電圧を加えたとき、その端子だけに電圧が現れるので、条件C1が満たされている。 しかし、これが正解である確率はきわめて少ない。 このときのボンベの停止は、正解に対応しない「偽の停止」となるだろう。 クリブの不足を補うために考案された重要な発明があった。 それは、チューリングと同じグループで働いていた数学者ウエルチマンによって提案された対角結線 diagonal board である。 ステッカー結線の対称性(双方向性、たとえば端子Tが端子Nに接続されているならば、端子Nは端子Tに接続されている)を利用して、ループに現れる端子群の中で対称の位置にある端子を積極的に電気抵抗ゼロのケーブルで結線してしまうのである。 数学的には変換関係にある記号ペアを、恒等的に結合することで、フィードバック結線と同じ哲学に基づいているアイデアである。 対角結線の発想を最初に聞いたとき、チューリングはしばらく理解できなかったと伝えられている。 それほどこの対角結線は画期的なアイデアであった。 この対角結線によって、異なるサイクル集合へ電圧が波及しやすくなった。 それはクリブの不足を大幅に補って、エニグマ暗号解読の成功率に大きく貢献した。 ポーランド人たちが、試行錯誤でやっていたステッカー結線の相手を見つけることが、このフィードバックと対角結線によって、(すくなくとも最初に電圧をかける一つの文字Mに関しては)自動的に発見できるようになった。 ボンベにはステッカーボードはない。 電圧をかけている端子は、スクランブラーの端子(エニグマ暗号機でいえばローターからの出入り口の端子)そのものである。 Mは暗号文中の文字で、ステッカーボードを介してAと変換される文字であり、ボンベでは仮にスクランブラー2に割り当てて考えている文字である。 ボンベが停止し、Aは実はVであるとわかったとしよう。 ボンベが停止すると、スタッフがその設定情報をもって別棟に駆けつける。 そこには、ステッカー結線のないスクランブラーだけのエニグマ暗号機を模擬した機械があった。 この作業中に、ステッカー結線相手が二重に(一度求まった相手とは異なる相手と)求まってしまうときは、あきらかにその停止状態は「偽の停止」である。 そのとき、偽の停止を無視して、ボンベは次の鍵から探索を再開する。 偽の停止はボンベの自動運転を妨げ解読の時間を長引かせるので、できるだけその出現頻度を下げ、また判定作業を自動化して、探索作業の能率を上げなければならない。 ボンベ改良機JUMBOを使った解読の手順をまとめておこう。 (1) 最初のスクランブラーを日鍵とメッセージ鍵探索の初期値に設定し、順次スクランブラーを一文字ずつ回転させる。 (2) 電文からクリブを想定し、メニュー作成し、それにしたがってスクランブラー間を結線する。 フィードバック結線と対角結線を追加する。 (3) 試行端子(普通はAとする)を選び、そこに電圧をかける。 (4) ボンベは自動的に全部の端子の電圧をチェックし、全部に現れていたら、それは間違った鍵なので、(7)へ進む。 (5) メニューに現れている文字端子に順次電圧をかけ、その電圧だけがそのままで、他の端子には電圧が現れていないか(この状態をストレートと呼んだ)を調べる。 これは正解条件C1の場合である。 他の端子に電圧が現れていれば(7)へ。 (6) いくつかのストレートの状態がみつかれば、それらに関して、ステッカー結線の無矛盾(異なった端子と二重に結線されていないこと)を確かめ、すべてのストレートが矛盾していれば(7)へ。 無矛盾なものが残れば、ボンベは停止し(8)へ。 (7) スクランブラーは自動的に回転し、次の鍵の設定に変わる。 (3)へ戻る。 (8) ローターの桁上げ位置すなわちリング設定と、ループ中には現れていないステッカー結線を推定する仕事が残っている。 エニグマ暗号機の模擬機において、実際に求まった日鍵とメッセージ鍵を設定し、暗号文を打ち込んでみて、意味のあるドイツ語(平文)が現れるまで試行錯誤をくり返し、矛盾しない桁上げ位置とすべてのステッカー結線を推定する。 (9) エニグマ模擬機に日鍵とメッセージ鍵を設定し、暗号文を打ち込んで平文をえる。 エニグマ暗号はボンベによって100%自動的に解読されたわけではない。 まだ現場的なカンを要求される(8)などの手作業が残っていた。 また、偽の停止をできるだけ減らすためには、良質のクリブをえるように努力せねばならない。 たとえば偽の作戦でドイツ軍を騙し、意図するクリブを電文に入れさせるなど。 実際、007シリーズの作者イアン・フレミングは、ブレッチレイ・パークにいて、そのような仕事についていたという。

次の

ノート:エニグマ (暗号機)

エニグマ 暗号 機

ポーランドは、東西をロシアとドイツにはさまれ、地政学的には最悪の位置にある。 そして、第一次世界大戦でそれを身をもって体験した。 ドイツとロシアに同時に攻め込まれたのである。 ポーランドは、事が起こる前に、必ずサイン(兆候)があると考え、情報収集に余念がなかった。 もちろん、重要な情報はすべて暗号化されている。 1926年のある日、ポーランド暗号解読班は、突如、 解読できない暗号に遭遇した。 ドイツのエニグマ暗号である。 エニグマ(enigma)はドイツ語で「謎」を意味するが、その名に恥じない難攻不落の暗号だった。 ただし、方式はオーソドックスな「 文字の置き換え」。 平文の文字を「変換ルール」に従って、置き換えるのである。 当然、変換のルールが鍵となる。 平文を秘密の鍵で暗号文に変換すれば、同じ鍵をもつ人だけが、暗号文を平文に戻すことができる。 この鍵は、文字どおり、「暗号の鍵」となる。 もし、考えられる鍵が数個なら、鍵をすべて試してみればいい。 意味のある文章が現れれば、その鍵がアタリだ。 ところが、エニグマ暗号の鍵は 、 「 159,000,000,000,000,000,000通り」 これを全部試すには、現在のスーパコンピュータでも難しい(2006年現在)。 解読できないというのではなく、解読に要する時間が問題なのだ。 エニグマ暗号の鍵は毎日変更されたので、解読に1日以上かかっては意味がない。 そもそも、この時代、スーパーコンピュータどころか、パソコンもない。 ここで、エニグマ暗号の運用をみてみよう。 エニグマ暗号の 鍵は毎日変更されるので、あらかじめ、1ヶ月分の鍵(コードブック)が、すべてのエニグマ暗号機のもとに配布される。 次に暗号の送受信。 例えば、12月24日、A点からB点にメッセージを送るとする。 A点とB点では、先ず、コードブックに記載された12月24日の鍵に従い、エニグマ暗号機を設定する。 次に、A点でメッセージ(平文)をエニグマ暗号機に入力すると、暗号文が出力される。 次に、この暗号文をB点に送信する。 B点で受信した暗号文をエニグマ暗号機に入力すると、平文で出力される。 すべてのエニグマ暗号機は、同じ12月24日の鍵に設定されているので、正しく変換されるのである。 エニグマ暗号は、毎日、鍵が変更されたが、送信される暗号文が多ければ、その分、解読されるリスクも増大する。 そこで、ドイツ軍は、素晴らしいアイデアを思いつく。 送信する メッセージごとに異なる「鍵」を使うのである。 この方法は、現代の暗号でも使われている。 まず、メッセージの先頭に、そのメッセージだけに使う「メッセージ鍵」を、「その日の鍵」で暗号化する。 次に、メッセージ本文を、この「メッセージ鍵」で暗号化する。 この方法だと、「その日の鍵」が使われるのはメッセージ鍵だけで、メッセージ本文には使用されない。 つまり、「その日の鍵」が使用されるメッセージが激減する。 こうして、エニグマ暗号の解読は劇的に難しくなった。 第二次世界大戦が始まると、チューリングはブレッチレイ パークにある暗号解読センターに送り込まれた。 エニグマ暗号を解読するためである。 ポーランドはドイツに占領され、ポーランドのエニグマ暗号解読の成果は、チューリングのチームに引き継がれた。 暗号は古くからあるが、 暗号解読は言語学者の仕事と決まっていた。 暗号解読は未知の言語の解読に似ており、言語能力に依存すると考えられたからだ。 その良い例が、エジプト象形文字「ヒエログリフ」の解読である。 フランスのフランソワ シャンポリオンが、エジプトで発見されたロゼッタ ストーンから、ヒエログリフの解読に成功したのである。 シャンポリオンは語学の天才だった。 18歳で十数カ国語をマスターし、すでに大学の教壇に立っていた。 このような天賦の才と寿命を縮めるほどの努力が、不可能とされたヒエログリフの解読を成功に導いたのである。 シャンポリオンは古代エジプト学に多くの業績を残したが、41歳の若さで亡くなっている。 一方、チューリングをリーダーとする暗号解読チームは、 数学者を中心に編成された。 エニグマ暗号の鍵は、159,000,000,000,000,000,000通りもあり、この中からたった1つのアタリ鍵を見つけるの至難である。 総当たりで捜すのは時間的にムリなので、近道を見つける必要があった。 そこで、役に立ったのが数学である。 クリスマスに欠かせないクリスマスツリー。 ツリーの枝葉には、たくさんの飾りがぶら下がっているが、その1つがエニグマ暗号の鍵だとする。 暗号解読をこのツリーにたとえると、ツリーの根元からスタートし、試行錯誤を繰り返しながら、鍵にたどりつくことになる。 だが、飾りが159,000,000,000,000,000,000 もある巨大なツリーを、一つづつたどるのは気が重い。 もっと手っ取り早い方法はないのか?例えば、ツリーを大きく左半分と右半分にわけ、目当ての鍵がツリーの左側にあると分かれば、右半分は調べる必要がない。 これだけで手間は半減する。 つまり、総当たりではなく、探索空間をせばめればいいわけだ。 そこで、役立つのが数学である。 さらに、高速な計算機械を使って、探索時間も短縮する、というのがチューリングたちの手法だった。 その計算機械というのが「チューリングボンベ」だった。 チューリングボンベは、 電気式のアナログ探索装置で、膨大な可能性の中から「当たり鍵」を15分ほどで見つけることができた。 こうして、チューリングは解読不可能といわれたエニグマ暗号を解読したのである。 まさに、現代のシャンポリオンであった。 このアイデアは、チューリングの数学論文の中で提唱されたが、脳が問題を解くプロセスを、仮想コンピュータで真似ようとしたのである。 つまり、数学の問題を解く脳をモデル化し、それを仮想のコンピュータに置き換え、これに解かせたのである。 こんなこと、一体どうやったら思いつくのだ?! 気を取りもどして、具体的にみていこう。 脳は、通常、いくつかの状態がある。 例えば、喜・怒・哀・楽。 これを脳の内部状態と呼ぶことにする。 この内部状態は、脳への入力によって変化する。 例えば、「侮辱」が脳に入力されると、内部状態は「怒」に変化する。 このことから、脳は次のような性質をもつことが分かる。 1.有限個の内部状態をもつ(喜・怒・哀・楽)。 3.どの入力でどの状態に変化するかの手順が内蔵されている(性格?)。 このようなものを「 オートマトン」と呼んでいる。 有り体には「自動機械」だが、このような機械は世界中にあふれている。 認めたくはないが、脳=人間もその1つかも知れない。 アラン チューリングは、このオートマトンに記憶装置をつけ加え、脳を真似たのである。 これが チューリング マシン(Turing Machine)だ。 頭文字をとって、「TM」とも呼ばれている。 記憶装置は無限長のビデオテープをイメージすると分かりやすい。 ヘッドががテープ上を両方向に移動し、データを読み書きするわけだ。 チューリング マシンの動作はいたってシンプルである。 まず、ヘッドがテープからデータを読み取り、オートマトンに入力される。 次に、入力に従って、オートマトンの内部状態が変化し、その結果がテープに書き込まれる。 その後、ヘッドが移動し、テープからデータを読み取り ・・・ この処理が繰り返される。 また、入力と出力の関係はオートマトン内部に内蔵されている。 「Universal Turing Machine」の頭文字をとって「UTM」とも呼ばれる。 このマシンは、チューリング マシンの入出力を保持するテープの他に、オートマトンの入力・内部状態・出力の対応表を記録したテープを備えている。 第1のテープは、データを読み書きするメモリ、第2のテープはプログラムを格納するメモリに対応している。 これは、現在のノイマン マシンにほかならない。 ただし、 チューリングマシンとノイマンマシンでは構造が全く異なる。 チューリング マシンは概念上のモデルだが、実体化すれば、立派なコンピュータになる。 アラン チューリングは、計算可能な問題は、 すべてチューリング マシンで計算できることも証明した。 ここでいう計算は、広く「問題解決」を意味し、数値計算に限らない。 同じことを、数学者ゲーデルが純粋数学で証明したらしいが、専門外なので説明不可。 ただし、「チューリングがどんな問題も計算できる」とは言っていない。 「 計算可能な問題」という制限つき。 ここでいう「計算可能な問題」とは、チューリング マシン上で、有限ステップで実行できる手順が存在することを意味している。 ノイマン型コンピュータ(ノイマンマシン)で言えば、アルゴリズムで表せるもの、プログラムで書けるものである。 「チューリングマシンの実行結果は、実行する前に、予測することはできない」 つまり、 「 プログラムの実行結果を予測する普遍的なプログラムは存在しない」 これは非常に重要な事実である。 まず、プログラムの実行結果の正否を判定できないのだから、 バグを見つける普遍的なプログラムは作れない。 そのプログラムが何をするかは、実行してみないと分からないのだ。 年季の入ったプログラマなら感覚的に理解できるが、数学的に証明されたことが重要だ。 こう言うと、プログラマからツッコミが入りそうだ。 「コンパイラがエラーを返すのは、どういうわけ?」 コンパイラは、C言語などのプログラミング言語で書かれたプログラムを、コンピュータのネイティブ言語「機械語」に変換するソフトである。 確かに、コンパイラはプログラムのミスを見つけてくれる。 だが、コンパイラーは形式上のミスを見つけているだけで、プログラムの「アルゴリズム」までチェックしているわけではない。 これは、 何ごとも各論でやればうまくいく、というまやかしの一つで、「普遍的法則」ではない。 実行結果を予測するプログラムは作れないのだから、それが ウィルスかどうか見分ける普遍的なプログラムも作れない。 実行しない限り、ウィルスかどうか分からないのだ。 もちろん、実行してからでは遅い。 というわけで、万能ウィルス対策ソフトは永久機関と同じ。 できそうに見えて、できない。 しかも、それが科学的に証明されている。 ところが ・・・ 最近のウィルス対策ソフトには、未知のウィルスを検出する「 ヒューリスティック機能」がついている。 それをウリにしているのがウィルス対策ソフト「NOD32」だ。 既知のウィルスパターンを参考に、各論的に推論しているだけ。 重要なのは普遍的か各論的か?前者は真実で、後者はまやかしである。 では、ウィルス対策ソフトは、どうやってウィルスを見つけているのか?じつは、既に発見されたウィルスと照合して判定しているだけ。 そのため、ウィルス対策ソフトは、自社サイトからウィルスパターンを定期的にダウンロードしている。 次々と出現する新しいウィルスに対応するためだ。 2006年11月現在、 世界最高のウィルス検出率と噂されるのが「カスペルスキー」。 そのカラクリは、ウィルスパターンの更新スピードにある。 カスペルスキーのパターン更新は、1時間~2時間に1度のペースで行われる。 こちらは、ウワサでなく本当だ。 ということで、無敵のカスペルスキーも、命綱はヒューリスティック機能ではなく、既知のウィルス データベースである。 やはり、未知のウィルスを発見する普遍的プログラムなど夢物語なのだ。 とはいえ、各論的にやっても、そこそこ成果は見込めればそれで十分、という考え方もある。 数学には「絶対」が必要だが、商売なら「そこそこ」で十分。 一方で、大きな問題も起こっている。 ウィルス対策ソフトが高機能化した結果、処理が非常に重くなったのだ。 少し前なら、「ノートン」はウィルス検出率は高いが処理が重い、「マカフィー」は検出率は低いが軽いなど、分かりやすい図式があったが、現在は(2006年11月)、どのソフトも重い。 それも、非常に重い。 処理の重いソフトを使っているなら、Dual CoreのCPU、メモリ1GBは必要だろう。 しつこいが、それでも重い。 仕事をするためにパソコンを買ったのに、 パワーの半分近くがウィルス対策に盗られている。 いったい、どうなっているのだ? 先日、Maya、Max、Director、AfterEffects、Photoshopなど重いグラフィックソフトを使っているデザインチームに、ウィルス対策ソフトを導入することにした。 台数は25~30台。 事前に、試用版を試してみたが、やはり、重い。 ワンクリック何円という激しいマウス操作で生計を立てるグラフィック デザイナーにとっては死活問題。 チューリングの業績は難解なもの多いが、中にはなじみやすいものもある。 「チューリング テスト」だ。 「機械が知能と呼べるかどうか?」 を判定するテストである。 まず、人間がキーボードとモニターを介して、機械と対話をする。 その人が、その機械を人間と誤認すれば、機械は「知能」と認定される。 だが、2006年現在、チューリングテストに合格した機械(プログラム)はない。 そのほとんどが、 言葉を並べ替えて、人間を惑わしているだけ。 やはり、チューリングテストに合格するには正真正銘の「人工知能」が必要だ。 しかし ・・・ 「 ノイマン型コンピュータでは人工知能は実現できない」 と、個人的には思っている。 チューリングは、 「プログラムの実行結果を予測する普遍的なプログラムは存在しない」 を数学的に証明した。 よって、 「プログラムのアルゴリズムを理解できる普遍的プログラムは存在しない」 ところが、 「知能とはプログラムのアルゴリズム(思考手順)を理解できるもの」 だから、チューリング マシンやノイマン マシンでは、人工知能は創れない ・・・ ただのプログラマーの独り言である。 チェスの世界チャンピオン「ガルリ カスパロフ」と機械の「ディープ ブルー」の一戦である。 結果は、2勝1敗3引分で、ディープ ブルーの勝ち。 マスコミはこぞって、 「人間の知性が機械に負けた」 と喧伝した。 だが、ディープ ブルーは「人工知能」ではない。 もし、ディープ ブルーがホンモノの知能の持ち主なら、チューリングテストに合格し、今頃、人間と世間話を楽しんでいただろう。 ディープ ブルーは、チェスを数値化して計算しているだけ。 思考しているのではなく、チェスの手順をなぞっているだけである(シミュレーション)。 「 知能とは思考手順をなぞるのではなく、創発すること」 そう考えると、脳の本質が見えてくる。 じつは、脳は「考える」ことはできるが、考える「仕組み」まで理解することはできない。 同じように、ゲームに登場するキャラは敵を「倒す」ことはできるが、「倒す」仕組みは理解できない。 仕組みを理解できるのは、その仕組みの作り手のみ。 つまり、ゲームのキャラならプログラマー、知能ならこの世界の創造主。 ということで、遺伝子操作や同様、人工知能は神の領域なのかもしれない。 参考文献: 星野力「蘇るチューリング」NTT出版 サイモン・シン 青木薫約 「暗号解読」新潮社 by R.B•

次の