暗号

暗号（あんごう）とは、セキュア通信の手法の種類で、第三者が通信文を見ても特別な知識なしでは読めないように変換する、というような手法をおおまかには指す。いわゆる「通信」（telecommunications）に限らず、記録媒体への保存などにも適用できる。 秘匿通信を行う上で最も単純な方法は「木を隠すなら森」という諺のごとく、通信文そのものの所在を隠してしまうことである。歴史上実際に行われたものとしては、通信文を丸めて飲み込んだり、ベルトの内側に書き普通の被服のように身につけたり、新聞の文字に印（文字横に穴を開ける等）をつけて文章を作る、頭を剃りあげて頭皮に通信文を刺青し、再び頭髪が生えそろうことで隠す、などもあったようである。「暗号らしい手法」としては「ステガノグラフィー」といい、「それとはわからないような形で」記録する、というものである。画像などに情報を埋め込む「電子透かし」にも同じ技術を利用するが、電子透かしではその画像の著作権情報などといった関係のある情報を埋め込むのが目的であるのに対し、ステガノグラフィーは全く無関係な情報を秘密のうちに紛れ込ませる、という点が異なる。またいわゆる縦読みなども一見して普通の文章の中に見えるためステガノグラフィーの一種と言えなくもない。 広義では以上のような方法も暗号に含まれるし暗号学が探求する対象であるが、狭義では、その見た目が「なんだかわからない」という、難読であると明確なものを指して特に暗号に分類する（なお、暗号化された通信文（暗号文）については理論上、他からの「それが暗号である」という情報が無ければ、ただのデタラメと全く区別が不可能であるのが理想である）。 狭義の暗号は、古典的には主要な分類に、以下の2つがある。 「コード」 通信文内の、単語やフレーズといったある程度意味のある塊の単位で、あらかじめ取り決めてある記号と交換する。 「サイファー」 通信文に対し、意味とは関係なく、文字毎の（最小の）単位で、あらかじめ取り決めてある置換や転置を掛ける。 「コード」は一般に、軍の運用に必要なものなど、ある程度の（あるいは膨大な）語彙について秘密の記号群を決めておくものであるが、「討ち入り」「開戦」などといった特定の重要な件のみについて、「○◇△といえば、～のこと」等と事前に取り決めておくことで秘匿することも行われた。個人間で行うものから組合やギルド等の特定のグループ内で行うものがある。事前の取り決めではなく、特定の人達だけが知る事項などを元に、意味は同じままで、言い方を変えることで秘匿することもある。秘匿したい特定の単語だけ置き換えることも、コードブックと呼ばれる辞書を作成して全ての単語を置き換えることもあり、歴史的な例としては、前者は「スコットランド女王メアリーの暗号」、後者は「ルイ14世の大暗号」や「ナポレオンの小暗号」などが知られている。 「サイファー」は、機械化以前は一般に作業手数が大きいといった欠点があったが、機械化以後はサイファーが主流の暗号である。機械化に次いで、暗号のコンピュータ化（あるいは、コンピュータの暗号化）の時代となったが、それらの暗号も、だいたいサイファーに分類するのが妥当であろう。 また以上のようなセキュア通信のための狭義の暗号に限らず、相手の身元を確認する認証や改竄の検出、貨幣の偽造防止技術、電子署名、認証、ハッシュ関数、電子マネーその他、情報セキュリティの多くの局面で、暗号はキーテクノロジとなっている。 なお、暗号化の逆の操作を表す語は「復号(英語: decryption)」であり、本来符号化に対するそれ(英語: decode)同様「～化」とはしないが、「復号化」という誤用はかなり広く定着している。 まず、古典的な暗号と現代的な暗号を分けるものとして、ケルクホフスの原理がある。現代的な暗号理論よりも前の時代には、暗号の「方式」と「鍵」の識別は明瞭ではなかったし、そのどちらも秘匿されねばならぬものであった。すなわち攻撃側の視点からは、方式がわかってしまえば、それによって、鍵を得ることも容易になってしまうのであった。現代の暗号は、秘密は鍵に集中しており、その方式はむしろ公知のものであったほうが、その強度なども広く研究されているために、むしろ安全である。 鍵を使わない方法は、一度敵に知られた方法は二度と使えない、暗号の信頼性を客観的に評価することができないなどの問題がある。例えば単純なシーザー暗号は、方式自体がバレないようにしなければ安全性が保てないほど脆弱であるし、ある程度の量の暗号文があれば何百年以上も前からある頻度分析という手法によって方式自体もバレてしまう。それに対し鍵を使う方法は、アルゴリズム自体を敵に知られても構わない方式を目標としており、一度考案した方式は鍵を変えることで何度でも使える、アルゴリズムを広く公開することで信頼性を十分に検討できる、などの多くの利点がある。 近代以降になると、このように「鍵さえ秘密にしていれば暗号化・復号の方法を公開しても安全が保てる」ことが暗号にとって望ましい性質であることが明確化された（ケルクホフスの原理）。 古典暗号の時代の「サイファー」の主要な2種類は、以下の二つである（暗号システムとしては、他にも多種多様なものが考案された）。 換字式暗号 - ある文字に別の文字を割り当てる。単一換字、多表式換字などがある。 転置式暗号 - 文字の順序を並べ替える。 上の2つの分類は、現代暗号でもなんら変わるものではないが、現代的には次のような暗号の分類がある。このうち前者の共通鍵暗号は、分類としては古典暗号時代からなんら変わらぬ暗号の方式であって、「現代暗号の分類」とするのはむしろおかしいのだが、後者との対比としてしばしば挙げられるものである。後者の公開鍵暗号は、暗号をその時代の最新の数理で検討するようになった現代暗号ならではの暗号と言える。 共通鍵暗号 - 暗号化・復号で同じ鍵を使う。 公開鍵暗号 - 暗号化・復号で異なる鍵を使う。 近代以降、前述のように、秘密は鍵に集中すべきことから、暗号の問題は鍵の配送（共有）にあることが明確になった。暗号系を含む全体を通信システムとして検討したならば、そもそもそのような「鍵」をやりとりできるほどに安全な通信路があるならば、その通信路で本文も通信してしまえば良いからである。この問題には、公開鍵暗号方式の発明によって一応の決着が付いた。すなわち、公開鍵暗号であればその非対称なペアになっている鍵のうちの片方は秘密ではないため、配送の問題が生じないからである。ただし通常は計算量の理由から、公開鍵暗号を本文の暗号通信に直接使うことはせず、公開鍵暗号を利用した安全な鍵交換方式によって共通鍵を安全に交換し、その鍵によって共通鍵暗号通信をおこなう。 コードやサイファーのような記号による暗号ではなく、スクランブル（信号の切り混ぜ）といったアナログ技術による広義の暗号システムとしては、かつてアナログ電話の時代に盛んに研究されたものがある。秘話の記事を参照。 さらに、より「アナログ」な事例としては、少数民族の言語や方言などによる、相手側が仮に傍受しても瞭解が不可能な会話を利用したものがある。太平洋戦争での事例として、アメリカ側はナバホ語による通話を利用し（コードトーカー）、日本側は薩隅方言による通話を利用した。 具体的な暗号方式の一覧は、暗号理論を参照。 ルイ14世の大暗号（ロシニョールが作成）： コードブックは「act=486、ion=102、…」のように音節単位で3桁の数に対応させる（600個程ある）。暗号文「486-102」を復号すると act-ion になる。19世紀末フランス軍の暗号解読者バズリが解読を発表した。 日露戦争で使われた暗号文：「アテヨ イカヌ ミユトノケイホウニセツシ、ノレツ ヲハイタダチニヨシスコレヲワケフ ウメルセントス、ホンジツテンキセイロウナレドモナミタカシ」。コードブックは「アテヨ=敵、イカヌ=艦隊、ノレツ=連合艦隊、…」のように秘匿したい単語をカナ3文字に対応（2文字目は単語の最初と同じ音にもなっている）させている。平文は「敵 艦隊見ユトノ警報ニ接シ、連合艦隊 は直チニ出動、コレヲ撃沈 滅セントス、本日天気晴朗ナレドモ波高シ」となる。 真珠湾攻撃で使われた暗号文：「ニイタカヤマノボレ1208」（＝12/8に日米開戦、事前に決めておいたフレーズを合図とし、更に1文字ごとに五連数字に換えた）。なお、「ト」の連打（＝全軍突撃せよ）、「トラ」の反復（＝我、奇襲に成功せり）などもよく知られているが、これらは正確には電信(モールス符号)の聞き分け易い音を合図としたものである。日本海軍機が搭載していたのは無線電話機(音声通信)ではなく、無線電信機(モールス符号通信)であった（航空通信に無線電話が導入されるのは1950年代に入ってから）ため、交戦時に複雑な電文の送信・聴取は困難なことから、和文電信で聞き取りやすい符号の組み合わせとなった。 「ト」は(･･―･･)、「ラ」は(･･･)で、 [ト][ト][ト]...＝･･―･･ ･･―･･ ･･―･･...＝全軍突撃せよ） [トラ][トラ][トラ]...＝･･―･･ ･･･　･･―･･ ･･･　･･―･･ ･･･　...＝我、奇襲に成功せり） を合図としたものである。 ちなみに陸軍のマレー作戦の暗号は「ヒノデハヤマガタ」である。 単語を暗号書（コードブック）で対応する数字に変え、さらに乱数表から一定の法則で抜き出した数字を加える二部制の暗号もある。復号には、暗号作成時に使用したものと同一の乱数表と暗号書が必要。太平洋戦争における日本海軍がこうした二部制の暗号を使用していた。 初期の古典暗号は、多くは紙と鉛筆のみで暗号化を行うが、多少の道具を用いるものもあった。暗号解読の進歩により単純な暗号では安全ではなくなると、複雑な処理を自動化するための機械が発明された。 棒 紀元前5世紀、古代ギリシアで、特にスパルタでスキュタレー (σκυτάλη) と呼ばれる棒が暗号に使用された。同じ太さの棒を2本用意し、送信者と受信者がそれぞれ所持する。送信者は右図のように棒にテープを巻きつけて平文を横書きする。するとテープには平文の文字が飛び飛びに記されることになる。棒からテープを外してテープだけを受信者に送る。転置式暗号の一種である。暗号強度は決して高くないが、転置の際の書き誤り・読み誤りを回避できる手段である。 円盤 15世紀、アルベルティの考案した暗号円盤が最古のものとされる。大小2枚の円盤からなり、内側の円盤を回転させて平文・暗号文の対応を決める。位置を固定して暗号化・復号を行うとシーザー暗号となり、1文字ごとに位置をずらすと多表式暗号となる。南北戦争でも使用された。ローター式暗号は多段に接続した暗号円盤を機械化したものともいえる。 カード 16世紀、ジェロラモ・カルダーノが穴をあけたカード（カルダングリルと呼ばれる）を使って作成する分置式暗号を考案している。 換字表 多表式暗号を行う際のツールとして使用。トリテミスの換字表またはヴィジュネルの表として知られる。 ブック コードの対応表（略号集、ノーメンクラタ）や乱数表などを記載するのに使った。鍵フレーズを指定するために聖書や辞典が使用されることもあった。MI5が捕まえたスパイが所持していたとされる乱数表は、指サイズの小型のもので多数の数値が印刷されている。 輪 18世紀末、ジェファーソンが考案し、後にバセリも再発明している。ホィール（ディスク）、ストリップ、ロッドなど様々な形状をした暗号器が考案されている。M-94（アメリカ陸海軍、1922年から1942年ごろ）、M-138A（アメリカ陸海軍・沿岸警備隊・国務省、1935年から1941年ないし1942年）、Reihenschieber（ドイツ連邦軍、1956年から1960年代）など実際に使用された。 暗号機械 20世紀になると、エニグマ（ドイツ）、パープル（日本）、M-209、M-325、SIGABA（アメリカ）、NEMA（スイス）、TypeX（イギリス）など機械式の暗号装置が開発され、特に第二次世界大戦中に各国で使用された。 コンピュータ 「電子化された暗号機械」に分類されるようなものなどもあるが、歴史的にごく一時期のものであるためここでは略す。コンピュータ・プログラムは、何らかの情報処理機械のソフトウェア実装である、と見ることができる（チャーチ＝チューリングのテーゼ）。すなわち、暗号のプログラムは暗号機械のソフトウェア実装であるとも言える。のどかな時代には、実際にエニグマ暗号機の方式をそのままコンピュータ・プログラムにしたようなものも使われていたりしたこともあったが（詳細は en:Crypt (Unix) を参照）、1970年代以降は、現代的な暗号として前述したような公開鍵暗号であるRSAや、共通鍵暗号ではDESなどがある。攻撃側（暗号解読側）が最新鋭のコンピュータの計算力を利用できると仮定しても、計算量的に安全でなければならない、という考えかたが基本となった。 暗号で用いられる用語。暗号理論も参照。 平文[ひらぶん] (plaintext) 暗号化される前の文。 暗号文 (ciphertext) 平文を、独特の表記法によって第三者が読み解けないようにした通信文。 鍵 (key) 表記法のパラメータ。表記法によっては鍵はないこともある。鍵が異なると平文が同じでも暗号文が異なる。 平文空間 平文全体の集合 暗号文空間 暗号文全体の集合 鍵空間 鍵全体の集合 セキュリティパラメータ (security parameter) 暗号の安全性を表す尺度。鍵のサイズなどを指定する。 暗号化 (encryption; encode, encipher) 表記法に従って平文を暗号文に変換すること。 復号 (decryption; decode, decipher) 表記法に従って暗号文を平文に戻すこと。 攻撃 (attack) 暗号化に用いられた表記法の特定あるいは鍵を探索する行為。または鍵を用いずに暗号文を平文に戻すこと。解読ともいう。暗号の方式によって様々な攻撃法が考案されている。暗号の攻撃法も参照。 暗号解読 (cryptanalysis) 受信者以外の第三者が暗号文を通信文に戻そうとすること。 共通鍵 (common key; symmetric key) 共通鍵暗号において、暗号化にも復号にも用いられる鍵。暗号化側と復号側が同じものを持っている必要があり、鍵を共有する過程で盗聴された場合に通信の秘密はまったく保てなくなる。秘密鍵ということもある。 公開鍵 (public key) 公開鍵暗号において、暗号化に使用する鍵。暗号化鍵とも言う。復号側が持つ秘密鍵と対になった鍵が必要で、復号側はあらかじめ自分の公開鍵を暗号化側に通知しておく（公開する）ことから公開鍵と呼ばれる。 秘密鍵 (private key) 公開鍵暗号において、復号に使用する鍵。復号鍵とも言う。復号側だけがこのデータを持っている（秘密にする）ことから秘密鍵と呼ばれる。（秘密の共通鍵にたいして）私有鍵ということもある。公開鍵から秘密鍵を推測することが非常に困難（事実上不可能）である暗号法を選択する必要がある。 なお、公開鍵暗号においては、公開鍵の代わりに秘密鍵を使って暗号化を施すと、それによって生成された暗号文は、対応する公開鍵によってのみ復号できる。すなわち、ある公開鍵によって暗号文が復号できたことは、当該公開鍵に対応する秘密鍵の持ち主によって暗号文が作成されたことの推定となる。これが電子署名の基本原理となっている。 鍵ペア (key pair) 秘密鍵と、対応する公開鍵とからなるペアの事。同時に生成される。 鍵交換 (key exchange) 共通鍵暗号において、公開鍵暗号方式などを用いて暗号化側と復号側が共通鍵を共有すること。大量のデータをすべて公開鍵暗号で送受信しようとすると計算量が膨大になることから、全文の送受信は比較的簡便な共通鍵暗号で行うこととし、そのための鍵をまず公開鍵暗号方式で共有する、という方法が広く採用されている。 この際、鍵配布センター (KDC) などの信用できる第三者機関を利用する集中型と、各人が秘密の値と通信データを用いて共有の鍵を生成する分散型がある。鍵配送 (key distribution) 、鍵共有 (key agreement) ともいうが、集中型のことを鍵配送、分散型のことを鍵共有として両者を含めて鍵交換とする場合など、区別する書籍もある。 オラクル 入力に対して出力が得られる関数のようなもの。オラクルを必要とするモデルで使用される。 アリスとボブ (Alice and Bob) 暗号理論に登場するプレイヤーはAからアルファベット順に並ぶことが一般的であり、論文では通常Alice、Bobが使われる。これはRSA暗号が発表されたときのプレイヤー名にもとづく。C以降は様々だが、Catherine、Carol、Charlie、などが多い。