本文へスキップ
ecdsa.com
許容短縮ワイエルシュトラス形式

secp256k1

secp256k1 は、Bitcoin、Ethereum、Nostr の安全性を支える 256 ビットのコブリッツ曲線 y² = x³ + 7 です。

secp256k1 は、256 ビットの素体上の短縮ワイエルシュトラス形式の曲線 y² = x³ + ax + b で、位数が 256 ビットの素数である部分群とコファクター 1 を持ちます。推定セキュリティレベルは 128 ビットです。ステータス:安全(ただし地域限定またはニッチな用途向け)。

secp256k1 は SEC 2 で、素数 p = 2^256 − 2^32 − 977 上に a = 0、b = 7 として定義されています。位数が素数の群により約 128 ビットのセキュリティが得られ、a = 0 と p ≡ 1 (mod 3) の組み合わせにより、スカラー倍算を高速化する GLV 自己準同型が使えます。NIST 曲線と異なり、パラメーターはシードから導出されたのではなく、効率を重視して選ばれました。

Bitcoin は 2009 年に ECDSA 用にこの曲線を採用し、BIP 340(Taproot)で同じ曲線上の Schnorr 署名が追加されました。Ethereum はこの曲線でトランザクションとメッセージに署名し、Nostr のイベントには BIP 340 の Schnorr 署名が付きます。Ethereum(EIP-2 以降)と Bitcoin のリレーポリシーは、展性を排除するために high-S 形式の ECDSA 署名を拒否します。low-S も参照してください。

ブロックチェーン以外ではあまり使われません。RFC 8422 は TLS での使用を非推奨とし(コードポイント 22)、JOSE(ES256K、RFC 8812)と COSE(アルゴリズム −47)には登録されています。また NIST SP 800-186 は、ブロックチェーン関連の用途に限ってこの曲線を認めています。

規格での名称

規格名称
SEC 2secp256k1
JOSE / COSEsecp256k1

オブジェクト識別子

ドメインパラメーター

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

有限体の素数 p
0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
係数 a
0x0
係数 b
0x7
ベースポイントの x 座標
0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
ベースポイントの y 座標
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
ベースポイントの位数 n
0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
コファクター h
0x1

採用例

  • Bitcoin
  • Ethereum
  • Nostr
  • JOSE (ES256K)
  • COSE (ES256K)

レジストリでの識別子

TLS のサポートされるグループ
secp256k1 0x0016
JOSE アルゴリズム
ES256K
JWK の曲線
secp256k1
COSE アルゴリズム
ES256K -47
COSE の楕円曲線
secp256k1 8
HPKE の KEM 識別子
DHKEM(secp256k1, HKDF-SHA256) 0x0016

規格と参考文献

すべての曲線