BTC中的签名算法ECDSA

2019-02-03  本文已影响0人  _AlphaBaby_

数字签名

如果要了解ECDSA算法必须先要知道数字签名是什么?有什么用?然后再去讨论应该怎样构造数字签名。
这篇文章我会以这样的思路去叙述?如果对数字签名已经了解足够多的读者可以跳过前面部分直接看后面部分的具体算法。

什么是数字签名?

百度百科是这样给出的定义:

符号解释

  • 大写的P值的是前面生成的随机公钥,P其实是一个坐标点(为什么是这样参考椭圆曲线算法,也可以看看前面我给出的文章)
  • Hash(M)是用哈希函数计算一个合同的哈希值,也可以加做计算合同的数字指纹
  • dA是你自己的私钥,这是保密的,不能给别人泄露的,泄漏了别人就可以伪造了
  • p是我们在椭圆曲线中,选定有限域的时候选定好的一个大整数
  • R是临时随机密钥对中公钥P的x坐标
    提醒
    其中的k的-1次方并不是我们高中所学的就是等于1/k,这里的-1次方是值得是k的逆元。如果要真正理解逆元的概念推荐去学一下离散数学。这里就不过多的解释了。

这样我们就生成了这个合同的数字签名


我们可以把这个数字签名加上合同M发给别人了,然后别人就可以用你的公钥和合同还有签名就可以验证这个合同了,具体的验证如下:

这样把别人发来的合同和签名,在加上签名着的公钥(公钥匙公开的,这里不讨论怎么获取到签名者对应的公钥),把这些东西向上面计算出一个P'出来,然后得到一个P'的x坐标x',然后对比R和x'是否相等,那么验证签名成功,那就说明这合同是某某人发出来的,并且没有被篡改。

下面我给大家证明下这个为什么成立(数学要求比较强,可忽略)

符号解释

  • PA是签名者的公钥,是dA对应的公钥
  • 其他的符号和上面一样

其中内容部分参考于,《精通比特币第二版》
推荐国外一大佬文章:Understanding How ECDSA Protects Your Data.

上一篇下一篇

猜你喜欢

热点阅读