duanhongyi / gmssl

a python crypto for sm2/sm3/sm4
MIT License
479 stars 140 forks source link

这个库的SM2签名验签似乎不正常 #15

Closed qzhsjz closed 4 years ago

qzhsjz commented 5 years ago

随附两套代码,一是用Django写的服务器,其中用到本库进行签名验签。 另一个是用C++写的客户端,其中用到了JulongChain/julongchain-csp-sdt这个SM算法库。 这两个程序本身验签自己产生的签名都没有问题,但验签对方的签名时均会失败。 在使用随附的第三方工具进行验签时,发现第三方工具可以正常验签JulongChain/julongchain-csp-sdt产生的签名,本库产生的签名无效。 很疑惑这是为什么,椭圆参数是一致的,算法也没有什么太大区别。 C++客户端.zip Django服务器.zip 第三方工具.zip

qzhsjz commented 5 years ago

例如,待签数据和随机数均为 02d67d3987944139ccaaac489e4248c7c614320b09b3bc4d21c0bb9e733dc1ad 并且使用相同私钥的情况下,应该得出的签名为 b4e04e7e62b1a9043aeb073df371ce33c7075fe9e814ab7d002a249c39aca007a1347e48902d8d62cf48289838b1fbcb3c6b4d5919a22284e5fea16972d2e7a2 而本库得出的签名为 cc37ee87bab13adfacebc37e472a1f3fda369b7b1b1acbc88210b6fd3b40f925f7082962ca1d622157da730b16625abd0777f1b31b285d1626c10c8eb58bc33a

TheBigFish commented 4 years ago

因为本版本的签名没有对源数据计算E值,按标准需要先计算E值,再对E值进行签名。