Diffie-Hellman key exchange
傍受されている可能性のあるネットワークを経由して共通鍵を相手に安全に届ける方法。
基本はべき乗余 (Modular Exponentiation) Diffie-Hellman (DH) または 有限体 (Finite Field) DH
Alice と Bob が通信をしたい
公開する情報
大きな素数 p
小さな適当な整数 g
秘密の情報
Alice: ランダムな整数 a (0 <= a <= p - 2)
Bob: ランダムな整数 b (0 <= b <= p - 2)
1. Alice send $ A = g^a\ mod\ p to Bob
2. Bob send $ B = g^b\ mod\ p to Alice
3. Alice: $ K_A = B^a\ mod\ p
4. Blob: $ K_B = A^b\ mod\ p
5. $ K_A = K_B = g^{ab}\ mod\ p より、$ K = K_A = K_B を共通鍵として使える
Bob から $ B を受け取る際に、なりすました第3者から受け取ってしまう危険はある。(中間者攻撃もできる)
累乗計算があるのでちょっと重い(log a とかだけど a がとても大きい)
楕円関数 (Elliptic Curve) を使ったものもあって、 ECDH と呼ばれる。
公開鍵を動的に作って使い捨てるものを DHE (ephemeral) という。