P-256NIST P-256)是一条标准化的 256 位素数域椭圆曲线,也叫 secp256r1prime256v1,常作为 ECDSA 签名和椭圆曲线密钥交换的底层曲线参数。

核心问题

椭圆曲线算法不能只说“用椭圆曲线”,还必须约定具体曲线。P-256 解决的是“大家使用同一套公开、可互操作的 256 位曲线参数”的问题。

选择 P-256 后,系统就同时约定了有限域、曲线方程、公开基点 G、基点阶 n 和余因子 h。这些参数公开且固定,不是每个设备或每个用户单独生成的。

核心机制

P-256 是短 Weierstrass 形式曲线,定义在素数域 GF(p) 上:

y^2 = x^3 + a*x + b mod p

一条可用于 ECC 的曲线通常由六元组描述:

T = (p, a, b, G, n, h)

各对象含义是:

符号含义
p有限域大小,所有坐标运算都对 p 取模
a, b曲线方程参数,决定曲线形状
G公开基点,所有使用 P-256 的实现都知道它
n基点 G 的阶,也就是 nG = O
h余因子,P-256 中为 1

实际生成密钥时:

私钥 d:1 <= d < n 的随机整数
公钥 Q:Q = dG

这里的 dG椭圆曲线标量乘法,不是普通坐标乘法。G 是标准曲线的公共基准点;d 才是秘密;Q 是公开的公钥点。

P-256 本身不是签名算法。它是曲线参数;当它和 ECDSA 组合时,常被称为 ECDSA P-256,JWT 里常见算法名是 ES256

工程用途

  • TLS / HTTPS:服务器证书、公钥协商和握手签名中常见 P-256。
  • WebAuthn / FIDO2:许多安全密钥和平台认证器支持 P-256。
  • JWT / OAuthES256 表示使用 ECDSA + P-256 + SHA-256。
  • 云 KMS 和 HSM:主流云厂商通常支持 P-256 签名密钥。
  • 固件和软件签名:设备内置 P-256 公钥后,可以验发布侧的 ECDSA 签名。

观察点包括曲线名称、哈希算法、签名编码、压缩/非压缩公钥格式、密钥用途和实现是否通过 FIPS 或平台认证。

边界与常见坑

  • P-256 不是 secp256k1:两者都是 256 位素数域曲线,但参数、基点、公钥和签名都不兼容。
  • P-256 不是签名格式:签名可能是 DER 编码,也可能是 raw r || s,这取决于协议和库。
  • 公钥只存 Q,不存私钥 d:设备验签只需要 P-256 曲线参数、签名算法和公钥点。
  • 曲线名要对齐库接口:有些库叫 P-256,有些叫 secp256r1prime256v1,含义通常相同。
  • ECDSA 仍依赖 nonce 安全:P-256 本身不消除 ECDSA 一次性数错误导致私钥泄露的风险。
  • 不要自定义参数:除非做密码学研究或标准实现,工程系统应选择标准曲线而不是自己造曲线。

相关术语