Skip to content

Latest commit

 

History

History
38 lines (25 loc) · 1.23 KB

File metadata and controls

38 lines (25 loc) · 1.23 KB

ECDSA算法

让我们来看看ECDSA的数学原理。签名是通过一个数学函数Fsig生成的,它产生由两个值组成的签名。在ECDSA中,这两个值是R和s。

签名算法首先生成一个私密nonce(k),并从中派生一个公共nonce(K)。数字签名的R值然后是nonce K的x坐标。

然后,算法计算签名的s值。就像我们在schnorr签名中所做的那样,涉及整数的操作都是模p进行的:

$$ s = k^{-1}(Hash(m)+x*R) $$

其中:

  • k 是私密nonce
  • R 是公共nonce的x坐标
  • x 是Alice的私钥
  • m 是消息(交易数据)

验证是签名生成函数的逆函数,使用R、s值和公钥计算一个值K,它是椭圆曲线上的一个点(在签名创建中使用的公共nonce):

$$ K = s^{-1} * Hash(m) * G + s^{-1} * R * X $$

其中:

  • R 和 s 是签名值
  • X 是 Alice 的公钥
  • m 是消息(被签名的交易数据)
  • G 是椭圆曲线的生成点

如果计算得到的点 K 的 x 坐标等于 R,则验证者可以得出签名是有效的结论。

{% hint style="info" %} ECDSA 的数学过程相当复杂;本书的范围之外无法完整解释。有许多在线优秀指南会逐步带领您了解它:搜索“ECDSA 解释”。 {% endhint %}