美文网首页Nervos Fans
比特币脚本指南(四)

比特币脚本指南(四)

作者: 526ba0512193 | 来源:发表于2018-07-10 11:20 被阅读0次

    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.

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

    都是小事儿。

    完结

    相关文章

      网友评论

        本文标题:比特币脚本指南(四)

        本文链接:https://www.haomeiwen.com/subject/rzbpuftx.html