跳到主要内容
ecdsa.com

P-256(secp256r1)

NIST 定义在 256 位素域上的椭圆曲线,又名 secp256r1 和 prime256v1,安全强度约为 128 位,是 ECDSA 和 ECDH 中部署最广泛的曲线。
其他写法secp256r1prime256v1NIST P-256P256

P-256 是素数 p = 2²⁵⁶ − 2²²⁴ + 2¹⁹² + 2⁹⁶ − 1 上的短 Weierstrass 曲线 y² = x³ − 3x + b,群阶为素数(余因子为 1)。它定义在 NIST SP 800-186 §3.2.1.3 中,在 SEC 2 中名为 secp256r1;OpenSSL 称之为 prime256v1,它的 OID 是 1.2.840.10045.3.1.7,TLS 中名为 secp256r1(组 23),JOSE/COSE 使用 "crv": "P-256"。

大小:私钥 32 字节;公钥未压缩形式为 65 字节(04‖x‖y),压缩形式为 33 字节;ECDSA 签名在原始 r‖s 格式下为 64 字节(JWS ES256),DER 编码下为 70~72 字节(X.509、TLS、WebAuthn 断言,以及 OpenSSL 和 Java 的默认格式)。混用这两种编码,是密钥有效却出现“invalid signature”的最常见原因。

它几乎在所有地方都是默认选择:ES256 JWT、通行密钥(COSE 算法 −7)、TLS 中的 ECDSA 证书和密钥共享,以及 Apple 的 Secure Enclave 和大多数 HSM、智能卡,这些硬件往往不支持其他曲线。在 Apple M4 Max 的单个核心上,OpenSSL 3.6.5 每秒约可生成 87,000 个 P-256 ECDSA 签名,验证约 29,000 个。

它的系数来自一个来源未加说明的 NSA 种子,这也是一些设计者更青睐 Curve25519 的原因之一;目前尚未发现 P-256 本身存在任何弱点。和所有椭圆曲线一样,它会被大型量子计算机攻破,NIST IR 8547(草案)提议在2035年后禁用任何安全强度的 ECDSA 和 ECDH。关于比特币所用的曲线,参见 P-256 vs secp256k1。

标准与参考资料

全部术语