2者の間で、秘密に鍵を共有する基本的な考え方です
ディフィー・へルマンが提案(1976年に)した鍵共有プロトコルの仕組みを以下で示します。
(1977年に開発されたRSAの公開鍵方式の基礎となる技術です。)
通信を行うAとBの両者で使う「公開用の鍵p」と
秘密鍵を用意します。
(「Aの秘密鍵をa」、「Bの秘密鍵をb」とします。
この時「公開用の鍵p」は、お互いに共有します。)
そして、お互いで「公開用の鍵p」と「自身の秘密鍵」から作成される
データを相手に送り合います。
この受信したデータと、自分の持つ鍵とから暗号に使う共通鍵を
作成できる方法です。
これは、第三者がこのデータを盗聴しても、
鍵そのものを送信していないため、
暗号に使われる共通鍵の特定が
極めて困難になっている特徴があります。
以下で具体的に示します。
(なお以下の説明で、modは余りを意味します。
例えば 128 mod 11 は、128を11で割った余りの7です。)
AとBの間で通信するとします。
「公開用の鍵」をpとします。
Aで、p-2未満で小さくない乱数aを、Aの秘密鍵とします。
Bで、p-2未満で小さくない乱数bを、Bの秘密鍵とします。
Aで2amod pと
なるαを生成し、
それをBへを送ります。
Bでは、この受信データαより、
αbmod pなる
kを
共通鍵とします。
Bで2bmod pと
なるβを生成し、
それをAへを送ります。
Aでは、この受信データβより、
βamod pなる
kを
共通鍵とします。
AとB双方で作られたkは、次のように同じ値になるので、
それを共通鍵として暗号化に使うことになります。
(2amod p)bmod p=
(2bmod p)amod p=
2(a×b)mod p=k
なおこのDH鍵交換方式は、
IETFによって
RFC 2539として規格化されていいます。
この方式は一般に盗聴に強いのですが、中間攻撃には弱いとされます。
よって、他の技術と併用して使われることが多いようです。