ディフィー・ヘルマン鍵共有
ディフィー・ヘルマン鍵共有は
暗号キーの共有を実現するための公開鍵プロトコルです。この手法では、事前に秘密情報を共有することなく、潜在的に
盗聴される通信路を用いて
暗号鍵を安定して交換することができます。生成された鍵は共通鍵
暗号方式の鍵として使用されます。ここでは典型的な方法や使用する数学的原理について詳しく解説します。
概要
このプロトコルは、
1976年にスタンフォード大学の研究者である
ホイットフィールド・ディフィーと
マーティン・ヘルマンによって提案されました。彼らは公開鍵
暗号の概念を作り上げ、その具体的な実装の一つとしてディフィー・ヘルマン鍵共有を発表しました。この方式は特に共通鍵
暗号方式における鍵の安全な受け渡しを可能にしました。
このプロトコルでは、通信を行う二者がそれぞれ自分専用の公開鍵と秘密鍵を作成し、公開鍵を互いに送信します。そして、各者は自分の秘密鍵と相手から受信した公開鍵を使って共通の
暗号鍵を生成します。重要なのは、この方法では第三者が通信内容を傍受しても、秘密鍵や共通鍵を生成することができないため、高い安全性が確保される点です。
アメリカと
カナダではこのアルゴリズムの
特許が取得されていましたが、
特許の有効期限は1997年に切れており、現在では誰でも自由に利用できる状態となっています。
プロトコルの内容
ディフィー・ヘルマン鍵共有の具体的な手順は以下のようになります。まず、大きな
素数pと、そのp−1を割り切る大きな
素数qを選定します。また、位数qの元gを用意します。これらのパラメータは公開されており、アリスとボブのコミュニケーションに使用されます。アリスは秘密の値aを選び、次に以下の式を用いてAを計算してボブに送信します。
$$A = g^a mod p$$
一方、ボブも自分の秘密の値bを選んで同様にBを計算し、アリスに送ります。
$$B = g^b mod p$$
アリスは、自分の秘密値aとボブから受け取った値Bを使って共通鍵K ext{A}を計算します。ボブも同様に計算を行い、共通鍵K ext{B}を得ます。
$$K ext{A} = B^a mod p$$
$$K ext{B} = A^b mod p$$
アリスとボブによって計算された共通鍵は一致するため、これ以降この値を共通鍵として
暗号化通信に使用します。
ただし、第三者が通信を傍受しても、この特定の方法では共通鍵を生成するための簡単なアルゴリズムは知られていないため、外部の攻撃者は鍵を解読することが困難です。
中間者攻撃のリスク
ディフィー・ヘルマン鍵共有は独自の認証手段を提供しないため、悪意のある第三者、例えば中間者(eavesdropper)が介入する危険性があります。中間者攻撃では、攻撃者がアリスとボブの通信を
盗聴し、両者になりすまして自分の秘密値を用いて値を計算することが可能です。その結果、攻撃者は双方向の通信を観測し、
暗号鍵を設定しつつ情報を傍受できてしまいます。したがって、堅牢な認証手段の採用が不可欠です。
公開鍵の選定と問題点
公開鍵の選定に関しては、一時的な鍵を使用する場合、認証を提供せずに鍵が生成されてしまうため、他の方式での認証が必要となります。また、この手法には処理負荷や設定ミス、特にLogjam攻撃と呼ばれる脆弱性が存在します。Logjam攻撃は、特定の条件下で古い512ビットの鍵使用が解読可能だからです。
このように、ディフィー・ヘルマン鍵共有は非常に効果的な鍵共有手法である一方、高度なセキュリティを維持するために様々な配慮が求められます。