暗号方式の分類
暗号方式
暗号化とは,平文 (plaintext) と呼ばれるデータを鍵 (key) と呼ばれるデータを用いて暗号文(ciphertext) と呼ばれるデータに変換することをいい,鍵を持たない第三者はその暗号文を平文に戻すことができない(復号できない)仕組みを持ったものである.
従来は暗号化の仕組みそのものを秘密にして通信内容の機密性を確保していたが,ネットワーク上の標準暗号として誰もが利用できるように暗号化の仕組み自体も公開した DES (Data Encryption Standard) の登場以来,鍵のみを秘密にすれば,暗号化の仕組みを完全に公開しても安全である暗号が広く受け入れられている.アルゴリズムが標準化され公開されることにより,
- 暗号の仕様が明確に規定され,暗号が幅広い環境で利用できるようになる.そのため,多数の利用者で共有でき経済的である.
- 標準化する際には専門家が暗号の強度や安全性などを評価しているので,安心して利用できる.
- 暗号解読の状況が公開され,安全性への注意喚起なども適宜行われる.
- 暗号に trap door (設計者のみが知る秘密の仕掛け) がないことが確認できる.
などの利点がある.一方では,常に暗号攻撃の的にさらされることになる.
暗号化/復号の際に用いる「鍵」の性質や使い方によって,暗号方式は以下の 2つに大別される.
(注) ここでは,現代暗号を取り上げる.古典暗号を含む暗号アルゴリズム全体については,
暗号アルゴリズム を参照のこと.
- 共通鍵暗号 (対称鍵暗号,慣用暗号)
共通鍵暗号は,暗号化に用いる鍵と復号に用いる鍵が共通である暗号である. この場合,暗号化側と復号側では同じ鍵を第三者に知られないように事前に共有しておく必要がある (鍵自体は一般的には乱数データでよい). ネットワークを介して多くの人とこの方式で暗号通信を行おうとすると,それぞれの人との個別の鍵を設定/管理しなくてはならないのが問題である. すなわち,
n人が相互に暗号化通信を行うために必要な鍵数は,n人から 2人を選択する組合せ数と同じになり,
nC2 = n(n-1) / 2
の式で表される数が必要となる.
- 公開鍵暗号 (非対称鍵暗号)
公開鍵暗号は,公開鍵と秘密鍵という異なる2つの鍵を用意しておき, 暗号化の際には公開されている通信相手(復号者)の公開鍵を用い, 復号には自分の秘密鍵を用いる.このため,事前に鍵を共有する必要がなく,自分の秘密鍵のみを秘密にしておくだけでよい. ここで,公開鍵と秘密鍵はある数学的な関係 (一方向性)を持った数値であり,暗号アルゴリズムに基づき生成されるものである.この一方向性を実現する代表的な数学上の問題として,
が公開鍵暗号の基盤として多く用いられている.
公開鍵暗号では,
n人が相互に暗号化通信を行うために必要な鍵数は,2n 個となる.
両者の暗号方式を比較すると,鍵の管理の面からは公開鍵暗号のほうが優れているように思えるが,一般に共通鍵暗号のほうが公開鍵暗号よりもはるかに高速なものが多いため,メッセージの暗号化には共通鍵暗号を用い,事前の共通鍵の共有は公開鍵暗号を利用して行われる場合が多くなっている.
公開鍵暗号では,データの暗号化の他にディジタル署名や鍵交換などの機能を実現することができる.
- ディジタル署名
秘密鍵を使い文書にディジタル署名を添付する.確かに本人が作成した文書であることを証明できる(自分が作成したものでないとの否認もできない).ディジタル署名の確認 (検証) は,秘密鍵に対応した公開鍵で誰でも行える.
- 鍵共有(鍵交換)
通信相手の公開鍵と自分の秘密鍵を使って,自分と通信相手の双方で共通の情報が生成できる.SSLなどの暗号通信における共通鍵暗号用の鍵の生成に使われる.
共通鍵暗号と公開鍵暗号の比較
共通鍵暗号方式と公開鍵暗号方式の特徴を以下に示す.
- 共通鍵暗号方式の特徴
- 利点
- 鍵はランダムに生成できる (鍵長は比較的短い).
- 同一アルゴリズムであれば,解読の困難性は鍵長に比例する.
- 計算量が少なく高速である (演算が単純).
- 専用のハードウェアの開発が比較的簡単であり低コストである.
- 欠点
- 通信前に相手と秘密の鍵を共有する必要がある.
- 鍵が共有されるため,ある暗号文を作成したのが鍵所有者の誰かは特定できない.
- 鍵が通信相手対応に必要であるため,通信相手が増えると鍵の数が増えその管理が必要になる.
- 公開鍵暗号方式の特徴
- 利点
- 鍵の配送が不要である (公開鍵の参照).
- 鍵の管理が簡単である (自己の秘密鍵のみ管理).
- ディジタル署名,認証に応用できる.
- 欠点
- 特別な数学的な演算が必要なため,共通鍵暗号に比べて処理が複雑で低速である.
- 秘密鍵,公開鍵は,ある特定の条件に従って生成する必要がある(安全性に影響する).
- 公開鍵の正当性の保証が必要である.
- 暗号通信による相手認証はできない (公開鍵で暗号化).