Diffie-Hellman鍵共有法
RFC 2539 Storage Diffie-Hellman Keys in Domain Name System
TLSには3種類くらいある?
Ephemeral Diffie-Hellman DHE
Static Diffie-Hellman 証明書にいろいろ埋め込み (TLS 1.3では廃止)
Anonymous Diffie-Hellman
略は DH, ECDH だったり Ephemeral なので DHE, ECDHE だったり
RSAと同じ $ g^x \bmod P 的なもの離散対数問題 (べき乗余とか有限体とか)を使う。ただし元に戻すのではなく2つの値を足すだけ。違う位置に出てくる数を共通鍵として使う 共通 P 素数, g 自然数 [2, P)ぐらい
A は 秘密に a [2, P)を持ち $ E = g^a \bmod P を相手に渡す
B は 秘密に b [2, P)を持ち $ F = g^b \bmod P を相手に渡す
A は $ ZZ = F^a \bmod P で共通鍵ZZを得る
B は $ ZZ = E^b \bmod Pで共通鍵ZZを得る
最終的には $ ZZ = g^{ab} \bmod P で共通、a と b の値は他者にはわからない
a と b が同じベクトルにいるので可能な計算
なりすましを避けるために E や F には署名をつけたりするといい
RFC 2631 の続き Keying Material をつくる
KM = H( ZZ || OtherInfo )
H は SHA1っぽいがSHA2は?
SSHなどでは g は 2が使われる Pも固定
NIST SP 800-56A DH, ECDH
RFC 2409
RFC 3526
RFC 8268 4419 SSH系