コード (暗号)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

コード (code) とは、メッセージを特別な知識や情報無しでは意味が分からないように変換する秘匿手段の一つであり、暗号の一種である。

簡単に定義すれば、事前の合意に基づき、単語、フレーズ、あるいはもっと長いメッセージを、別の単語、無意味な文字列、数字などに置き換える暗号である。著名なコードとしてはトラトラトラニイタカヤマノボレなどがある。身近なコードとしてはコードネーム符牒隠語などがある。

コードとサイファ[編集]

コードは、理論的には“syllabic(音節) and lexical(語彙) cipher”としてサイファ(cipher)の一種と見なすことは可能である。しかし、長い歴史の中でサイファと平行して独自の進化を遂げてきており、欧米の暗号文献ではコードとサイファを別系統に扱っている。

秘匿を目的としてサイファは市販され仕様を公開する事はある。しかしコードではあり得ない。

なお、英語 code は暗号化を目的としないものを含み、その意味では市販のコードブックは存在した(w:Commercial code (communications))。暗号化したい場合は、このコードを元に暗号化することもあった。

ワンタイムパッドの例外を除くとサイファの鍵は短いので鍵が盗まれた場合でも新規作成が容易である。しかしコードはコードブック自体が巨大な鍵であり作成に多大な労力が必要である。その意味でコードはサイファよりも盗まれ損な暗号とも言える。

コード解読は理論解読が成果を挙げる前にスパイによる金庫破りや鹵獲によって達成したケースが多い。さらに次回更新されたコードが盗めなくても代わりに理論解読で追随できる可能性も生まれる。

サイファには他より抜きん出た特徴を持つもの(有名なもの)が存在する。例えば単純なシーザー暗号、究極のワンタイムパッド、現行主流のRSA暗号のようにキャッチフレーズが付けられる。しかしコードではあり得ない。それ故にコードは平凡な暗号であり運用にあたってはハードルは低くて奥が深い。辞典や用語集の様に常に版を重ねて行く暫定仕様であって完成版や決定版がないのも特徴である。

サイファでは予想外の解読手法が見いだされて一晩経ったら評価(強度)が著しく落ることがあるが、コードにはない。サイファ解読には特別解法(special solution)と一般解法(general solution)がある。まず特別解法によって弱点を探し出し、そして一般解法に至る。よってサイファ解読にはブレイクスルーした段階がある。しかしコード解読には同様の段階がなく、雪だるまが徐々に大きなる様に解読が進む。

なお市販の辞書や聖書などの図書をそのまま利用した暗号、例えばシャーロック・ホームズの「恐怖の谷」に登場するタイプはコードでは無く、ブック暗号(en:Book cipher)と呼ばれるサイファに該当する。

種類[編集]

PlaincodeとEnciphered code[編集]

enciphered codeは19世紀末から20世紀半ばまで外交および軍事暗号として広く利用された。これはplaincodeの通信文(時間)を圧縮できる長所を活かしながら、オーソドックスに強度を付加できる点にあった。

しかし高度に訓練された暗号手を必要としたのが欠点であり、使い易い機械式暗号機電子式暗号機の登場によりenciphered codeは廃れて行った。

Plaincode[編集]

placode(プレイコード)やbasecode、生の(裸の)コードとも言う。コード換字のみで暗号化する。つまり一次式暗号である。

一般にコード、符牒、暗号書(一次暗号書)、codebook、repertory、cipher dictionay、word bookとはplaincodeを指す。

多くの場合plaincodeを丸暗記するのは現実的でない、それ故に暗号書を携帯、保管、配送する必要が生じる。plaincodeを組織的に丸暗記した例としてはコードトーカーがある。

Plaincodeの編纂においては利用する組織(企業、官庁、軍隊)のモラル、ドクトリン、知識が必ず反映される。よってPlainecodeを盗んで査読すると単に相手の通信文が読めるだけなく、計り知れない情報が推論できる。

企業の商用コードに「違法」や「賄賂」のコード語句が有れば、恐らくその企業は違法行為や贈賄をしているであろう。敵軍のコードに新兵器のコード語句があれば編纂当時に実用化されているだろう。味方の秘密兵器名がそのまま有れば当時から秘密が漏れているだろう。

たとえば、昭和19年に編纂した日本陸軍暗号書5号には「硫黄島」や「艦載機」の語句が当初採用されていなかった。つまり陸軍が硫黄島で戦い、(米海軍の)艦載機の攻撃を受けるとは想定していなかったことがわかる。

Enciphered code[編集]

アルベルティの暗号円盤。例えば「出航準備完了」のplaincodeが”123”であれば、これを"bac"や"gkl"のようなenciphered codeに変換できる。

encicode(エンサイコード), superenciphered code, reciphered codeとも言う。

まずコードで換字を行い、強度を高めるためにサイファでさらに暗号化する。二次式暗号(あるいはそれ以上)である。

enciphered codeを採用する理由はいくつかある。

  • plaincodeが盗まれる、紛失する等で秘匿性が失われた(と判断された)場合に応急措置として採用する場合。
  • plaincodeの秘匿性を不要として、二次暗号化とその鍵変更だけで強度を確保する場合(例えば市販の商用コードをPlaincodeに用いる)
  • plaincodeの秘匿性も必要として、さらに強度を高める場合。

記号転換が許す限りサイファの形式には何ら制限はない。換字式や転置式、ストリームやブロック暗号が使える。

よく知られる乱数式暗号や乱字式暗号とはenciphered codeの一種である。俗に「乱数の剥ぎ取り」と呼ばれる作業はenciphered codeを元のplaincodeに戻そうとする事である。

15世紀にアルベルティが最初に考案したとされる。彼は1〜4の数字から構成されるplaincodeを作成し、次いで彼の考案した暗号円盤で換字することでenciphered codeとした。しかしこの考案は19世紀末まで実用化される事はなかった。

一般に未知のenciphered code解読は対照平文が入手できても困難である。しかしplaincodeが盗まれたり鹵獲されたりあるいは理論的に再構築(reconstruction)されると一挙に強度が低下する欠点がある。これはヴィジュネル暗号において仮定語(クリブ)が利用可能になるのと等しい。

plaincodeの設計(編集)の善し悪しが、enciphered code全体の強度を左右する事がある。

通信文を全て暗号化できるか[編集]

平文とコードを混ぜる場合[編集]

極めてセンシティブな語句、例えば金額や非合法な単語だけにコード(コードネーム、符牒、隠語)を割当てて残りは平文のまま通信する。コード編纂が非常に簡便だが暗号強度は低くなる。例えば接続詞、前置詞、疑問符、句読点等はコードにされない事が多いが、これらは判明しているとコード解読に役立つからである。

全てコードにする場合[編集]

大手商社や外交、軍用コードが該当する。サイファと同様に「暗号化できるものは全て暗号化せよ」のセオリーにより、使用される語彙を統計調査してコードを割り当てる。通信する集団の文体や言葉遣いが揃っている事、揃う様に教育する事も重要である。編纂時に未知か不要と判断された固有名詞等をコード化する場合は2つの方法、スペルアウトと補遺がある。また必要であれば付録辞典も併用してコード編纂を効率化する。

スペルアウト[編集]

応急的に採用。事前に相手との取り決めは不要である。単文字や音節のコードを組み合わせて綴る。なお解読側からは貴重な手がかりとなる。

例えば第一次世界大戦にてドイツ陸軍は野戦コードに"Distilliertes Wasser"(蒸留水)が無かった当時、これをd + ist + i + ll + ie + r + te + s + wasserと9つのコードでスペルアウトした。連合軍コード解読班は高頻度のistやsを含む特徴的なコード群を探す事で他のコードも芋づる式に特定できた。 またサイファからコードに配置換えになった暗号手が原語を探すのを面倒がり代わりに全て単文字でスペルアウトした事故もある。

補遺[編集]
プロシアのコードブック。補遺が手書きで追加されている

spare groupとも言う。頻繁にスペルアウトする語句を将来追加する為に対応原語を未定としたコードを幾つか用意しておく。補遺のコードに原語を割り当てるのはコードの運用母体が行うので、個々の発信者が独自には利用できない。

付録辞典[編集]

例えば少人数が狭い地域で扱うplaincodeであれば人名、地名、艦名、商品名は都度スペルアウトして済むが、規模が大きくなると付録辞典(別冊の専用plaincode)を用意する必要が有る。当然ながら本編のplaincode側に「次のコードからは人名事典」「人名事典の終わり」といったコードも用意する必要が有る。

  • 入れ変わりの多い人名、艦名、商品名の管理が別冊内で一元管理できるので、本編plaincodeを編集する必要が無い。
  • 膨大な地名や商品名には膨大なコードを割り当てる必要があるが、本編のコードと重複割当が可能になる。

1冊制と2冊制[編集]

plaincodeの分類である。日本語訳から誤解しやすいが冊数自体に意味は無く、英語の"alphabetical"と"randomized"こそが本質を捉えている。1冊制の利便性を犠牲にする代わりに強度増加や誤字対策を得たのが2冊制である。

1冊制[編集]

one-part code、alphabetical codeとも言う。 コードの配列と原語の配列がアルファベット順、五十音順、数字順に配列してあり、その結果として暗号用と翻訳用が兼用できる(1冊に収まる)タイプである。収容原語数が少ない物は丸暗記が可能な場合もある。

例えばアルファベット3文字で色を伝えるplaincodeとして以下の例を示す。これにPurpleの原語を将来追加しようとすると対応するplaincodeはCAGCAIに挟まれたCAHしか選択の余地がない。解読する側もこのロジックに従い「もしRedCAIならば、BlueCAHより前に有るはずだ」と解析が容易になる。またこのPlaincodeが紛失や盗難で使えなくなり新しく編纂しなおす場合でもBlueRedの前に来る関係を崩す事ができない。よって1冊制とはplaincode自体に暗号強度を期待できない場合、例えば最前線で用いるenciphered codeに適している。

1冊制の例(暗号化と翻訳を兼用)

原語 Plaincode
Black CAA
Blue CAC
Green CAE
Orange CAG
Red CAI
Violet CAK
White CAM
Yellow CAO

2冊制[編集]

two-part code、randomized code、hatted codeとも言う。 コードの配列と原語の配列がランダムまたは疑似ランダムであり、以下の例ではAAA〜ZZZの何れからでも対応できる。暗号手には暗号用と翻訳用が別々に必要となるが、仮に丸暗記できた場合やソートができる場合は片方で足りる。なお2冊に別けて製本する必要は無くて通常は1冊に綴じてある。

2冊制の例(暗号化用)

原語 Plaincode
Black FFC
Blue OHY
Green XLD
Orange OFF
Red MVT
Violet SJM
White AZV
Yellow GET

配列がランダムと疑似ランダムのいずれにおいてもBlueRedの前後関係が不規則になるので解読が難しくなる利点がある。

さらに1冊制よりもエラーの検出が容易である利点もある。例えば上記の1冊制コードにおいて、Blackを示すCAAの3文字目のAが通信エラーにCになった場合、翻訳側においてはCACを色違いのエラーとして気づく可能性は低い。しかし2冊制の場合はコードが1文字違いの別コードになっても、類似性のある原語(別の色)になる可能性が低いのでエラーを検知しやすい。

ランダムな場合[編集]

原語とコードの割当に何ら制限が無ければランダムにする方法自体は様々である。例えば「アルファベット順にソートした原語のパンチカード」と「部屋中に撒いてランダムにシャッフルしたコードのカード」の各束を用意し、これをパンチカード統計機に読み込ませて原語とコードの対比表に合成する方法がある。

疑似ランダムな場合[編集]

コードの例[編集]

  • 例1 ルイ14世の大暗号(ロシニョールが作成): コードブックは「act=486、ion=102、…」のように音節単位で3桁の数に対応させる(600個程ある)。暗号文「486-102」を復号すると act-ion になる。19世紀末フランス軍の暗号解読者バズリが解読を発表した。
  • 例2 日露戦争で使われた暗号文:「アテヨ イカヌ ミユトノホウニセツシ、ノレツ ヲハイタダチニヨシスコレヲワケフ ウメルセントス、ホンジツテンキセイロウナレドモナミタカシ」。コードブックは「アテヨ=敵、イカヌ=艦隊、ノレツ=連合艦隊、…」のように秘匿したい単語をカナ3文字に対応(2文字目は単語の最初と同じ音にもなっている)させている。平文は「 艦隊見ユトノ警報ニ接シ、連合艦隊 直チニ出動、コレヲ撃沈 セントス、本日天気晴朗ナレドモ波高シ」となる。
  • 例3 真珠湾攻撃で使われた暗号文:「ニイタカヤマノボレ1208」(=12/8に日米開戦、事前に決めておいたフレーズを合図とした)。なお、「ト」の連打(=全軍突撃せよ)、「トラトラトラ」(=我、奇襲に成功せり)などもよく知られているが、正確には電信の短点連打音等の聞き分け易い音を合図としたものである。日本海軍機が搭載していたのは無線機電話機ではなく、無線電信機であったため、交戦時に複雑な電文の送信・聴取は困難なことから、和文電信で単純な符号の組み合わせなる(「ト」は短点3ツ、「ラ」は短点4ツを組み合わせて)、短点連打音(=全軍突撃せよ)、短点7ツの反復音(=我、奇襲に成功せり)を合図としたものである。
  • 例4 単語を暗号書(コードブック)で対応する数字に変え、さらに乱数表から一定の法則で抜き出した数字を加える暗号もある。復号には、暗号作成時に使用したものと同一の乱数表と暗号書が必要。太平洋戦争における日本海軍がこうした暗号を使用していた。

参考文献[編集]

一般的事項

  • 長田順行,「暗号」,社会思想社、1985
  • 桧山 良昭,「暗号を盗んだ男たち―人物・日本陸軍暗号史 」, 光人社NF文庫, 1993
  • 釜賀一夫, 「基礎暗号学―情報セキュリティのために (1)」, サイエンス社, 1989
  • Lambros D. Callimahos, William F. Friedman, "Military Cryptanalytics: Includes Problems and Computer Programs , Vol 2, No 45, Part 2", Aegean Park Pr, 1985
  • David Kahn, "The Codebreakers: The Story of Secret Writing", Scribner, 1996

解読理論と演習

  • William F. Friedman, "Solving German Codes in World War I ", Aegean Park Pr, 1979
  • Wayne G. Barker, "Cryptanalysis of an Enciphered Code Problem: Where an Additive Method of Enchipherement Has Been Used", Aegean Park Pr, 1979
  • British War Office, "Course in Cryptanalysis: Explanatory Text and Short Exercises/Si Course Vol 1", Aegean Park Pr
  • Army Records Society,"The British Army and Signals Intelligence During the First World War", Sutton Pub Ltd, 1992

商用コード

  • William F. Friedman, "History of the Use of Codes", Aegean Park Pr, 1977

実例

  • National Security Agency, "Nsa Reveals How Codes of Mexico Were Broken", Aegean Park Pr, 2000
  • National Security Agency, "VATICAN code systems", Aegean Park Pr
  • 陸軍参謀本部, 「陸軍暗号書 5号 昭和19年07月01日調製」, 1944 (靖国神社、靖国偕行文庫所蔵)

関連項目[編集]