让我们来看看ECDSA的数学原理。签名是通过一个数学函数Fsig生成的,它产生由两个值组成的签名。在ECDSA中,这两个值是R和s。
签名算法首先生成一个私密nonce(k),并从中派生一个公共nonce(K)。数字签名的R值然后是nonce K的x坐标。
然后,算法计算签名的s值。就像我们在schnorr签名中所做的那样,涉及整数的操作都是模p进行的:
其中:
- k 是私密nonce
- R 是公共nonce的x坐标
- x 是Alice的私钥
- m 是消息(交易数据)
验证是签名生成函数的逆函数,使用R、s值和公钥计算一个值K,它是椭圆曲线上的一个点(在签名创建中使用的公共nonce):
其中:
- R 和 s 是签名值
- X 是 Alice 的公钥
- m 是消息(被签名的交易数据)
- G 是椭圆曲线的生成点
如果计算得到的点 K 的 x 坐标等于 R,则验证者可以得出签名是有效的结论。
{% hint style="info" %} ECDSA 的数学过程相当复杂;本书的范围之外无法完整解释。有许多在线优秀指南会逐步带领您了解它:搜索“ECDSA 解释”。 {% endhint %}