secp256k1 vs ed25519:加密货币中的椭圆曲线
目录
每笔加密货币交易都需要数字签名——这是发送资金的人确实控制该账户的数学证明。该签名由依赖椭圆曲线属性的算法产生。主导区块链世界的两条曲线是 secp256k1 和 ed25519。它们服务于相同的基本目的,但在设计、性能特征和采用历史方面非常不同。
本指南解释椭圆曲线在密码学中的作用、secp256k1 和 ed25519 的区别,以及这些差异对密钥生成、钱包安全和您使用的区块链意味着什么。
什么是椭圆曲线?¶
在密码学的语境中,椭圆曲线是由方程 y^2 = x^3 + ax + b(对于 secp256k1 等曲线)或相关形式(对于 ed25519 等曲线)定义的数学结构。椭圆曲线密码学(ECC)的安全性基于椭圆曲线离散对数问题(ECDLP):给定曲线上的点 P 和点 Q = k * P(其中 k 是标量,* 表示点乘法),从 P 和 Q 单独确定 k 在计算上是不可行的。
用加密货币术语来说:
如果知道 Q 和用 k 产生的签名,任何人都可以验证 Q 匹配 k * P,但没有人能从 Q 中提取 k。这就是为什么分享您的公钥(和由它派生的地址)是安全的,同时保持私钥的秘密。
ECC 以更小的密钥大小提供与 RSA 相同的安全性。256位椭圆曲线密钥提供的安全性大致等同于3,072位 RSA 密钥。这种紧凑性对区块链至关重要,因为交易的每个字节都需要存储和带宽成本。
secp256k1:Bitcoin 和 Ethereum 的曲线¶
secp256k1 是 Bitcoin、Ethereum 及其生态系统中大多数区块链使用的椭圆曲线。名称分解如下:
- sec — 高效密码学标准
- p — 曲线定义在素数域上
- 256 — 素数长度为256位
- k — 这是 Koblitz 曲线(具有计算效率优势的特定类别)
- 1 — 它是该标准中此类型的第一条(也是唯一一条)曲线
曲线方程为:y^2 = x^3 + 7(在素数 p = 2^256 - 2^32 - 977 定义的有限域上)。
中本聪在2009年为 Bitcoin 选择了 secp256k1。当时,这是一个不寻常的选择。大多数系统使用 NIST P-256 曲线(也称为 secp256r1)。secp256r1 中的"r"表示它使用可验证随机种子作为参数,而 secp256k1 的参数是为计算效率而选择的,而非随机性。一些密码学家长期担忧 NIST 曲线的参数可能受到 NSA 的影响——2013年 Dual_EC_DRBG 丑闻加剧了这种担忧。secp256k1 完全避免了这种怀疑,因为其参数简单透明:a = 0, b = 7。
签名:ECDSA¶
在 Bitcoin 和 Ethereum 中与 secp256k1 配对的签名算法是 ECDSA——椭圆曲线数字签名算法。当您发送 Bitcoin 或 Ethereum 交易时,钱包使用 ECDSA 从您的私钥和交易哈希生成签名。网络上的验证者使用您的公钥验证此签名。
secp256k1 上的 ECDSA 签名为64字节(两个32字节的值,通常称为 r 和 s),加上某些实现包含的恢复字节。使用 RFC 6979 时它们是确定性的(Bitcoin 和 Ethereum 都使用),意味着相同的消息和私钥始终产生相同的签名——签名时不需要随机性。
ECDSA 的一个特点是签名延展性:给定一个有效签名 (r, s),对 (r, -s mod n) 也是有效的。Bitcoin 通过 BIP66(严格 DER 编码)然后 SegWit 解决了这个问题。Ethereum 通过强制 s 的规范形式来解决。
性能¶
优化实现(如 Bitcoin Core 使用的 libsecp256k1)上的 secp256k1 验证速度快:在现代硬件上每秒数千次验证。然而,ECDSA 签名和验证本质上比 EdDSA(与 ed25519 配对的算法)更复杂,EdDSA 从一开始就为速度而设计。
ed25519:Solana 的现代选择¶
ed25519 是由 Daniel J. Bernstein 及其合作者设计的椭圆曲线。它于2011年发布,比 Bitcoin 推出晚两年,代表了优先考虑安全性和性能的新一代曲线设计。
名称指的是在素数域 2^255 - 19 上的 Edwards 曲线形式(因此是"25519")。使用的特定曲线是名为"edwards25519"的扭曲 Edwards 曲线,它与 Curve25519(广泛用于密钥交换,例如在 Signal 和 TLS 1.3 中)双有理等价。
Solana 选择 ed25519 作为其签名曲线,其他几个现代区块链也是如此。这一选择反映了 ed25519 在吞吐量方面的优势——这是 Solana 高性能架构的关键考虑。
签名:EdDSA¶
与 ed25519 配对的签名算法是 EdDSA——Edwards 曲线数字签名算法。具体来说,Solana 使用 Ed25519(使用 edwards25519 的 EdDSA),产生64字节的签名。
EdDSA 的设计避免了 ECDSA 的陷阱:
- 签名时不需要随机性。 EdDSA 签名本质上是确定性的——随机数从私钥和消息通过哈希派生。使用 ECDSA 时,签名期间糟糕的随机数生成器可以完全泄露私钥(2010年 Sony PS3 签名密钥就发生了这种情况)。
- 没有签名延展性。 EdDSA 签名只有单一规范形式。
- 更快的批量验证。 多个 Ed25519 签名可以同时验证,比逐个验证更快——这对高吞吐量区块链是显著优势。
- 更简单的实现。 算法的边缘情况和分支条件更少,减少了侧信道攻击的攻击面。
性能¶
Ed25519 在基准测试中始终比 ECDSA-secp256k1 快。签名大约快2-3倍,单签名验证大致相当,但批量验证是 Ed25519 真正闪耀的地方——它可以比逐个验证显著更快地验证数百个签名。在 Solana 上,区块可能包含数千笔交易,这种性能差异是实质性的。
ECDSA vs EdDSA:直接比较¶
| 属性 | ECDSA (secp256k1) | EdDSA (ed25519) |
|---|---|---|
| 曲线类型 | Short Weierstrass | 扭曲 Edwards |
| 密钥大小 | 256 位 | 256 位 |
| 签名大小 | 64-65 字节 | 64 字节 |
| 安全级别 | ~128 位 | ~128 位 |
| 签名速度 | 快 | 更快(2-3倍) |
| 验证速度 | 快 | 相当(单个),更快(批量) |
| 确定性签名 | 可选(RFC 6979) | 内置(设计如此) |
| 签名延展性 | 可能(实践中已缓解) | 无 |
| 随机数漏洞 | 是(糟糕的 RNG 泄露密钥) | 否(随机数从密钥+消息派生) |
| 采用 | Bitcoin、Ethereum、BNB Chain、Tron、Dogecoin、Litecoin | Solana、XRP(部分)、Cardano、Polkadot |
两种算法都提供大约128位安全性,意味着攻击者需要执行大约 2^128 次操作才能破解密钥。这远超任何当前或可预见的经典计算机的能力。差异在于实现安全性和性能,而非原始安全强度。
有关密钥安全实践中的深入了解,请参阅私钥安全最佳实践。
哪些链使用哪种?¶
曲线的选择是区块链做出的最基本的架构决策之一。以下是主要网络的分类:
secp256k1 链¶
- Bitcoin — 原始链。标准交易使用 ECDSA 配合 secp256k1,Taproot 使用 Schnorr 签名(同样在 secp256k1 上)。
- Ethereum — ECDSA 配合 secp256k1。所有 EVM 兼容链继承此选择。
- BNB Chain — EVM 兼容,使用 secp256k1。
- Polygon — EVM 兼容,使用 secp256k1。
- Arbitrum 和 Optimism — Ethereum L2,继承 secp256k1。
- Tron — 使用 secp256k1 配合 ECDSA。
- Dogecoin — Bitcoin 分叉,使用 secp256k1。
- Litecoin — Bitcoin 分叉,使用 secp256k1。
- Avalanche(C-Chain)— EVM 兼容,使用 secp256k1。
ed25519 链¶
- Solana — 专门使用 Ed25519。这是 Solana 能每秒处理数千笔交易的核心原因。
- XRP — 同时支持 secp256k1 和 ed25519。用户在生成密钥时可以选择使用哪条曲线。
- Cardano — 使用 Ed25519(特别是 Ed25519-BIP32,一种扩展变体)。
- Polkadot — 主要使用 Sr25519(Ristretto25519 上的 Schnorr),与 ed25519 密切相关。
这种分裂在很大程度上是代际的。2015年之前设计的区块链倾向于使用 secp256k1(遵循 Bitcoin 的先例)。2017年之后设计的区块链越来越多地倾向于 ed25519 或相关曲线。
对密钥生成的影响¶
椭圆曲线的选择直接影响密钥和地址的生成方式。如果您使用 SafeSeed 的工具,差异会自动处理,但理解它有助于您知道底层发生了什么。
secp256k1 密钥生成¶
- 生成一个随机256位数字(私钥)。它必须在1和
n - 1之间,其中 n 是 secp256k1 的阶(~2^256)。 - 计算公钥:将私钥与 secp256k1 上的生成点 G 相乘。结果是曲线上的一个点 (x, y)。
- 未压缩的公钥为65字节(04前缀 + 32字节 x + 32字节 y)。压缩形式为33字节(02或03前缀 + 32字节 x)。
- 哈希公钥以生成地址(Bitcoin 用 SHA-256 + RIPEMD-160;Ethereum 用 Keccak-256)。
您可以使用 Bitcoin 私钥生成器或 Ethereum 私钥生成器生成 secp256k1 密钥。
ed25519 密钥生成¶
- 生成一个随机32字节种子(不同于 BIP39 种子——这是原始密钥材料)。
- 用 SHA-512 哈希种子以产生64字节。前32字节(特定位被钳位后)成为用于签名的标量。后32字节用于签名期间的随机数生成。
- 计算公钥:将标量与 edwards25519 上的基点 B 相乘。结果是一个32字节的压缩点。
- 地址格式取决于链。在 Solana 上,公钥本身(Base58编码)就是地址。
您可以使用 Solana 私钥生成器生成 ed25519 密钥。
跨曲线影响¶
因为 secp256k1 和 ed25519 在数学上不兼容,一条曲线上有效的私钥与另一条曲线上的密钥没有有意义的关系。当您在同时支持 Bitcoin 和 Solana 的钱包中恢复助记词时,钱包从同一主种子运行两个完全独立的派生过程——一个使用 secp256k1 用于 Bitcoin/Ethereum 账户,另一个使用 ed25519 用于 Solana 账户。共享的种子是它们之间唯一的连接。
这就是为什么派生路径包含币种类型:Bitcoin 的路径(m/44'/0'/0'/0/0)和 Solana 的路径(m/44'/501'/0'/0')在币种类型级别分支,每个分支使用其各自的曲线。有关派生路径如何跨链工作的详细解释,请阅读 HD 钱包和派生路径详解。
量子计算呢?¶
secp256k1 和 ed25519 对足够强大的量子计算机运行 Shor 算法同样脆弱,该算法可以在多项式时间内求解离散对数问题。两条曲线都不比另一条"更抗量子"。密码学社区正在开发后量子签名方案,但尚无主要区块链迁移到其中之一。有关当前评估,请参阅量子计算与加密货币威胁。
选择正确的工具¶
作为用户,您不直接在 secp256k1 和 ed25519 之间选择。您使用的区块链为您做出了这个选择。Bitcoin 和 Ethereum 要求 secp256k1。Solana 要求 ed25519。您能选择的是使用正确实现您的链所需曲线的工具。
SafeSeed 的生成器自动处理这一点。Bitcoin 助记词生成器派生 secp256k1 密钥。Ethereum 助记词生成器同样如此。Solana 助记词生成器派生 ed25519 密钥。所有生成器完全在客户端运行,使用您浏览器的 Web Crypto API 进行安全随机数生成。没有私钥材料离开您的设备。
了解您的区块链底层曲线不会改变您日常使用钱包的方式。但它确实帮助您理解为什么 Solana 地址看起来与 Ethereum 地址不同,为什么您不能在 Ethereum 上使用原始 Solana 私钥,以及为什么您资金背后的安全假设如此强大。这些曲线是加密货币所有权的数学基石——在正常使用中不可见,但绝对是基础性的。