Curve25519
ECDH用に作られ(X25519)、EdDSAでも変形版がEd25519として使われる(名前は違う?)楕円曲線
Curve448もある
ECDSAでも利用可能?
RFC 7748 Elliptic Curves for Security
楕円曲線暗号
RFC 8928
RFC 7748
Curve25519
モンゴメリー曲線
$ v^2 = u^3 + A*u^2 + u
p $ 2^{255} - 19
A 486662
位数 order $ 2^{252} + 0x14def9dea2f79cd65812631a5cf5d3ed
$ 2^{252} + 27742317777372353535851937790883648493
7237005577332262213973186563042994240857116359379907606001950938285454250989
余因数, 余因子,補因子 cofactor 8
U(P) 9
V(P)
14781619447589544791020593568409986887264606134616475288964881837755586237401
43114425171068552920764898935933967039370386198203806730763910166200978582548
下は修正後の値 https://www.rfc-editor.org/errata/eid4730
基点
u = 9
v = 14781619447589544791020593568409986887264606134616475288964881837755586237401
こっちも修正必要?
V(P)の値は + の値と - の値があり、ECDHではどちらでもいい (uの値のみ使用する)
バイト列9をそのままEdWards25519の座標風にデコードすると標準ではない方で出てくるため混乱するかもということらしい
EdWards25519
ツイストエドワーズ曲線と等価?
$ x^2 + y^2 = 1 + dx^2y^2 (p = 3 mod 4の場合)
$ -x^2 + y^2 = 1 + dx^2y^2 (p = 1 mod 4 (EdWards25519)の場合)
p $ 2^{255} - 19
d 37095705934669439343138083508754565189542113879843219016388785533085940283555
位数 order 2^252 + 0x14def9dea2f79cd65812631a5cf5d3ed
cofactor 8
X(P) 15112221349535400772501151409588531511454012693041857206046113283949847762202
Y(P) 46316835694926478169428394003475163141307993866256225615783033603165251855960
(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)
$ (u, v ) = (\frac{1+y}{1-y},\frac{\sqrt{-486664}*u}x)
(x. y) = (sqrt(-486664)*u/v, (u-1)/(u+1))
$ (x,y) = (\frac{\sqrt{-486664}*u}v,\frac{u-1}{u+1})
RFC 8928
共通
p = p = $ 2^{255} - 19
h = cofactor = 8
n = order = $ 2^{252} + 0x14def9dea2f79cd65812631a5cf5d3ed
モンゴメリ曲線
A 486662
B 1
Gu 9
Gv 14781619447589544791020593568409986887264606134616475288964881837755586237401
ツイストエドワーズ曲線
A -1
d
-121665/121666
37095705934669439343138083508754565189542113879843219016388785533085940283555
0x52036cee 2b6ffe73 8cc74079 7779e898 00700a4d 4141d8ab 75eb4dca 135978a3
Gx
15112221349535400772501151409588531511454012693041857206046113283949847762202
0x216936d3 cd6e53fe c0a4e231 fdd6dc5c 692cc760 9525a7b2 c9562d60 8f25d51a
Gy
4/5
4631683569492647816942839400347516314130799386625622561578303360 3165251855960
0x66666666 66666666 66666666 66666666 66666666 66666666 66666666 66666658
RFC 8031 Curve25519 and Curve448 for the Internet Key Exchange Protocol Version 2 (IKEv2) Key Agreement
RFC 8731 Secure Shell (SSH) Key Exchange Method Using Curve25519 and Curve448