比特币系统之所以让新入局者感到困惑,关键在于其背后的加密技术彻底革新了传统的“所有权”观念。接下来,我们将深入剖析这一颠覆性的加密算法——ECDSA(椭圆曲线数字签名算法),揭示其如何确保比特币系统的安全,并重新定义“拥有”比特币的含义。
传统所有权概念与比特币的差异在传统认知中,“拥有”某个物品,如房产或金钱,意味着该物品要么由个人直接保管,要么托付给如银行等可信实体代为管理。然而,比特币的“拥有”方式截然不同。比特币并非集中存储或本地存储于某一实体处,而是以交易记录的形式存放在一个称为“区块链”的分布式账本中,该账本的副本在网络中由众多互联计算机自愿维护。因此,“拥有”比特币,实质上是指具备转移控制权的能力,即通过在区块链中创建一笔转账记录来实现所有权的转移。那么,这种能力如何得到保障呢?答案便是ECDSA私钥、公钥密钥对。接下来,我们详细解读ECDSA的工作原理。
ECDSA详解ECDSA全称为椭圆曲线数字签名算法,是一种利用椭圆曲线和有限域特性对数据进行“签名”的过程。这种签名方式既能确保第三方能够验证签名的真实性,又能保证签名者对其签名具有唯一生成能力。在比特币系统中,被“签名”的数据即为转移所有权的交易记录。ECDSA将签名和验证过程分开,各自由一系列算术运算组成的算法执行。其中,签名算法使用私钥,验证算法则依赖公钥。下面,我们先快速了解椭圆曲线和有限域的基础知识。
椭圆曲线基础椭圆曲线在代数表达上通常为以下方程:
y = x + ax + b
对于比特币系统而言,a = 0,b = 7。其图形如下所示:
椭圆曲线具备若干重要特性,如一条非垂直直线与椭圆曲线相交于两点时,若两点均非切点,必定存在第三点与该直线在曲线上相交。此外,过曲线上任意一点作非垂直切线,该切线与曲线仅有一个其他交点。基于这些特性,我们可以定义两种基本运算:“异点相加”(P + Q = R)和“同点加倍”(P + P = R),并通过这两种运算进一步实现“标量乘法”(R = aP)。
有限域简介ECDSA中的有限域可理解为预定义的正数区间,确保在此区间内进行的各类运算结果仍处于该区间内(即对加法运算封闭)。实现这一目标的简单方法是采用模运算(mod),即将超出区间的数值“回绕”至区间内。例如,9除以7的余数为2,表示为:
9 mod 7 = 2
此处,有限域的模数为7,所有在此域内进行的模运算结果均落在0到6的范围内。
椭圆曲线与有限域的结合应用ECDSA中使用的椭圆曲线基于一个有限域,使得曲线形态发生显著变化,而非改变其基础方程或特殊属性。以同样的方程为例,在模数为67的有限域中绘制后的曲线呈现如下形态:
此时,曲线变为由一系列坐标为0至66间整数的点组成,且保持水平方向的对称性。“异点相加”和“同点加倍”在视觉上略有调整,需考虑水平和垂直方向的“回绕”,如同“小行星”游戏中的运动轨迹。例如,(2,22)和(6,25)“异点相加”的情况如下:
第三个交点为(47,39),其基于x轴的反射点为(47,28)。(28 = 67 - 39)
ECDSA与比特币的关联比特币等协议为椭圆曲线及其有限域选择一组固定参数,所有用户遵循同一套参数。这些参数包括椭圆曲线方程、有限域的质数模数、曲线上的“基点”G及其“序次”n。其中,“序次”并非单独选定,而是与其它参数相关联,可通过不断将基点G与其自身相加直至切线斜率趋于无穷大(或成为平行线)来计算得出其叠加次数。实际应用中,ECDSA所采用的数值极大,确保了算法的高度安全性,使暴力破解或逆向工程变得不切实际。比特币系统所采用的参数如下:
椭圆曲线方程:y = x + 7
质数模数:FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
基点:04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
序次:FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
这些数值的选择涉及大量研究,同时也伴随着有关可能存在后门的阴谋论。特定实现secp256k1属于密码学领域广泛采用的基于有限域椭圆曲线解决方案之一。
私钥与公钥撇开参数选择问题,现在我们聚焦于私钥、公钥及其相互关系。简而言之,ECDSA中私钥是一个通过不可预测方式在1与“序次”之间选择的数。公钥由私钥通过标量乘法与基点G计算得出,公式为:
公钥 = 私钥 × 基点
这意味着私钥最大可能数值等于“序次”,即比特币地址总数。
在连续域上,我们可以通过绘制切线并标记公钥点来直观理解密钥构建及签名验证过程。在有限域上,同样有相应的公式实现相同操作。以下是“异点相加”(p + q → r)和“同点加倍”(p → p + p)的分量表示计算公式:
“异点相加”:
c = (qy - py) / (qx - px) mod n
rx = c - px - qx mod n
ry = c (px - rx) - py mod n
“同点加倍”:
c = (3px + a) / 2py mod n
rx = c - 2px mod n
ry = c (px - rx) - py mod n
实际计算中,公钥的生成过程被分解为从基点G开始的一系列“同点加倍”和“异点相加”操作。
接下来,我们以一个较小数值为例,演示底层运算过程,以便直观理解密钥如何构建以及如何用于签名和验证。所用参数如下:
方程:y = x + 7(即:a = 0, b = 7)
质数模数:67
基点:(2,22)
序次:79
私钥:2
1.计算公钥。由于选择的私钥数值为2,只需对基点G进行一次“同点加倍”运算。计算过程如下:
...
由此得出,公钥对应的点为(52,7)。以上即为数值为2的私钥生成公钥的完整运算过程!
相较于从公钥推导私钥,从私钥到公钥的计算相对容易。在实际椭圆曲线加密中,虽然理论上公钥可逆推出私钥,但由于参数数值巨大,计算上几乎不可能实现。因此,从私钥到公钥的转换本质上是单向的。
与私钥类似,公钥通常