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 channelX的映射点恰好是(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.
可以选择可以分解的弱曲线。
都是小事儿。
完结
网友评论