本文へスキップ
ecdsa.com
推奨モンゴメリ形式

curve25519

Curve25519 は、TLS 1.3、SSH、WireGuard のデフォルトの鍵交換である X25519 の基盤となるモンゴメリー曲線です。

curve25519 は、255 ビットの素体上のモンゴメリ形式の曲線 By² = x³ + Ax² + x で、位数が 253 ビットの素数である部分群とコファクター 8 を持ちます。推定セキュリティレベルは 128 ビットです。ステータス:新しいシステムに推奨。

Curve25519 は、素数 2^255 − 19 上のモンゴメリー曲線 y² = x³ + 486662x² + x で、2006年に Daniel J. Bernstein が設計し、RFC 7748 で規定されました。群の位数は 8·n(n は 253 ビットの素数)で、約 128 ビットのセキュリティを提供します。また、その二次ツイストも安全です。

X25519 はこの曲線上のディフィー・ヘルマン関数で、u 座標だけを使います。鍵は 32 バイトの文字列で、秘密鍵は、コファクターを通じて情報が漏れないよう RFC 7748 §5 の規定どおりに「クランプ」されます。この関数は任意の 32 バイトを公開鍵として受け入れます。位数の小さい点を入力すると共有秘密がすべてゼロになるため、プロトコルはこれを拒否すべきです。

TLS 1.3 では x25519 が「推奨」のグループとされ、ハイブリッド方式 X25519MLKEM768 の古典暗号側の要素としても使われています。SSH では curve25519-sha256(RFC 8731)として使われ、WireGuard、Signal、age もこの曲線の上に構築されています。ツイストエドワーズ形式の対となる曲線は edwards25519 で、Ed25519 署名に使われます。

規格での名称

規格名称
RFC 7748curve25519
RFC 7748 / RFC 8410X25519
SSHcurve25519-sha256

オブジェクト識別子

ドメインパラメーター

255 ビットの素体 · 約 128 ビットセキュリティ

有限体の素数 p
0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed
係数 a
0x76d06
係数 b
0x1
ベースポイントの x 座標
0x9
ベースポイントの y 座標
0x20ae19a1b8a086b4e01edd2c7748d14c923d4d7e6d7c61b229e9c5a27eced3d9
ベースポイントの位数 n
0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed
コファクター h
0x8

採用例

  • TLS 1.3 (x25519, X25519MLKEM768)
  • SSH (curve25519-sha256)
  • Signal
  • WireGuard
  • age
  • HPKE

レジストリでの識別子

TLS のサポートされるグループ
x25519 0x001DMLKEM512X25519 0x11EAX25519MLKEM768 0x11ECX25519Kyber768Draft00 0x6399
JOSE アルゴリズム
HPKE-3HPKE-3-KEHPKE-4
JWK の曲線
X25519
COSE の楕円曲線
X25519 4
SSH の鍵交換方式
curve25519-sha256gss-curve25519-sha256-*mlkem768x25519-sha256sntrup761x25519-sha512
HPKE の KEM 識別子
DHKEM(X25519, HKDF-SHA256) 0x0020DHKEM(X25519+Elligator, HKDF-SHA256) 0x0022X25519Kyber768Draft00 0x0030X-Wing 0x647A

規格と参考文献

すべての曲線