# ECC 与 ECDSA：椭圆曲线密码学详解

> 了解椭圆曲线密码学——ECDSA 签名、ECDH 密钥协商、曲线选择，以及为什么 ECC 优于 RSA。

Canonical: https://hsmkit.com/zh/guides/ecc-digital-signatures-explained/

Last updated: 2026-04-03

椭圆曲线密码学（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 签名过程
1. 生成随机 Nonce **k**
2. 计算点 **R = k·G**，取 x 坐标为 **r**
3. 计算 **s = k⁻¹(hash(消息) + r·私钥) mod n**
4. 签名 = **(r, s)**

### ECDSA 验证过程
1. 计算 **u1 = hash(消息) · s⁻¹ mod n**
2. 计算 **u2 = r · s⁻¹ mod n**
3. 计算点 **X = u1·G + u2·公钥**
4. 验证 **X.x ≡ r (mod n)**

### 关键警告：Nonce 重用是灾难性的
如果两个不同签名使用了相同的 Nonce **k**，私钥可以被数学推导出来。PlayStation 3 在 2010 年就是这样被破解的。

**每次签名都必须使用密码学安全的随机 Nonce。**

## ECDH——椭圆曲线 Diffie-Hellman

ECDH 用于**密钥协商**——双方在不传输密钥的情况下推导出共享密钥。

### ECDH 工作原理
1. Alice 有私钥 `a`，公钥 `A = a·G`
2. Bob 有私钥 `b`，公钥 `B = b·G`
3. Alice 计算：`S = a·B = a·b·G`
4. Bob 计算：`S = b·A = b·a·G`
5. 双方得到相同的共享密钥 `S`

该共享密钥随后用于派生 AES 密钥进行对称加密。

## ECC 在支付安全中的应用

ECC 在支付系统中的应用日益广泛：

- **EMV 芯片卡**：ECDSA 用于卡片认证
- **VISA 证书**：基于 ECDSA 的证书链 —— 参见 [VISA 证书工具](/payments-visa-certificates)
- **SSL/TLS**：支付网关中 ECDHE 用于密钥交换 —— 参见 [SSL 证书解析器](/ssl-certificates)

## ECC 与 RSA：如何选择

**选择 ECC 的场景：**
- 构建新系统
- 性能敏感（移动端、IoT、高并发）
- 密钥/签名大小重要（带宽、存储）
- 现代 TLS（ECDHE 密码套件）

**坚持使用 RSA 的场景：**
- 需要兼容遗留系统
- 与旧硬件 HSM 互操作
- 法规要求指定使用 RSA

## 在线工具

使用我们的 [ECC 加密工具](/ecc-encryption)：

- 生成 ECC 密钥对（P-256、P-384、P-521、secp256k1）
- 使用 ECDSA 签名消息
- 验证 ECDSA 签名
- 执行 ECDH 密钥协商
- 以 PEM/DER 格式导出密钥

如需检查证书中的 ECC 密钥，使用 [ASN.1 解析器](/asn1-parser) 或 [SSL 证书解析器](/ssl-certificates)。
