本文へスキップ
ecdsa.com

P-256(secp256r1)

256 ビットの素体上で定義された NIST の楕円曲線で、secp256r1 や prime256v1 とも呼ばれ、約 128 ビットのセキュリティを持ち、ECDSA と ECDH で最も広く使われている曲線です。
別表記secp256r1prime256v1NIST P-256P256

P-256 は、素数 p = 2²⁵⁶ − 2²²⁴ + 2¹⁹² + 2⁹⁶ − 1 上の短縮ワイエルシュトラス形式の曲線 y² = x³ − 3x + b で、群の位数は素数です(コファクター 1)。NIST SP 800-186 §3.2.1.3 と、secp256r1 という名前で SEC 2 に規定されています。OpenSSL では prime256v1 と呼ばれ、OID は 1.2.840.10045.3.1.7、TLS での名前は secp256r1(グループ 23)で、JOSE/COSE では "crv": "P-256" を使います。

サイズ:秘密鍵は 32 バイト、公開鍵は非圧縮形式(04‖x‖y)で 65 バイト、圧縮形式で 33 バイトです。ECDSA 署名は、生の r‖s(JWS の ES256)では 64 バイト、DER(X.509、TLS、WebAuthn のアサーション、OpenSSL と Java のデフォルト)では 70〜72 バイトです。この 2 つのエンコーディングを混同することが、鍵は有効なのに「invalid signature」になる最も一般的な原因です。

ほぼあらゆる場面でデフォルトの曲線です。ES256 の JWT、パスキー(COSE アルゴリズム −7)、TLS の ECDSA 証明書とキーシェア(key share)、Apple の Secure Enclave、そしてほかの曲線をサポートしていないことも多い、大半の HSM とスマートカードで使われています。Apple M4 Max の 1 コアで、OpenSSL 3.6.5 は 1 秒あたり約 87,000 回の P-256 ECDSA 署名と約 29,000 回の検証を行います。

係数は説明のない NSA のシードから導かれており、これが一部の設計者が Curve25519 を好む理由の 1 つですが、P-256 自体の弱点は知られていません。ほかのすべての楕円曲線と同様に大規模な量子コンピューターには破られ、NIST IR 8547(ドラフト)は、2035年より後はすべての強度で ECDSA と ECDH を使用禁止とすることを提案しています。Bitcoin の曲線については、P-256 と secp256k1 の比較を参照してください。

規格と参考文献

すべての用語