搜索
您的当前位置:首页正文

比特币脚本指南(四)

来源:二三娱乐

CHECKSIG 工作原理

想知道CHECKSIG的工作原理,首先要知道何为数字签名。数字签名是公钥加密生成并认证的数字码,被附到电子传输文档中,作用是证明文档内容及发送人身份。

比特币使用的数字签名算法是ECDSA,椭圆曲线数字签名算法。

比特币、以太坊等都有使用椭圆曲线加密法。

椭圆曲线指满足下列等式的任意曲线:

Y^{2}=x^{3}+ax+b

其中(x,y)是曲线上的一点,a和b是常数。

满足等式的曲线N多。以下是一种比较常见的,长这样:

Image credit: CSBreakdown youtube channel  

椭圆曲线的属性

1. 曲线x轴对称。

2. 曲线任意两点连线都会在第三个点上与曲线相交。

3. 曲线的任何切线都会在另一个点上与曲线相交。

曲线上的数学运算

1. 曲线的加法属性

设曲线上有V和A两个点,两点间连线,连线与曲线相交于第三个点。

Image credit: CSBreakdown youtube channel  

设第三个点为X,X点的X轴映射,如下:

Image credit: CSBreakdown youtube channel

X的映射点恰好是(V + A),这就是椭圆曲线的加法属性。

捎带脚说个好玩的: X与(V + A)相加,得无穷大。 原因是X、(V + A)间的连线在无穷远处与曲线相交。

2. 曲线的乘法属性

想要两个相同点相加,好比,设点V,求2V。 可以在V点做切线,切线与曲线相交的点的X轴映射,就是2V。

Image credit: CSBreakdown youtube channel  

看上去是加法,其实也是曲线的乘法属性。把V想成整数,V+V,相当于V*2。

下面,找找3V。

V、2V两点连线,与曲线交点的映射,就对了。

Image credit: CSBreakdown youtube channel  

有没有发现,所有的点,都只在曲线上蹦来蹦去。 椭圆曲线的安全性也来源于此。

椭圆曲线的算术属性

属性1:曲线上的点形成阿贝尔群

阿贝尔群的属性如下:

1. 每个点有属于自己的身份。

2. 每个点都有自己的映射。

3. 满足结合律:(A + B)+ C = A +(B + C)。

4. 曲线上的点是闭包的,意思是若A、B都在曲线上,则A + B也是在曲线上。

5. 满足交换律: A + B = B + A.

属性2:曲线上做乘法很快

设点P,求100P。 不用PP相加99次,可以这么干:

P + P= 2P

2P + P= 3P

3P + 3P= 6P

6P + 6P= 12P

12P + 12P= 24P

24P + P= 25P

25P + 25P= 50P

50P + 50P= 100P

99步变8步。

属性3:曲线上做除法很慢

设Q = nP,求n。 Q/P,就行了对吧。 椭圆曲线上并不是这样的。只能手动挨个把数字带进去算一遍,才能求出n。

意思就是很慢啦。

这个除法坑学名叫离散对数问题,一手造就椭圆曲线的单向性。

好比nP得Q很容易。但是给定Q、P,求n就基本上不行了。

签名跟椭圆曲线什么关系?

设:

私钥= d

消息= z。

公钥= Q.

G代表比特币给定的曲线上的基点。

“k”是一个随机数,随每个签名自动生成。

“n”是比特币给出的另个常数。

准备好了么?

签发消息

公钥Q = dG。 (因为除法坑,Q/G=d不可行)。

将G与随机数k相乘,在曲线上标记出该点,坐标是(x,y)。

即 (x,y)= k*G

接下来,确定r和s的值,使:

r = x mod n.

s = (z + r*d)  k^{-1}  mod n

这里边的r、s是签名的坐标。

验证消息

验证人进行以下的简单计算

z*s-1*G + r*s-1Q

等式的值为点(x,y)。

验证人可以简单地比较x坐标。发送人并没有直接发过来x坐标。但是验证人有r、n的值。

已知r = x mod n,验证人可以简单地求解x。

若x值匹配,表示签名验证成功。

验证人还要再做个计算:

第1步:z*s-1*G + r*s-1*Q

 已知Q = d*G,可得:

第2步:z*s-1*G + r*s-1*d*G

提出(z + r*d)

 第3步:(z + r*d) *s-1*G

 已知:s = (z + r*d) k-1mod n

 第4步:(z + r*d) *(z + r*d)-1* k*G

(z + r*d) *(z + r*d)-1= 1

 第5步:k*G正是发送人发送的坐标(x,y)。

椭圆曲线有短板么?

椭圆曲线看上去就是一波密码学强操作,但也不是完全的bulletproof:

说,选了错误的曲线怎么办? 若曲线有循环,曲线上的任意点P都有可能出现1001P = P.

可以选择可以分解的弱曲线。

都是小事儿。

完结

Top