椭圆曲线密码学(ECC)以更小的密钥提供比 RSA 更强的安全性。它驱动着现代 TLS、比特币和大多数移动认证系统。本文解释 ECC 的核心概念和实践用法。
什么是 ECC?
ECC 是一种基于有限域上椭圆曲线代数结构的非对称密码学。其安全性依赖于椭圆曲线离散对数问题(ECDLP)——给定曲线上的点 Q = k·G,找到 k 在计算上不可行。
为什么选择 ECC 而非 RSA?
| 属性 | RSA-2048 | ECC-256 | ECC-384 |
|---|---|---|---|
| 安全位数 | ~112 | ~128 | ~192 |
| 密钥大小 | 2048 位 | 256 位 | 384 位 |
| 签名大小 | 256 字节 | 64 字节 | 96 字节 |
| 密钥生成 | ~100ms | ~1ms | ~2ms |
| 签名/验证 | 较慢 | 快得多 | 快 |
| TLS 握手 | 较慢 | 更快 | 快 |
安全性相当的情况下,ECC 密钥比 RSA 密钥小 10 倍。
常用椭圆曲线
P-256(secp256r1 / prime256v1)
- NIST 标准曲线
- 用于 TLS、JWT(ES256)、Android、iOS
- 128 位安全
- 兼容性最广
P-384(secp384r1)
- NIST 标准曲线
- 用于政府/高安全性应用
- 192 位安全
secp256k1
- 比特币使用的曲线
- 用于以太坊、大多数加密货币
- 非 NIST 曲线,但在区块链中广泛使用
Curve25519 / Ed25519
- 现代高度优化的曲线
- 设计上避免了实现陷阱
- 用于 SSH、Signal、WireGuard
- 新系统推荐(在兼容性允许的情况下)
ECDSA——椭圆曲线数字签名算法
ECDSA 是最常见的基于 ECC 的签名方案。
ECDSA 签名过程
- 生成随机 Nonce k
- 计算点 R = k·G,取 x 坐标为 r
- 计算 s = k⁻¹(hash(消息) + r·私钥) mod n
- 签名 = (r, s)
ECDSA 验证过程
- 计算 u1 = hash(消息) · s⁻¹ mod n
- 计算 u2 = r · s⁻¹ mod n
- 计算点 X = u1·G + u2·公钥
- 验证 X.x ≡ r (mod n)
关键警告:Nonce 重用是灾难性的
如果两个不同签名使用了相同的 Nonce k,私钥可以被数学推导出来。PlayStation 3 在 2010 年就是这样被破解的。
每次签名都必须使用密码学安全的随机 Nonce。
ECDH——椭圆曲线 Diffie-Hellman
ECDH 用于密钥协商——双方在不传输密钥的情况下推导出共享密钥。
ECDH 工作原理
- Alice 有私钥
a,公钥A = a·G - Bob 有私钥
b,公钥B = b·G - Alice 计算:
S = a·B = a·b·G - Bob 计算:
S = b·A = b·a·G - 双方得到相同的共享密钥
S
该共享密钥随后用于派生 AES 密钥进行对称加密。
ECC 在支付安全中的应用
ECC 在支付系统中的应用日益广泛:
- EMV 芯片卡:ECDSA 用于卡片认证
- VISA 证书:基于 ECDSA 的证书链 —— 参见 VISA 证书工具
- SSL/TLS:支付网关中 ECDHE 用于密钥交换 —— 参见 SSL 证书解析器
ECC 与 RSA:如何选择
选择 ECC 的场景:
- 构建新系统
- 性能敏感(移动端、IoT、高并发)
- 密钥/签名大小重要(带宽、存储)
- 现代 TLS(ECDHE 密码套件)
坚持使用 RSA 的场景:
- 需要兼容遗留系统
- 与旧硬件 HSM 互操作
- 法规要求指定使用 RSA
在线工具
使用我们的 ECC 加密工具:
- 生成 ECC 密钥对(P-256、P-384、P-521、secp256k1)
- 使用 ECDSA 签名消息
- 验证 ECDSA 签名
- 执行 ECDH 密钥协商
- 以 PEM/DER 格式导出密钥