ディフィー・ヘルマン鍵共有
公開鍵は(何かしらの証明を付けた)静的なものであっても、一時的なもの(ephemeral、この場合特にDHEと略記される)であってもかまわない。一時的な鍵を使用した場合、鍵そのものには認証がないため、別な方法で認証を行うこととなる。もし認証がなければ、上述の通り中間者攻撃に対して脆弱となる。どちらか一方の鍵が静的なものであった場合、中間者攻撃を受けることはなくなるが、forward secrecyのような、その他の高度なセキュリティに与ることはできなくなる。静的な鍵を持つ側では、自身の秘密鍵漏洩を防ぐため、相手の公開鍵を確認して、安全な共通鍵生成関数を利用する必要がある。
共有した秘密をそのまま鍵として使うこともできなくはないが、ディフィー・ヘルマン鍵共有で生成したことによってできる弱いビットの影響を除去するため、秘密をハッシュに通すことが推奨される。
アリスは自分だけの知る秘密の値 a とボブから送られてきて受信した値 B から以下の値を計算する。
K A = B a mod p {\displaystyle K_{A}=B^{a}{\bmod {p}}}
ボブも自分だけの知る秘密の値 b とアリスから送られてきて受信した値 A から以下の値を計算する。
K B = A b mod p {\displaystyle K_{B}=A^{b}{\bmod {p}}}
このときアリスとボブが計算した K A {\displaystyle K_{A}} と K B {\displaystyle K_{B}} は
K A = K B = g a b mod p {\displaystyle K_{A}=K_{B}=g^{ab}{\bmod {p}}}
となっていて一致するので、以後この値を共通鍵暗号方式の鍵 K {\displaystyle K} として使用する。
ここで第三者イブがこの二人の通信を傍受していて A と B の値を入手できたとしても、 A = g a mod p {\displaystyle A=g^{a}{\bmod {p}}} と B = g b mod p {\displaystyle B=g^{b}{\bmod {p}}} から K = g a b mod p {\displaystyle K=g^{ab}{\bmod {p}}} を多項式時間で計算できる方法はいまのところ存在しないので、第三者イブが秘密の共通鍵 K {\displaystyle K} を生成することは困難である。