Elea Notes.

词条 · 加密与分布式 · 深入

椭圆曲线

曲线上的一种加法:往前算很快,倒着推回来做不到。比特币用它生成签名,但白皮书里从没提过它。

也称:椭圆曲线、elliptic curve、ECDSA、ECC、secp256k1、椭圆曲线数字签名

先看一个麻烦

密钥对需要一个”正向易算、反向不可行”的数学关系(见密钥对)。这种关系从哪来?

RSA 用的是大数分解:把两个大素数乘起来容易,把乘积拆回去难。可行,但要达到足够强度,密钥得很长(2048 位以上)。对一个每笔交易都要带签名的系统,这个开销太大。

朴素办法:把 RSA 的密钥调短一点

不行。密钥变短,分解难度断崖式下降。RSA 的安全性和长度绑得很紧,没有折扣可拿。

需要的是一个同等安全性下更省位数的难题。

机制:曲线上的点做加法

椭圆曲线是形如

y2=x3+ax+by^2 = x^3 + ax + b

的曲线。在这类曲线上可以定义一种”加法”:取两点连一条直线,交曲线于第三点,翻转得到结果。这个运算封闭、可结合,构成一个群。

于是”把一个点 G 自己加 k 次”(记作 kG)是有意义的。而难题在于:

已知 G 和 k  ->  算 kG        容易(快速倍点法)
已知 G 和 kG ->  求 k         不可行(离散对数问题)

私钥就是那个整数 k,公钥就是点 kG。

省位数的优势非常实在:256 位的椭圆曲线密钥,安全强度约等于 3072 位的 RSA。比特币用的曲线叫 secp256k1,私钥是一个 256 位整数。

回访:白皮书完全没提这件事

这是术语考古里最值得注意的一条。白皮书里:

  • ECDSA 出现 0
  • elliptic 出现 0
  • 甚至具体的签名算法一个字都没提

原文只用泛称 digital signatures(数字签名)。哈希也一样,只说 such as with SHA-256——举例,不是规定。

这个留白是有意的。中本聪写的是架构,不是实现规范:只要有一个能签能验的签名方案、一个抗碰撞的哈希,这套设计就成立。选哪个具体算法是实现细节,写在代码里而非论文里。

所以”比特币白皮书规定了 ECDSA”是错的。secp256k1 这个选择只存在于中本聪的第一版代码中。

边界

椭圆曲线密码不抗量子。Shor 算法能高效解离散对数,所以足够强的量子计算机会破掉 ECDSA。这是比特币的一个真实长期风险,但和白皮书无关——原文的架构允许换掉签名方案。

另外”椭圆曲线”和”椭圆”没什么关系,名字来自历史上研究椭圆弧长时出现的积分。曲线本身不是椭圆形。