EdDSA
RFC 8032 エドワーズ曲線デジタル署名アルゴリズム
doi:10.17487/RFC8032
Edwards-Curve Digital Signature Algorithm (EdDSA)
https://tex2e.github.io/rfc-translater/html/rfc8032.html
https://hazm.at/mox/security/public-key/elliptic-curve/rfc8032/index.html
RFC 7748 セキュリティのための楕円曲線 Elliptic Curves for Security
doi:10.17487/RFC7748
https://tex2e.github.io/rfc-translater/html/rfc7748.html
Curve25519
Curve448
edwards25519
edwards448
Ed448-Goldilocks
NIST SP 800-186 Recommendations for Discrete Logarithm-based Cryptography: Elliptic Curve Domain Parameters
https://csrc.nist.gov/pubs/sp/800/186/final
doi:10.6028/NIST.SP.800-186
更新なし https://crossmark.crossref.org/dialog/?doi=10.6028/NIST.SP.800-186
NIST FIPS 186-5 Digital Signature Standard (DSS)
https://csrc.nist.gov/pubs/fips/186-5/final
doi:10.6028/NIST.FIPS.186-5
https://www.cryptrec.go.jp/exreport/cryptrec-ex-3102-2021.pdf
https://www.cryptrec.go.jp/exreport/cryptrec-ex-3002-2020.pdf
RFC 9295 Clarifications for Ed25519, Ed448, X25519, and X448 Algorithm Identifiers
RFC 8709 Ed25519 and Ed448 Public Key Algorithms for the Secure Shell (SSH) Protocol
RFC 6090 基本的な楕円曲線暗号アルゴリズム Fundamental Elliptic Curve Cryptography Algorithms
FIPS 186-5 から標準に追加されたDSAの派生? デジタル署名アルゴリズムのひとつ
シュノア署名の応用でECDSAとは別?
モンゴメリー曲線?
$ v^2 = u^3 + Au^2 + u
エドワーズ曲線デジタル署名アルゴリズム
Ax^2 + y^2 = 1 + Dx^2y^2
$ x^2 + y^2 = 1 + d*x^2*y^2 for 素数 p p = 3 mod 4の場合
ツイストエドワーズ曲線$ -x^2 + y^2 = 1 + d*x^2*y^2 p = 1 mod 4 の場合
RFC 7748 4.1 Curve25519
$ v^2 = u^3 + Au^2 + u
A 486662
よくわからなパラメータ
table:Ed25519ph, Ed25519ctx, Ed25519
Parameter 値
p 2^255 - 19 edwards25519 in RFC 7748
b 256
GF(p)の符号化 255-bit little-endian of {0, 1, ... p-1}
H(x) SHA-512(dom2(phflag,context)||x) RFC 6234
c base 2 logarithm of cofactor of edwards 25519 in RFC 7748 (例 3)
n 254
d 例 -121665/121666 = ... RFC 7748
a -1
B (X(P),Y(P)) RFC 7748
L RFC 7748
PH(x) x
Ed25519
Ed25519ctx コンテキストそのまま?
Ed25519ph ハッシュから?
ECDSAと似ているが乱数っぽいもの(nonce)の生成が手順に入っているためより安全?
ブラウザではSafari以外が未サポート
table:強度
種類 強度bit 公開鍵長byte 署名byte, ハッシュ長 ハッシュ関数
Ed25519 128 32 (256bit) 64 (512bit) SHA-512
Ed448 224 57 (456bit) 114 (912bit) SHAKE256
パラメータは11あるが多すぎるのでセットで定義されたものを使う
ECDSAでよく使われる曲線(NISTなどが定義しているもの)とは別のEd25519とEd448があるようだ。Ed25519が一般的に使われる
p の値が $ 2^{255} - 19 なところから Ed25519
Ed448 は $ 2^{448} - 2^{224} - 1
RFC 8032 の 2
dom2(int x, byte[] y)
Ed25519の署名・検証で使う空のオクテット列
"SigEd25519 no Ed25519 collisions" || octet(x) || octet(OLEN(y)) || y
x は 0 から 255 の値 y は 255オクテットまでのオクテット列
dom4(int x, byte[] y)
"SigEd448" || octet(x) || octet(OLEN(y)) || y
RFC 8032 の 3
EdDSA は、11 個のパラメータを持つデジタル署名システムです。
11 個の入力パラメータを持つ汎用 EdDSA デジタル署名システムは、直接実装することを想定していません。パラメータの選択は、安全で効率的な運用のために重要です。代わりに、EdDSA 用の特定のパラメータ(Ed25519 や Ed448 など)を選択して実装します。場合によっては、Ed25519 と Ed448 をカバーするためにコードの再利用性を高めるために、若干の一般化を行うこともあります。
したがって、汎用 EdDSA の正確な説明は、実装者にとって特に有用ではありません。背景情報と完全性を確保するために、ここでは汎用 EdDSA アルゴリズムの簡潔な説明を示します。
n や c などのパラメータの定義は、アルゴリズムの直感的に理解しにくい手順を説明するのに役立つ場合があります。
この説明は EDDSA2 に厳密に従っています。
EdDSA には 11 個のパラメータがあります。
1. 奇数の素数p, EdDSAは有限体GF(p)上の楕円曲線を使用する。
2. $ 2^{b-1}>pを満たす整数b。EdDSA公開鍵は正確にb bitで署名は正確に2*b bitです。bは8の倍数がおすすめのため公開鍵と署名の長さはオクテットの整数倍になる。
3. 有限体GF(p) の要素の b-1 bit出力
4. 2*b ビット出力のハッシュ関数H Ed448はSHAKE系がひつよう
5. 2 または 3 の整数 c。秘密のEdDSAスカラーは 2^cの倍数。整数cは2を底とする補数の対数。
6. c <= n < b の整数 n。秘密のEdDSAスカラーは n + 1 ビットで、上位ビット(2^nの位置)は常に設定され、下位cビットは常にクリアされます。
7. GF(p)の非正方形要素(non-square element) d。通常の推奨は、許容できる曲線を与えるゼロに最も近い値としてそれをとることです。
8. GF(p)の非ゼロの正方形要素(non-zero square element) a。最高のパフォーマンスを得るための通常の推奨は、 p mod 4 = 1の場合は a = -1, p mod 4 = 3 の場合は a = 1 です。
9. B != (0,1) は 集合 E = { (x,y) は GF(p) x GF(p) の元であり、a * x^2 + y^2 = 1 + d * x^2 * y^2 } が成り立ちます。
10. [L]B = 0 かつ 2^c * L = #E となる奇数素数 L。#E (曲線上の点の数)は、楕円曲線 E に提供される標準データの一部であり、または余因子 * 次数として計算することもできます。
11. 「事前ハッシュ」関数PH。PureEdDSAは、PHが恒等関数であるEdDSA(つまり、PH(M) = M)を意味します。HashEdDSAは、メッセージの長さに関係なく、PHが短い出力を生成するEdDSAを意味します(たとえば、PH(M) = SHA-512(M))。
曲線上の点は、加法のもとで群を形成し、(x3, y3) = (x1, y1) + (x2, y2)となり、次の式が成り立つ。
$ x3 = \frac{x1 * y2 + x2 * y1}{1 + d * x1 * x2 * y1 * y2} , $ y3 = \frac{y1 * y2 - a*x1*x2}{1 - d *x1* x2*y1*y2}
群の中立元は(0,1)です。
暗号アプリケーションで用いられる他の多くの曲線とは異なり、これらの式は「完全」です。つまり、曲線上のすべての点において、例外なく有効です。特に、すべての入力点において分母は非ゼロです。
より効率的な式があり、それらは依然として完全ですが、同次座標を用いることで、高コストな法p変換を回避します。Faster-ECCおよびEdwards-revisitedを参照してください。
3.1. 符号化
整数 0 < S < L - 1 は、リトルエンディアン形式で b ビットの文字列 ENC(S) として符号化されます。
E の元 (x,y) は、ENC(x,y) と呼ばれる b ビットの文字列として符号化されます。これは、y の (b-1) ビットの符号化に、x が負の場合には 1、負でない場合には 0 となる 1 ビットを連結したものです。
GF(p) の符号化は、GF(p) の「負の」元を定義するために使用されます。
具体的には、x の (b-1) ビットの符号化が -x の (b-1) ビットの符号化よりも辞書式に大きい場合、x は負です。
ssh では利用できるがhttps TLSでは未対応の環境がまだある
利用
RFC 8037 JOSE
RFC 8419 Use EdDSA署名 in CMS
RFC 8420 Using the Edwards-Curve Digital Signature Algorithm (EdDSA) in the Internet Key Exchange Protocol Version 2 (IKEv2)