暗号
暗号(あんごう、cryptography、cipher、code)あるいは暗号化(あんごうか、Encryption)とは、第三者に通信内容を知られないように行う特殊な通信(秘匿通信)方法のうち、通信文を見ても特別な知識なしでは読めないように変換する表記法(変換アルゴリズム)のことである。通信だけでなく保管する文書等の内容を秘匿する方法としても用いることができる。
概要
秘匿通信には、主に次の3種類の方法がある。
- ステガノグラフィ 通信文を人目に付かない場所に記録する。画像などに情報を埋め込む電子透かしなど。また掲示板でよく見かける縦読みも一見して普通の文章の中に見えるためステガノグラフィーの一種と言える。
- コード 通信文の単語やフレーズを、事前に決めておいた言葉・記号で置き換える。これらは符牒や隠語とも呼ばれる。
- サイファ 通信文を、意味とは関係なく、所定のアルゴリズムに従って、(1つまたは複数の)文字やビットごとに置換や転置を行うことで、読めない文に変換する。
秘匿通信を行う上で最も単純な方法は、(1)の通信文そのものの所在を隠してしまうことである。歴史上実際に行われたものとしては、通信文を丸めて飲み込んだり、ベルトの内側に書き普通の被服のように身につけたり、新聞の文字に印(文字横に穴を開ける等)をつけて文章を作る、頭を剃りあげて頭皮に通信文を刺青し、再び頭髪が生えそろうことで隠す、などもあったようである。
(2)の事前に「○◇△といえば、~のこと」等と事前に取り決めておくことで秘匿することも行われた。個人間で行うものから組合やギルド等の特定のグループ内で行うものがある。事前の取り決めではなく、特定の人達だけが知る事項などを元に、意味は同じままで、言い方を変えることで秘匿することもある。秘匿したい特定の単語だけ置き換えることも、コードブックと呼ばれる辞書を作成して、全ての単語を置き換えることもあり、「ルイ14世の大暗号」、「ナポレオンの小暗号」などが知られている。しかし、(2)のコードは、歴史的な使用例は幾つか知られているが、現代の通信技術での使用例はあまり知られていない。コードという言葉自体は「圧縮」や「誤り訂正」の目的で使われるコード(符号)や、認証用のコード (MAC) などで使用されている。
秘匿通信を行う方法としては(特に第二次世界大戦後は)、(3)のサイファが主流である。
戦時下における作戦や命令を敵に知られると作戦の裏をかかれて文字通り致命的な結果を招くことになるなど、第三者に通信内容を知られては困ることがある。暗号はそのような場合に独特の表記法を使って通信文を変換することによって、第三者が通信文を盗み見ても意味が分からないようにする為に考案され、主に戦時下において軍事技術の一つとして発達してきた。 初期の暗号は、安全性が不確かなものも多く、使用中に解読され、その場しのぎに改良を試みるものの、更に巧妙な手口によって破られてしまうといった、イタチごっこに陥る事もあった。 暗号の歴史については暗号史を参照。
この記事では、主に(3)の解説を行い、(2)にもふれることにする。また、暗号技術は、秘匿通信に限らず、相手の身元を確認する認証や改竄の検出にも応用され、貨幣の偽造防止技術への応用も研究されている。これらについては電子署名、認証、ハッシュ関数、電子マネー等を参照。
なお、暗号化に対応する単語は「復号」であり、「~化」とは表現しない。
種類
暗号には様々な方式があるが、現存する暗号は主に下記のように分類することができる。
暗号(サイファ)の分類
- 古典暗号 - 暗号化・復号に鍵の概念を使わないものもある。
- 現代暗号 - 鍵を使い、アルゴリズムを公開したものが多い。
鍵を使わない方法は、一度敵に知られた方法は二度と使えない、暗号の信頼性を客観的に評価することができないなどの問題がある。例えば、シーザー暗号(古典暗号の一つ)は、暗号化・復号の表記法が秘密でなければ安全性が保てなかった。 それに対し鍵を使う方法は、アルゴリズム自体を敵に知られても構わないような方法が目標であり、一度考案した方法は、鍵を変えることで何度でも使える、アルゴリズムを広く公開することで信頼性を十分に検討することができるなどの多くの利点がある。 近代になると、このように鍵のみを秘密にしていれば暗号化・復号の方法を皆に公開した場合でも安全を保てることが暗号にとって望ましい目標である(ケルクホフスの原理)と認識され、現代暗号では鍵を使うものが主流となった。 さらに現代暗号では、暗号化・復号の方法だけではなく、暗号化の鍵を公開しても安全性が保てる方式(公開鍵暗号)も扱う。 変わったところでは、少数民族の言葉などほとんど知られていない言葉をそのまま、あるいはそれをさらに暗号化して使うというのもある。日本でも、かつて早口の薩摩弁が使われたことがある。
具体的な暗号方式の一覧は、主な暗号の分類と一覧を参照。
暗号(サイファ)の例
- 古典暗号:
- 現代暗号:
参考:コードの例
- 例1 ルイ14世の大暗号(ロシニョールが作成): コードブックは「act=486、ion=102、…」のように音節単位で3桁の数に対応させる(600個程ある)。暗号文「486-102」を復号すると act-ion になる。19世紀末フランス軍の暗号解読者バズリが解読を発表した。
- 例2 日露戦争で使われた暗号文:「アテヨ イカヌ ミユトノケイホウニセツシ、ノレツ ヲハイタダチニヨシスコレヲワケフ ウメルセントス、ホンジツテンキセイロウナレドモナミタカシ」。コードブックは「アテヨ=敵、イカヌ=艦隊、ノレツ=連合艦隊、…」のように秘匿したい単語をカナ3文字に対応(2文字目は単語の最初と同じ音にもなっている)させている。平文は「敵 艦隊見ユトノ警報ニ接シ、連合艦隊 は直チニ出動、コレヲ撃沈 滅セントス、本日天気晴朗ナレドモ波高シ」となる。
- 例3 真珠湾攻撃で使われた暗号文:「ニイタカヤマノボレ1208」(=12/8に日米開戦、事前に決めておいたフレーズを合図とした)。なお、「ト」の連打(=全軍突撃せよ)、「トラ」の反復(=我、奇襲に成功せり)などもよく知られているが、正確には電信の短点連打音等の聞き分け易い音を合図としたものである。日本海軍機が搭載していたのは無線機電話機ではなく、無線電信機であったため、交戦時に複雑な電文の送信・聴取は困難なことから、和文電信で単純な符号の組み合わせとなった。
- 「ト」は短点3ツ(…)、「ラ」は短点4ツ(‥‥)、区切りの無音間隔(_)を組み合わせて、
- 短点連打音([ト][ト][ト][ト]・・・= …………・・・=全軍突撃せよ)
- 短点7ツの反復音([トラ]_[トラ]_[トラ]_・・・= …‥‥_…‥‥_…‥‥_・・・=我、奇襲に成功せり)
- を合図としたものである。
- ちなみに陸軍のマレー作戦の暗号は「ヒノデハヤマガタ」である。
- 例4 単語を暗号書(コードブック)で対応する数字に変え、さらに乱数表から一定の法則で抜き出した数字を加える二部制の暗号もある。復号には、暗号作成時に使用したものと同一の乱数表と暗号書が必要。太平洋戦争における日本海軍がこうした二部制の暗号を使用していた。
実装
初期の古典暗号は、多くは紙と鉛筆のみで暗号化を行うが、多少の道具を用いるものもあった。暗号解読の進歩により単純な暗号では安全ではなくなると、複雑な処理を自動化するための機械が発明された。
- 棒
- 紀元前5世紀、古代ギリシアで、特にスパルタにてスキュタレー σκυτάλη と呼ばれる棒が暗号に使用された。同じ太さの棒を2本用意し、送信者と受信者が各々所持する。送信者は右図のように棒にテープを巻きつけて平文を横書きする。するとテープには平文の文字が飛び飛びに記されることになる。棒からテープを外してテープのみを受信者に送る。転置式暗号の一種である。暗号強度は決して高くないが、転置の際の書き間違い・読み間違いを回避できる手段である。
- 円盤
- 15世紀、アルベルティの考案した暗号円盤が最古のものとされる。大小2枚の円盤からなり、内側の円盤を回転させて平文・暗号文の対応を決める。位置を固定して暗号化・復号を行うとシーザー暗号となり、一文字毎に位置をずらすと多表式暗号となる。南北戦争でも使用された。ローター式暗号は多段に接続した暗号円盤を機械化したものともいえる。
- カード
- 16世紀、ジェロラモ・カルダーノが穴をあけたカード(カルダングリルと呼ばれる)を使って作成する分置式暗号を考案している。
- 換字表
- 多表式暗号を行う際のツールとして使用。トリテミスの換字表あるいはヴィジュネルの表として知られる。
- ブック
- コードの対応表(略号集、ノーメンクラタ)や乱数表などを記載するのに使った。鍵フレーズを指定するために聖書や辞典が使用されることもあった。MI5が捕まえたスパイが所持していたとされる乱数表は、指サイズの小型のもので多数の数値が印刷されている。
- 輪
- 18世紀末、ジェファーソンが考案し、後にバセリも再発明している。ホィール(ディスク)、ストリップ、ロッドなど様々な形状をした暗号器が考案されている。M-94、M-138A(アメリカ)、REIHENSCHIEBER(ドイツ)など実際に使用された。
- 機械式
- 20世紀になると、エニグマ(ドイツ)、パープル(日本)、M-209、M-325、SIGABA(アメリカ)、NEMA(スイス)、TypeX(イギリス)など機械式の暗号装置が開発され、特に第二次世界大戦中に各国で使用された。
- 計算機
- コンピュータの進歩と普及により、ハードウェアだけではなく、ソフトウェアでも暗号が実装できるようになった。
- 一般的なコンピュータでの具体的な実装例としては、Internet ExplorerやSafariなどのブラウザに実装されているTLS上で提供される共通鍵方式暗号化機能、オープンソースソフトウエアのGnuPGで提供される公開鍵暗号方式のファイル暗号化・メール暗号化や、TrueCryptでの暗号化仮想ディスクソリューションなどが有名である。また、LinuxにおいてはLUKS(en)のようシステムディスクそのものを暗号化する実装もある。その他、企業などでは有償の高度な暗号化ソリューションが使われていることも多い。
- また、企業などの拠点間通信をインターネット上を経由させるときに盗聴や改ざん等を防ぐため、VPNでは(ソフトウエアとハードウエアの両面で)暗号化もサポートされている。
用語
暗号で用いられる用語。暗号理論の用語も参照。
- 平文 (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、などが多い。
参考文献
書籍
- 書籍については暗号関係の書籍の一覧を参照。
論文
- 「A method for obtaining digital signatures and public-key cryptosystems」MIT/LCS/TM-82 April 1977(RSAの原論文。表紙込み16ページ。日経エレクトロニクスに全訳有り。現代の暗号技術全般を網羅する古典)