P-256 是形如 y² = x³ + ax + b 的短 Weierstrass 曲线,定义在 256 位素域上,其素数阶子群为 256 位,余因子为 1;估计安全级别为 128 位。状态:推荐用于新系统。
P-256 是素数 p = 2^256 − 2^224 + 2^192 + 2^96 − 1 上的短 Weierstrass 曲线 y² = x³ − 3x + b,这个素数的特殊形式使模约简可以快速完成。它的群阶是一个约为 2^256 的素数(余因子为 1),安全强度约为 128 位。同一条曲线有三个名称:P-256(NIST、JOSE、COSE)、secp256r1(SEC 2、TLS)和 prime256v1(ANSI X9.62、OpenSSL)。
公钥是一个点:未压缩形式为 65 字节(0x04 ‖ x ‖ y),压缩形式为 33 字节。ECDSA 签名在原始 r ‖ s 格式下为 64 字节(JOSE、WebCrypto),在 DER 编码下通常为 70~72 字节(X.509、TLS、OpenSSL、WebAuthn 断言);混淆这两种编码是最常见的互操作问题之一,DER ⇄ 原始格式转换器可以在两者之间转换。
硬件支持非常广泛:Apple 的 Secure Enclave 只生成 P-256 密钥,FIDO2 安全密钥和平台认证器通常也生成 P-256 通行密钥(passkey),对应 COSE 算法 −7(ES256)。与其他 NIST 曲线一样,b 由一个来源没有文档说明的 SHA-1 种子推导而来,这也是部分协议设计者更青睐 Curve25519 的原因之一;至今尚未发现 P-256 存在任何弱点。
各标准中的名称
| 标准 | 名称 |
|---|
| NIST FIPS 186-5 / SP 800-186 | P-256 |
| SEC 2 | secp256r1 |
| ANSI X9.62 | prime256v1 |
| JOSE / COSE | P-256 |
| SSH | nistp256 |
域参数
256 位素域 · 约 128 位安全强度
- 域素数 p
- 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff
- 系数 a
- 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc
- 系数 b
- 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b
- 基点 x 坐标
- 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296
- 基点 y 坐标
- 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5
- 基点的阶 n
- 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551
- 余因子 h
- 0x1
- 种子
- 0xc49d360886e704936a6678e1139d26b7819f7e90
用于
- TLS 1.3
- X.509 / Web PKI
- JOSE (ES256)
- COSE (ES256, ESP256)
- SSH (ecdsa-sha2-nistp256)
- DNSSEC (algorithm 13)
- WebAuthn / passkeys
- Apple Secure Enclave
← 全部曲线