密码学系列 - 国密SM2为什么不支持恢复公钥
Posted 搬砖魁首
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码学系列 - 国密SM2为什么不支持恢复公钥相关的知识,希望对你有一定的参考价值。
情况
国密SM2目前不能通过签名和消息摘要恢复出公钥, 故不太适合将以太坊, EOS之类的公链代码底层密码库替换成国密库, 因为它们的椭圆曲线验签采用的都是recover模式, 而非verify模式.
- verify模式: 输入签名, 消息摘要, 公钥; 输出是否是该公钥对应的私钥做的签名
- recover模式: 输入签名,消息摘要, recoverid; 输出签名时使用的私钥对应的公钥
原因
在secp256k1我们可以根据签名{r,s}和消息恢复公钥,但是SM2却不能通过签名和消息恢复公钥,因为在SM2的h
值计算过程中,SM2用到了公钥的坐标,所以必须知道公钥了,和只有签名和消息recover公钥相矛盾。
消息摘要h
的生成过程(h
在签名,verify和recover时都是需要的)
ZA = SM3 [ENTLA+IDA+a+b+Gx+Gy+Px+Py]
h = SM3 [ZA||MSG]
变通方法
因为SM2无法通过签名和消息recover公钥,所以在对交易验证的过程,需要取出公钥然后验证。但是,在类似EOS的账号系统里,一个账号可以拥有几个公钥,所以需要遍历账号的公钥验证交易,导致多公钥账号的交易执行性能会低些。幸运的是,系统内绝大多数账号只有一对公私钥,所以理论上不会对系统整体性能造成影响。
参考:
https://blog.csdn.net/weixin_39606244/article/details/112961507
https://zhuanlan.zhihu.com/p/369012651
以上是关于密码学系列 - 国密SM2为什么不支持恢复公钥的主要内容,如果未能解决你的问题,请参考以下文章