コード (暗号)

コードとサイファ

（まず、コードとサイファ（cipher）の分類の概要について、暗号#概要 を参照のこと）
ここでそもそも、前述のような分類は、コンピュータの利用（暗号を運用する側だけでなく、攻撃側もまたコンピュータを利用できるということ）が前提となっている現代の暗号学より以前の、ロータリスイッチなどの電気機械による暗号機の時代の暗号学の頃に確立されているが、現代の理論から見て一応は、コードを“syllabic(音節) and lexical(語彙) cipher”などとしてサイファの一種と見なし理論的には扱うことは不可能ではない。しかし、暗号の長い歴史の中でサイファとは別系統のものとして独自の発展や進化を遂げてきており、（日本ではどちらも「暗号」にひっくるめてしまっており、codeとcipherを訳し分ける必要がある場合のための定訳といったようなものも無いが）英語圏他欧州も含め、codeとcipherという別の語があるように、別種のものとして（暗号学では）扱われている。
（現代の）サイファでは、秘密は鍵に集中するのであり、その方式を秘匿することによる強度上の利点は純粋な理論的には存在しない。そのため、むしろ広く暗号学界によってその方式に攻撃の研究が為されたほうが安全性が保証されたものになる、と言えるし、そうでなくとも広く使われている方式の暗号を利用したほうが、その暗号通信を「特徴のある通信」にしてしまうことを防げる。一方でコードは、その方式自体が秘密でなければならない。ただしもし、そのように定義するならば、コードは、現代の暗号学による狭義の現代暗号ではありえない（（狭義の）現代暗号とは、秘密が鍵のみに集中するような方式ということだから）ことになる。ケルクホフスの原理の記事も参照。
なお、英語 code は暗号化を目的としないものを含む（文字コード（character code）などの用例におけるcode）。その意味では、公開され市販もされていたようなコードブックというようなものもある（w:Commercial code (communications)）。そういったものを使う場合、必要であれば、それと別に秘密のコードブックも用意し、電報などでのやりとりには、さらにそちらで変換する。

また一種のコードと言えなくもないが、一種の乱数表のようなものとして、きちんとそのような目的のため設計されたもの（en:Random number book）ではなく、市販の辞書や聖書などの書籍をそのまま利用した暗号（規約さえ秘匿できれば、表自体は盗まれることの心配をしなくてよく、また自国以外で活動する諜報員には入手しやすさという利点もある）、フィクションでの例だがシャーロック・ホームズの「恐怖の谷」に登場するような暗号は「ブック暗号」という別の分類がある（英語版で記事名が en:Book cipher である通りサイファと扱われることもあるが（注に書いた通りそれに近い性格もある）、英語版の2017年10月現在の記事には「book ciphers are more properly called codes.」とあるように、コードと扱われることもある）。

PlaincodeとEnciphered code

enciphered codeは19世紀末から20世紀半ばまで外交および軍事暗号として広く利用された。これはplaincodeの通信文(時間)を圧縮できる長所を活かしながら、オーソドックスに強度を付加できる点にあった。
しかし高度に訓練された暗号手を必要としたのが欠点であり、機械式暗号が実現されると可及的速やかに置き換わった。

Plaincode

placode(プレイコード)やbasecode、生の(裸の)コードとも言う。コード換字のみで暗号化する。つまり一次式暗号である。
一般にコード、符牒、暗号書(一次暗号書)、codebook、repertory、cipher dictionay、word bookとはplaincodeを指す。
多くの場合plaincodeを丸暗記するのは現実的でない、それ故に暗号書を携帯、保管、配送する必要が生じる。plaincodeを組織的に丸暗記した例としてはコードトーカーがある。
Plaincodeの編纂においては利用する組織(企業、官庁、軍隊)のモラル、ドクトリン、知識が必ず反映される。よってPlainecodeを盗んで査読すると単に相手の通信文が読めるだけなく、計り知れない情報が推論できる。
企業の商用コードに「違法」や「賄賂」のコード語句が有れば、恐らくその企業は違法行為や贈賄をしているであろう。敵軍のコードに新兵器のコード語句があれば編纂当時に実用化されているだろう。味方の秘密兵器名がそのまま有れば当時から秘密が漏れているだろう。
たとえば、昭和19年に編纂した日本陸軍暗号書5号には「硫黄島」や「艦載機」の語句が当初採用されていなかった。つまり陸軍が硫黄島で戦い、（米海軍の）艦載機の攻撃を受けるとは想定していなかったことがわかる。

平文とコードを混ぜる場合

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

全てコードにする場合

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

スペルアウト

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

補遺

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

1冊制と2冊制

日本語訳から誤解しやすいが冊数自体というよりは、正確には「単表制」「2表制」とでも呼んだほうが暗号方式的には正しい（運用まで含めたシステム全体から見れば、表が分かれている場合、暗号化と復号のどちらか片方の作業は片方の1冊のみで行えるという運用上の点からは、2冊という表現も当を得ていないわけでもない）。英語の "alphabetical" と "randomized" という表現は、語の対応あるいは表の構成をあらわしていると言える。

ランダム化について

このような暗号が運用されていた時代には考案されていなかった現代のコンピュータで使われているアルゴリズムだが、フィッシャー–イェーツのシャッフルなどによってランダム化すれば良い。あるいは古くから使われていた手法としては、単語カードを作り、それを袋に入れてよくかき混ぜてから1つずつ取り出すとか、全ての語にあらかじめ乱数を割り振り、その乱数の値に従ってソートする、といったような手法がある。