首页/我的作品/密码学/6.4 椭圆曲线(ECC):为什么比特币选择了它
密码学:守护数字世界的秘密

6.4 椭圆曲线(ECC):为什么比特币选择了它

第 36 / 78 篇 · Crazy Boy

RSA诞生后,公钥密码学从理论走向实践。但RSA有一个天生的弱点:为了保证安全,密钥必须足够长。随着计算能力的提升,RSA密钥长度从512位增长到1024位,再到2048位,甚至3072位。密钥越长,计算越慢,功耗越高。在资源受限的设备(如智能卡、物联网设备)上,RSA变得笨重不堪。

密码学家们开始寻找一种更高效的替代方案。1985年,两位数学家尼尔·科布利茨和维克托·米勒分别独立提出了一种基于椭圆曲线的公钥密码系统。它用更短的密钥,提供了与RSA同等级别的安全,而且计算更快、功耗更低。这就是椭圆曲线密码学(Elliptic Curve Cryptography,ECC)。

椭圆曲线是什么?——不是椭圆,是数学游乐场

椭圆曲线这个名字可能会让人误解——它和椭圆没什么关系,而是一类特定的数学曲线。它的标准方程是:

y² = x³ + ax + b

这条曲线看起来像这样(可以画一个示意图:一条左右对称的曲线,有两个分支或一个弯)。在密码学中,我们只关心曲线上的一些特殊点,以及这些点之间的“加法”运算。

你可能会问:曲线上怎么定义加法?别急,它不是你熟悉的数字加法,而是一种几何运算:

  • 如果曲线上有两点P和Q,画一条直线穿过它们,这条直线会和曲线交于第三点R’。然后,以R’为基准做垂线(关于x轴对称),得到的点R就是P+Q的结果。
  • 如果P和Q是同一个点,那就画切线,同样找到交点,再对称得到P+P(记作2P)。
  • 如果P和Q互为对称点(即关于x轴对称),那么直线是垂直的,没有第三个交点——我们定义它们的和为无穷远点O,类似于加法中的0。

这种运算构成一个群:封闭性、结合律、有单位元(无穷远点)、每个点都有逆元(关于x轴对称的点)。你可以反复做加法:P+P=2P,2P+P=3P,等等。从P出发,不断加自身,可以得到一系列点:P, 2P, 3P, 4P, … 这个过程称为标量乘法。

椭圆曲线上的困难问题

现在,想象你有两个点:P和Q,且Q = kP(即Q是P加自身k次的结果)。给定P和Q,让你找出k——这就是椭圆曲线离散对数问题(ECDLP)。

正向计算(从k和P得到Q)很容易,反向求解(从P和Q得到k)却极其困难。这正是构造公钥密码所需的“单向函数”。与RSA的大数分解问题相比,ECDLP的难度更大——这意味着破解椭圆曲线需要更长的计算时间,或者说,在同等安全强度下,ECC的密钥可以比RSA短得多。

ECC vs RSA:一场不对等的竞赛

让我们做一个直观的对比:

安全强度 RSA密钥长度 ECC密钥长度
80位 1024位 160位
112位 2048位 224位
128位 3072位 256位
256位 15360位 512位

256位的ECC提供与15360位的RSA相当的安全性——密钥长度只有后者的1/60!这意味着:

  • 计算更快:生成密钥、加密、解密、签名、验证都大大加速。
  • 带宽更省:密钥短,网络传输量小。
  • 存储更少:适合资源受限的设备。

正因如此,ECC已经成为现代密码学的主流。它被广泛应用于TLS协议、智能卡、移动设备、以及……区块链。

比特币的选择:secp256k1

2008年,中本聪发布比特币白皮书时,需要为比特币设计一套数字签名方案。他选择了ECC,具体来说是secp256k1曲线。

secp256k1是标准组织(SECG)定义的一条特定椭圆曲线,参数如下:

  • 方程:y² = x³ + 7
  • 素数p = 2^256 - 2^32 - 977
  • 基点G的阶(order)是一个很大的质数

为什么选择这条曲线?有几个原因:

  1. 高效性:secp256k1的参数选择使得计算可以高度优化。它的系数a=0,b=7,简化了运算。在比特币诞生之初,计算机性能有限,效率至关重要。

  2. 确定性:与一些随机生成的曲线不同,secp256k1是Koblitz曲线,它的参数是通过一个确定性的方法选择的,没有人为干预。这避免了“曲线参数中是否藏有后门”的疑虑。密码学界对随机生成的曲线总有些担心——万一选择参数的人故意挑了一条有弱点的曲线呢?secp256k1的透明性让它获得了信任。

  3. 安全性:经过多年密码分析,secp256k1被认为是安全的。虽然它不如某些更常见的曲线(如NIST P-256)那么流行,但同样经受住了考验。

  4. 简洁性:中本聪可能希望设计一个尽可能简单、没有复杂依赖的系统。secp256k1的简单形式(只有x³+7)符合这种哲学。

ECC在比特币中的应用

在比特币中,每个用户都有一对密钥:

  • 私钥:一个随机生成的256位整数,范围在1到n-1之间(n是基点G的阶)。这个数就是你的“秘密”。
  • 公钥:私钥k乘以基点G,得到点K = kG。这是椭圆曲线上的一个点,可以压缩成33字节(甚至20字节的地址)。

当你发起一笔交易时,需要用私钥对交易内容进行签名。签名算法是ECDSA(椭圆曲线数字签名算法),它是DSA的椭圆曲线版本。整个过程:

  • 用私钥和交易哈希生成一个签名(r, s)。
  • 任何人都可以用你的公钥验证这个签名,从而确认交易确实是你授权的,且内容未被篡改。

椭圆曲线的神奇之处在于,虽然私钥和公钥之间存在确定的关系(K = kG),但无法从公钥反推出私钥——这全靠ECDLP的困难性。

ECC的未来

随着量子计算的发展,ECC和RSA都面临着被Shor算法攻破的威胁。但至少在今天,ECC依然是区块链、TLS、SSH等系统的中流砥柱。比特币选择secp256k1是技术史上的一个重要决策,它奠定了整个加密货币生态的安全基础。

下一节,我们将看到RSA和ECC如何在实际中与对称加密协同工作——这就是混合加密,也是HTTPS背后真正的功臣。