区块链中的数学-签名过程

blocksight 2021-04-25 00:07:59 阅读数:640

本文一共[544]字,预计阅读时长:1分钟~
区块 数学 签名 过程

写在前面

上一节我们介绍了离散域上的椭圆曲线加密和解密过程,本节继续介绍离散域上椭圆曲线进行签名和验证过程,并加以实例说明。

签名过程

首先做如下符号约定:发起签名的用户的密钥对:(d, Q);(d为私钥,Q为公钥),上一节说过d是一个秘密的大整数,D是椭圆曲线上一个点。G:生成元[基元]待签名的信息:M;

选择椭圆曲线点群的阶:n

签名结果:Signature(M) = ( r, s)

接下来看签名过程:1、随机选择一个整数k, 且0 < k < n2 计算R = k * G=()注:1,2步骤也可以描述为:随机生成一个密钥对(k, R), R=()3、令 r = mod n,如果r = 0,则返回步骤14、计算 H = Hash(M)5、s = (H + rd) mod n,若s = 0, 则返回步骤16、输出的S =(r,s)即为签名。r是R的横坐标,有的文章说签名结果S =(R,s) 用R作为第一部分,也是可以的,本质上一样,只要在验证时候取出r.

验证过程

使用上面一样的符号规则,收到Signature(M) = ( r, s) 的签名结果, 验证过程如下:1、计算 H = Hash(M)2、计算 u1 = mod n, u2 = mod n3、计算 R = (, ) = u1G + u2Q, 如果R = 零点,则验证该签名无效4、令 v = mod n5、若 v == r,则签名有效,否则, 则签名无效。

可以看到,验证过程用到了<r,s>,签名者的公钥Q,及消息M等公开信息。为什么可以这样验证呢?下面推导一下:R=u1G + u2Q=( mod n)G + ( mod n)Q= ( mod n)G + ( mod n) dG=G((H + rd) mod n)=G*ks=kG=R

r是R的横坐标模n,到此验证结束。

实例演练

椭圆曲线方程中的参数选定为:𝑎=0, 𝑏=−4,𝑝=199,𝐺=(2,2),该椭圆曲线方程为:mod 199−4) mod 199【注意:如果写成 −4 属于耍流氓的写法 】此时n=217, 假设B选定的私钥为d=13,其公钥:Q=13𝐺=(165,33)消息假设消息M经过摘要后H=58。签名过程:随机选择k=23,计算R = k * G=23(2,2)=(15,171)令 r = mod n= 15 mod 217=15计算:s = (H + rd) mod n=(58+15*13)/23 mod 217 = 11

得到签名结果:Signature(M) = ( r, s)=(15,11)

验证过程:使用上面一样的符号规则,收到Signature(M) = ( r, s)=(15,11) 的签名结果, 验证过程如下:1、计算 H = 58 (假设内容)2、计算 u1 = mod n=58*79 mod 217=25, (1/s 模逆:79)u2 = mod n = 1579 mod 217=1003、计算 R = (, ) = u1G + u2Q= 25(2,2) + 100(165,33)=(160,175)+ (5,11)=(15,171)4、令 v = mod n = 15 mod 217 =15=r验证该签名为有效。

正如上一节所说一样, 实用的椭圆曲线算法选择是非常大的整数作为各个参数,但原理是一样的。

下一节讲迪菲赫尔曼密钥交换过程。欢迎关注转发, 疑问请留言!!

版权声明:本文为[blocksight]所创,转载请带上原文链接,感谢。 https://learnblockchain.cn/article/2430