ECDSA 椭圆曲线签名 使用指南
以 secp256k1 为例,私钥 d 生成公钥 Q=d·G;对消息哈希 e 用随机数 k 产出签名 (r,s),验证用公钥与 G。…
核心功能
- 在浏览器内生成 P-256 / P-384 椭圆曲线密钥对
- 可选 SHA-256 / SHA-384 / SHA-512 作为签名前的摘要算法
- 对消息签名并用公钥验签,签名值可输出 Base64 或十六进制
- 用于核对密钥配对与 alg 头一致性,签发前先自测
适用场景
- 比特币、TLS 证书用 ECDSA 做轻量高安全签名。
- 给内部服务签发 JWT 时用 ES256:验签一次确认公钥与私钥配对、签名算法与头部 alg 一致,避免上线后才发现密钥错配。
使用步骤
- 选择曲线(P-256 对应 JWT 的 ES256,P-384 对应 ES384)
- 点生成密钥对,保存私钥;公钥可公开分发给验签方
- 选择摘要算法,一般与曲线配对:P-256 配 SHA-256、P-384 配 SHA-384
- 输入待签名消息(如 JWT 的 header.payload),点签名得到签名值
- 把公钥与签名值交给对方验签;验签失败先查 alg 与摘要算法是否一致
实用技巧
- 必须使用符合规范的随机源
- 给内部服务签发 JWT 时用 ES256:验签一次确认公钥与私钥配对、签名算法与头部 alg 一致,避免上线后才发现密钥错配。
常见问题
- ECDSA 为何比 RSA 短?
- 256 位椭圆曲线安全性≈3072 位 RSA,密钥更短。
- 为什么每次签名结果都不一样?
- ECDSA 签名依赖一个随机数 k,同一消息两次签名会得到不同但都有效的签名,这是正常且必要的设计——若 k 重复或可预测,攻击者可直接反推私钥(2010 年索尼 PS3 被攻破正是因此)。必须使用符合规范的随机源。