跳至主要內容

数字签名

zheng大约 2 分钟可信可信加密算法

一、数字签名概念

数字签名技术是消息传递进行加密获得的签名。如HTTP请求时将请求体加密。数字签名可以用于证实数字内容的完整性和来源。常见的数字签名算法:**椭圆曲线数字签名算法**。。。

二、数字签名的流程

(1)椭圆曲线数字签名算法:

生成数字签名

获取消息m的数字摘要HmHm = h(m);;
使用RFC6979协议,通过私钥pk和m生成确定随机数k;
计算R = k * G,其中R为曲线上的一点,取其横坐标r作为数字签名的一部分,然后计算s,即s = (Hm + r * pk) / k;
得到消息m的数字签名为Sig = <r, s>

验证数字签名

根据Sig,使用对应的公钥P验证其签名;
判断等式s * R = Hm * G + r * P是否成立,成立则通过验证

验证方法解释

由椭圆公式:r 得到 R ;
因为:s = (Hm + r * pk) / k 得到 s * k = (Hm + r * pk);
又因为:P = pk * G;
所以:s * (k * G) = Hm * G + r * (pk * G) ;
推出 s * R = Hm * G + r * P

原理解释:

https://www.cnblogs.com/wsonepiece/p/3977021.htmlopen in new window

(2)Schnorr数字签名算法

生成数字签名

计算消息m的数字摘要: Hm = H(m)
生成确定性随机数k,计算 R = k * G ,R的横坐标 r 作为签名的一部分
计算签名另一部分:s = k + h(P || R || m) * pk
得到数字签名 Sig = <r , s>

验证数字签名

利用公钥P验证其签名
s * G = R + h(P || R || m) * P 是否成立,成立则通过验证
多个签名:
(s1 + .. + S50) * G = R1 + .. + R50 + h1 * P1 + .. h50 * P50

验证方法解释

因为:s = k + h(P || R || m) * pk ;
又因为:P = pk * G ;
所以:s * G = k * G + h(P || R || m) * (pk * G) 
所以:s * G = R + h * (P || R || m) * P
由r 得到 R
上次编辑于:
贡献者: 郑天祺