ECDSA
EC なDSA、DSAの後継?乱数は使用する。乱数を使わないらしい EdDSAを使った方がいいようだ 暗号化には利用できない(ECDHなどの鍵交換を利用する)
KT-I など
RFC 4754 RFC 4754 IKE and IKEv2 Authentication Using the Elliptic Curve Digital Signature Algorithm (ECDSA)
KT-I と同じ?
DSAの$ g^k を楕円の関数 (ECDSAでは? EdDSAでは [k]G) っぽく置き換えたもの
table:比較
DSA ECDSA EdDSA
Ed25519 Ed448
bit 1024 - 3072 256, 384など 255 448
p Lbit素数 2^255 - 19 2^448 - 2^224 - 1
q
g 1 < g < p G B B
鍵の形式
RFC 3279 Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
ECDSA
RFC 5480 Elliptic Curve Cryptography Subject Public Key Information
公開鍵
id-ecPublicKey ECDSA無制限鍵(Extensionでのみ限定される)
id-ecDH ECDH/ECDHE?限定鍵
id-ecMQV ECMQV機能限定鍵
RFC 8813 楕円曲線暗号主題公開鍵情報の説明 Clarifications for Elliptic Curve Cryptography Subject Public Key Information
暗号keyUsageの明確な禁止
RFC 5758 署名
SHA-224, SHA-256, SHA-384, SHA-512
RFC 5915 楕円曲線秘密鍵構造 Elliptic Curve Private Key Structure
ECDSAではハッシュが固定ではないので鍵と署名のOIDは別々か?
code:RFC 5480 ASN
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING
}
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
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) }
ECParameters ::= CHOICE {
namedCurve OBJECT IDENTIFIER
-- implicitCurve NULL
-- specifiedCurve SpecifiedECDomain
}
-- implicitCurve および specifiedCurve は PKIX では使用してはいけません(MUST NOT)。
-- SpecifiedECDomain の詳細については X9.62 を参照してください。 -- この CHOICE への将来の追加は、ANSI X9 と調整する必要があります。
ECDSAではparametersを使用する
RFC 3279 のEckpParametersはRFC 5480で ECParameters, ECParameters はSpecifiedECDomain に変わっているかも subjectPublicKey が公開鍵
ECPoint ::= OCTET STRING
の形式をbit stringに詰め込む
非圧縮フォーム(MUST)
圧縮フォーム(MAY)
X9.62のハイブリッド形式(MUST NOT)
使える形式は2種類あり非圧縮が必須、圧縮はあるといい、ハイブリッドは禁止
非圧縮 0x04、圧縮 0x02 または 0x03 ではじめる
証明書の形式
EC汎用のものと、ECDH限定、ECMQV限定のものがある、EC汎用のOIDのものがECDSAで利用できる パラメータで曲線の種類等を指定する
digitalSignature (CA, nonRepudiation以外の署名)
nonRepudiation 否認防止 名前入り証明書など
keyEncipherment 鍵暗号化 (禁止 RFC 8813)
dataEncipherment データ暗号化 (禁止 RFC 8813)
keyAgreement 鍵交換(CAは非推奨)
cipheronly 暗号化のみ
decipheronly 復号のみ
keyCertSign
cRLSign
End Entity(EE)用KeyUsage
digitalSignature デジタル署名
nonRepudiation 否認防止
keyEncipherment 鍵暗号化 (禁止 RFC 8813)
dataEncipherment データ暗号化 (禁止 RFC 8813)
keyAgreement 鍵交換
cipheronly 暗号化のみ
decipheronly 復号のみ
id-ecDH, id-ecMQVはkeyAgreementのみ
digitalSignature 署名(禁止)
nonRepudiation 否認防止(禁止)
keyTransport(禁止)
keyEncipherment 鍵暗号化 (禁止 RFC 8813)
dataEncipherment データ暗号化 (禁止 RFC 8813)
keyAgreement 鍵交換
cipheronly 暗号化のみ
decipheronly 復号のみ
特定の用途
RFC 3279 Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
RFC 5758 Internet X.509 Public Key Infrastructure: Additional Algorithms and Identifiers for DSA and ECDSA
code:RFC 3279 ECDSA署名
ansi-X9-62 OBJECT IDENTIFIER ::= {
iso(1) member-body(2) us(840) 10045 }
id-ecSigType OBJECT IDENTIFIER ::= {
ansi-X9-62 signatures(4) }
ecdsa-with-SHA1 OBJECT IDENTIFIER ::= {
id-ecSigType 1 }
code:RFC 5758
ecdsa-with-SHA224 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 1 }
ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 2 }
ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 3 }
ecdsa-with-SHA512 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 4 }
code:RFC 9688
sigAlgs OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistAlgorithm(4) 3 }
id-ecdsa-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 9 }
id-ecdsa-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 10 }
id-ecdsa-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 11 }
id-ecdsa-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 12 }
ANS X9.62
NIST SP 800-56A 検証?
RFC 6979 乱数を疑似乱数でどうにかする版DSA, ECDSA Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) RFC 6090 楕円曲線暗号アルゴリズムの基礎 Fundamental Elliptic Curve Cryptography Algorithms 楕円曲線, EC Diffie-Hellman, ElGamal RFC 9380 Hashing to Elliptic Curves
RFC 5758 Internet X.509 公開鍵基盤: DSA および ECDSA の追加アルゴリズムと識別子 RFC 5656 Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer
RFC 5639 楕円曲線暗号 (ECC) Brainpool 標準カーブ and Curve Generation (情報提供)
RFC 4754 IKE and IKEv2 Authentication Using the Elliptic Curve Digital Signature Algorithm (ECDSA)
RFC 4492 → 8422 ECC Cipher Suites for TLS Versions 1.2 and Earlier
RFC 4050 Using the Elliptic Curve Signature Algorithm (ECDSA) for XML Digital Signatures
FIPS 186-5 を見てみる
ハッシュ関数のほかXOFのSHAKE128, SHAKE256が使われるらしいのでSHA-3系が必要か対応かどちらか 曲線の種類
接頭
ansiX9
sec (ansiX9とだいたいおなじ)
prime
table:Named Curve
NIST名 sec bit ANSI X9.62名 他? FIPS186-3 OID (RFC 5480)
secp256k1
secp192r1 80 ansix9p192r1 prime192v1 P-192 1 2 840 10045 3 1 1 ANSI
secp224r1 112 P-224 1 3 132 0 33 CERT
secp256r1 128 ansix9p256r1? prime256v1 P-256 1 2 840 10045 3 1 7 ANSI
secp384r1 192 P-384 1 3 132 0 34 CERT
secp521r1 256 P-521 1 3 132 0 35 CERT
sect163k1 80 1 3 132 0 1 CERT
sect233k1 112 1 3 132 0 26 CERT
sect239k1
sect283k1 128 1 3 132 0 16 CERT
sect409k1 192 1 3 132 0 36 CERT
sect571k1 256 1 3 132 0 38 CERT
sect163r1
sect163r2 80 1 3 132 0 15 CERT
sect193r1
sect193r2
sect233r1 112 1 3 132 0 27 CERT
sect283r1 128 1 3 132 0 17 CERT
sect409r1 192 1 3 132 0 37 CERT
sect571r1 256 1 3 132 0 39 CERT
ドメインパラメータ
q フィールドサイズ
FR 基準
a, b
Type 楕円曲線モデル
G = (xG, yG) 基点
n 次数
h 余因子
domain_parameter_seed
n のビット長 セキュリティ強度はn/2くらい
224 - 255
256 - 383
384 - 511
512以上
GF(p) と GF(2) p は奇数の素数
秘密鍵 d 公開鍵 Q
6.2. 秘密鍵/公開鍵
6.2.1. キーペアの生成
付録 A.2.
6.2.2. 鍵ペアの管理
6.3. ECDSAメッセージごとの秘密番号の生成
ハッシュ関数またはXOF
H = Hash(M)
秘密乱数 k
参考
ISO 9796-2 疑似乱数?
対応?
OpenSSL 1.0.0 以降
Java 7以降?