Diffie-Hellman鍵共有法
TLS, IPsec, SSH などで使われているよ?
RFC 2631 Diffie-Hellman 鍵共有法 Diffie-Hellman Key Agreement Method
https://www.nic.ad.jp/ja/tech/ipa/RFC2631JA.html
RFC 2539 Storage Diffie-Hellman Keys in Domain Name System (DNS)
楕円鍵版
ECDH
ECMQV
TLSには3種類くらいある?
Ephemeral Diffie-Hellman DHE
Static Diffie-Hellman 証明書にいろいろ埋め込み (TLS 1.3では廃止)
Anonymous Diffie-Hellman
略は DH, ECDH だったり Ephemeral なので DHE, ECDHE だったり
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は?
OpenSSL genpkey でパラメータを作成できる?
SSHなどでは g は 2が使われる Pも固定
ガロア体でも可能?
NIST SP 800-56A DH, ECDH
IPsecのIKE
RFC 2409
RFC 3526
RFC 8268 4419 SSH系
https://qiita.com/n-i-e/items/fac121aa5b2a3d16a632