ECDH
Elliptic Curve Diffie-Hellman
NIST SP 800-56A DH, ECDH
RFC 6090 楕円曲線暗号アルゴリズムの基礎 Fundamental Elliptic Curve Cryptography Algorithms
4章 楕円曲線 Diffie-Hellman (Elliptic Curve Diffie-Hellman ECDH)
RFC 7748 セキュリティのための楕円曲線 Elliptic Curves for Security RFC 6278 Use of Static-Static Elliptic Curve Diffie-Hellman Key Agreement in Cryptographic Message Syntax
スカラー乗算
Diffie-Hellman の一部を楕円曲線といわれるものに置き換えただけ
DH $ g^k (\bmod p)
ECDH(ECC)$ kG
kをa・b やa+bにして、双方でaとbを生成すると、kにたどり着けるのでそれぞれ同じ$ g^{ab} $ (a+b)G $ [a+b]P の計算もできる
楕円曲線では乗算ではなく加算っぽいことになっている。
派生?
DH,ECDHはあまり使われていない。ECDHEなどが主 RFC 8422 Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier
ECDHE_RSA
ECDH_anon
RFC 4492 Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) → 8422
ECDH_ECDSA (廃止?)
ECDH_RSA (廃止?)
ECDHE_RSA
ECDH_anon
署名用のEdDSAと対になる暗号の鍵交換方式として利用できる? EdDSAのsと似たような感じでスカラーkをつくる(ハッシュではなく乱数(秘密鍵)でよい?)
kの頭は01 (EdDSAのnビット目に相当するところ)
最下位3ビットは0 (Curve25519)
公開鍵? = x25519(k、元のu)
公開鍵 = x25519(k, 9) を相手に渡し
共通鍵 = x25519(相手k, 公開鍵) で完了
u, v 座標があるが、vは出てこない
マスク処理に若干癖のある印象
EdDSAのEd448と比較してCurve448はフラグ用の情報を省略しているので1バイト少ない
EdWards25519とCurve25519はほぼ同じフォーマット フラグも避けている
TLS 1.3 ではECDH は廃止、(EC)DHEまたはPKSが利用できる
ECDHE_RSA RSA鍵を利用する
ECDHE_ECDSA ECDSAまたはEdDSA
ECDH_anon 鍵なしで利用
証明書の鍵(RSA/DSA/ECDSA)とECDH/DHの組み合わせで他にもいろいろあり
前方秘匿性があるのでTLS 1.2以降ではECDHEが推奨?
RFC 4492 Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)
RFC 5114 Additional Diffie-Hellman Groups for Use with IETF Standards
RFC 5480 ECDSA系
code:ECDSAなECDH
id-ecPublicKey OBJECT IDENTIFIER ::= {
iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 } -- 無制限
id-ecDH OBJECT IDENTIFIER ::= {
iso(1) identified-organization(3) certicom(132) schemes(1) ecdh(12) }
id-ECMQV OBJECT IDENTIFIER ::= {
iso(1) identified-organization(3) certicom(132) schemes(1) ecmqv(13) } -- 参考
id-ecPublicKeyはECDSA, ECDH, ECMQV に使える
曲線はAlgorithmIdentifier のパラメータ指定
RFC 8410 Algorithm Identifiers for Ed25519, Ed448, X25519, and X448 for Use in the Internet X.509 Public Key Infrastructure
table:ECC
ECDSA ECDH ECDHE ECDH ECDHE EdDSA
用途 署名 鍵交換 鍵交換 鍵交換 鍵交換 署名
RFC 6090など? 4492 8422,8446 7748 7748,8446 8032
秘密鍵 5915 5915 5915
識別子RFC 5480 5480 5480 8410 8410 8410
名前は違うがだいたい同じ曲線
UV と XYの座標、始点の違い?
code:EdDSA系ECDH
id-X25519 OBJECT IDENTIFIER ::= { 1 3 101 110 }
id-X448 OBJECT IDENTIFIER ::= { 1 3 101 111 }
id-Ed25519 OBJECT IDENTIFIER ::= { 1 3 101 112 } -- 参考
id-Ed448 OBJECT IDENTIFIER ::= { 1 3 101 113 } -- 参考
EdDSAの曲線はOID指定 ECDHではXの名の鍵を使用する Ed系でも使える? たぶん。
公開鍵の計算方法はRFC 7748 RFC 8032 で別々
RFC 8813 Clarifications for Elliptic Curve Cryptography Subject Public Key Information
RFC 5480 Elliptic Curve Cryptography Subject Public Key Information
ECDSA, ECDH, ECMQV 公開鍵の識別子と形式?
RFC 3279 Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile ECDHの公開鍵とEdDSAの公開鍵は計算方法が異なるため同じ鍵でも別のものになる?
RFC 5759 Suite B Certificate and Certificate Revocation List (CRL) Profile RFC 5753
RFC 3394 AES Key Wrap
Diffie-Hellman (DH) $ g^x \bmod P
仮
整数 g = 3
素数 p = 65537
とする
それぞれaとbをランダムに選ぶ ( 0 < a < P, 0 < b < P )
$ A = g^a \bmod P
$ B = g^b \bmod P
AとBを交換
$ S_1 = A^b \bmod P
$ S_2 = B^a \bmod P
$ S_1 = S_2 = g^{ab} \bmod P
Elliptic Curve Diffie-Hellman (ECDH)
P を [a]P に移動すると [a]P から a で Pに戻るのが難しい
[a]P と [b]P から [a][b]P を計算するのも難しい
[a・b]Pの掛け算、[a]([b]P)の掛け算どちらでもできる
という要素がDHと共通なので楕円曲線に置き換えても成立する
ハッシュ関数は繰り返し数の掛け算はできないのでDHには使えない
P 始点
a, bを選ぶ
aP, bP を交換する
abPを計算する
$ A = aP
$ B = bP
$ abP = a・bP
$ abP = b・aP
利用?
RFC 8422 Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier ECDHE
RFC 8037 CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE) RFC 9580
RFC 6318 Suite B in Secure/Multipurpose Internet Mail Extensions (S/MIME) RFC 6161 Elliptic Curve Algorithms for Cryptographic Message Syntax (CMS) Encrypted Key Package Content Type RFC 5008 Suite B in Secure/Multipurpose Internet Mail Extensions (S/MIME) → 6318