ECC椭圆曲线算法(4)签名验证过程
2021/5/1 22:25:14
本文主要是介绍ECC椭圆曲线算法(4)签名验证过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 说明
Alice和Bob在通信的过程中,为了验证消息的来源,既消息确实是Alice发出来的。需要由Alice对消息使用自己的私钥生成一个签名hash,然后Bob用Alice的公钥进行验证,判断hash是否一样,从而知道签名是否正确。
2. 步骤
假设:
- 基点:G
- 私钥:k
- 公钥:K =k *G
- Message:M
step1. Alice 数据传送前的操作:生成公私钥对
step2. Alice
- 选择随机数r
- 计算点r*G,得到(x, y)
- 根据消息求哈希h
- 根据随机数r、消息M的哈希h、私钥k,计算s = (h + kx)/r.
- 将消息M、签名{rG, s}、公钥K发给Bob
step3. Bob:收到消息M、以及签名{rG=(x,y), s}
- 根据消息求哈希h
- 使用发送方公钥K计算:hG/s + xK/s,并与rG比较,如相等即验签成功
hG/s + xK/s = hG/s + x(kG)/s = (h+xk)G/s = r(h+xk)G / (h+kx) = rG
注:
- r值
在选择随机数r的时候,真正的算法需要做一个判断,计算 r 值是否为0, 如果r == 0, 需要重新随机:r = x mod n - n值
如果说椭圆曲线方程可用(CURVE, G, n)表示,其中CURVE表示椭圆曲线点域和几何方程;G是所有点倍积运算的基点;n是该椭圆曲线的可倍积阶数(multiplicative order),作为一个很大的质数,n的几何意义在于,nG 是阿贝尔群的单位元。 - h值
实际上需要对h值作一个转换,既是对h的二进制形式下最左边(即最高位)L_n个bits,而L_n是上述椭圆曲线参数中的可倍积阶数n的二进制长度。注意z 可能大于n,但长度绝对不会比 n 更长
【参考】
- 密码学系列 - 椭圆曲线 ECDSA - 签名与验签 csdn
- Elliptic Curve Digital Signature Algorithm Wikipedia
这篇关于ECC椭圆曲线算法(4)签名验证过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享