鍵配送問題
鍵配送問題とは
暗号化/複合化処理において鍵を利用する場合、データの送受信者間で鍵を共有する必要があります。
鍵となるデータが漏洩してしまえば、どれだけ強固な暗号アルゴリズムを用いてもデータの秘匿性は無くなってしまいます。
いかにして安全に暗号鍵を送り届けるかという「鍵の配送手段」は暗号技術の課題となります。
鍵配送の方法
鍵の事前共有
鍵の事前共有とは、安全な(漏洩の可能性がない)方法で予め鍵を送信しておくことです。
例えば、送受信者が直接会って鍵を渡すことや、信頼できる者に配送を依頼するなどの方法が挙げられます。
しかし、この方法では必ず鍵の共有者に対する本人認証が必要であり、本人以外への鍵配送が発生すればセキュリティの確保は困難となります。
また、鍵が送受信者間で2つずつ必要であるため、参加者が多くなれば膨大な鍵を作成・管理しなければならなく、セキュリティの低下を防ぐ対策が必要になります。
ディフィー・ヘルマン鍵交換
ディフィー・ヘルマン鍵交換とは、盗聴の可能性のある通信路を使用する状況で、事前の秘密共有が無くても暗号鍵の共有を可能にする暗号プロトコルです。
送受信者間で他人に知られてもかまわない情報を交換した後に、それぞれが交換情報を基に共通鍵を生成します。
公開鍵暗号方式
公開鍵暗号方式を利用すれば、そもそも鍵交換が必要なくなるため、配送問題を解決できます。
ただし、公開鍵暗号方式は共通鍵暗号方式に比べて、演算処理が飛躍的に遅くなります。
詳細は公開鍵暗号方式を参照下さい。
ディフィー・ヘルマン鍵交換(Diffie-Hellman key exchange)
ディフィー・ヘルマン鍵交換とは
ディフィー・ヘルマン鍵交換とは、盗聴の可能性のある通信路を使用する状況で、事前の秘密共有が無くても暗号鍵の共有を可能にする暗号プロトコルです。
送受信者間で他人に知られてもかまわない情報を交換した後に、それぞれが交換情報を基に共通鍵を生成します。
一方向性関数について
ディフィー・ヘルマン鍵交換は、一方向性関数を利用した計算です。
一方向性関数は、順方向の計算は容易であるが逆方向の計算は難しいという特性を持っています。
DH法で用いられる一方向性関数は以下のものであり、Pにはできるだけ大きな素数を指定します。
G ^ x mod P = y
ディフィー・ヘルマン鍵交換の手順
計算手順は以下の通りです。
- 元となる数「G」と素数「P」を決定し、両者で共有する。
- ユーザ1は、秘密の数「x」を決めて「G ^ x mod P」の計算結果をユーザ2に送る。
- ユーザ2は、秘密の数「x」を決めて「G ^ x mod P」の計算結果をユーザ1に送る。
- ユーザ1は、受信した値「y2」を使用して、「(G ^ y2) ^x」を計算する。
- ユーザ2は、受信した値「y1」を使用して、「(G ^ y1) ^x」を計算する。
- ユーザ1とユーザ2の計算結果は同じ値になるので、これを秘密鍵に用いる。
実際に値を指定して計算すると、下記の通りになります。
(G = 3, P = 5)
user1:
x = 5
3 ^ 5 mod 5 = 243 mod 5 = 3
user2:
x = 6
3 ^ 6 mod 5 = 729 mod 5 = 4
user1:
(3 ^ 4) ^ 3 = 81 ^ 3 = 531441
user2:
(3 ^ 3) ^ 4 = 27 ^ 4 = 531441
GとPは両者で値を共有しておく必要がありますが、これは盗聴されても問題ありません。
なぜなら、盗聴者はGとPを知っても、通信者が持つ秘密数を知らない限り暗号鍵を知ることはできません。
「g, y, n が与えられたとき y = g ^ a mod n となる a を求めよ」という問題は離散対数問題と呼ばれ、素数nが大きければ大きいほど計算不可能になるため、強度の高い暗号化が可能です。