インターネットの安全を実現する鍵交換技術

2.1. 通信の秘密を守る暗号技術 | 2.3. 成り済ましを防ぐ認証付き鍵交換

2.2. 鍵交換の基本技術

秘密にしたい文書(情報)は、暗号化して相手とやりとりすることで、第三者に秘密を漏らす心配を無くすことができる、ということを前節では説明しました。そして、暗号化には「鍵」が必要だということも説明しました。実際の暗号通信においては、通信を行う当事者間でどのようにして安全に鍵を受け渡すのかが重要になります。ここでは、安全に鍵を受け渡す鍵交換の基本技術について説明します。


2.2.1. 公開鍵暗号を用いた鍵交換

共通鍵暗号アルゴリズムを用いて暗号化や復号を行うには、共通の秘密鍵を用いなくてはなりません。すなわち、太郎君と花子さんは同じ鍵を持っている必要があるのです。ここで問題になるのは、通信したい相手とどうやって鍵を秘密裏に共有したらよいかということです。

公開鍵暗号方式の場合、秘密鍵を事前に共有しておく必要はありませんが、一般に公開鍵暗号は処理に時間がかかるため、通常のデータの暗号化にはあまりもちいられることはありません。そこで、メッセージの暗号化には、セッション鍵(共有秘密鍵)による対称アルゴリズムを用い、セッション鍵を安全に配送するために、公開鍵暗号方式を用いるというハイブリッドなシステムが考えられます。

次のような手順を考えてみましょう。

  1. 太郎が花子に自分の公開鍵を送る
  2. 花子がランダムなセッション鍵Kを作り、それを太郎の公開鍵を使って暗号化して、太郎に送る
  3. 太郎が自分の私有鍵を使って、花子のメッセージを復号し、セッション鍵を得る。
  4. 両者が自分たちの通信を同じセッション鍵を使って暗号化する。

このようにすることで、太郎と花子は安全に秘密鍵を共有することができます。

花子がセッション鍵を作成し、太郎の公開鍵を用いて暗号化して太郎に送ることで、太郎は自身の私有鍵で複合しセッション鍵を共有することとなります。

図2-4 太郎と花子の鍵交換の図

2.2.2. 公開情報から秘密の鍵を作るDH鍵交換

前節で説明した鍵交換のやり方は、太郎か花子のどちらか一方が秘密のセッション鍵を作って相手に送る、というものでした。ここでは別の方法として、双方が鍵の素材を作って、それをお互いに送る、という方法を検討してみることにします。

  1. 太郎はnを花子に送る
  2. 花子はmを太郎に送る
  3. K = n × mを鍵とする

こうすることで、太郎と花子は、共通の鍵Kを得ることができます。ただし、このような単純な方法だと、盗聴者がnとmの値を盗みみてしまった場合、容易に鍵Kを得ることができてしまいます。DH(Diffie-Hellman)鍵交換は、離散対数問題と呼ばれる問題を解くことが難しい、という性質を利用して、盗聴者に鍵の素材がばれてしまっても、そこから鍵を推測することが困難となるような鍵交換方式です。

DH鍵交換には、p、g、x、yという4つの値が登場します。これらのうち、pとgは公開しても大丈夫な値で、xは太郎だけ、yは花子だけが知っている値です。これを踏まえて、DH鍵交換の例を見てみましょう。

  • p = 17とする
  • g = 3とする(Z/Zpの生成元)
  1. 太郎:0~16までの数(mod 17)を1つ選ぶ: x = 9
  2. 花子:0~16までの数(mod 17)を1つ選ぶ: y = 12
  3. 太郎はA = 3^x mod 17 = 14 を花子に送信
  4. 花子はB = 3^y mod 17 = 4 を太郎に送信
  5. 太郎は、K_A = B^x = 4^9 mod 17 = 4を計算して共有鍵を得る
  6. 花子は、K_B = A^y = 14^12 mod 17 = 4を計算して共有鍵を得る

盗聴者は、p,gを知っていたとして、その上でたとえAとBを盗聴されても、xとyを計算するのは困難です。与えられたpとgとAから、A=g^x mod pを満たすようなxを計算する必要がありますが、これは、離散対数問題と呼ばれていて、たとえ計算機を使ったとしても現実的な時間内で解くのが非常に困難だと考えられているからです。

DH鍵交換では、セッション鍵の元となる情報を送り合って、それを用いて互いにセッション鍵を作成することで、セッション鍵を共有することとなります。

図2-5 太郎と花子のDH鍵交換の図

無料小冊子のお申込みはこちら

株式会社システム計画研究所のオフィシャルサイトはこちら

当サイトへのご質問及び安全・安心・信頼のシステム開発に関するご相談はこちら

通信・ネットワークシステムの開発マネージメント情報サイト「通信・ネットワークシステム開発.COM」はこちら

サーバ監視・ネットワーク監視ツール isNetSentry-S のサイトはこちら