SM2 签名验签 注意事项

一、先来看下标准

参考《GM/T 0009-2023 SM2密码算法使用规范》

可知,单纯SM2签名、验签函数的入参待签名数据这块是不会进行预处理。

二、SM2签名验签注意事项

        在A程序计算输出结果,找B工具验证算法正确性时,要特别注意待签名数据处理情况,否则会出现两者数据验签失败,细心一点的可以发现其中的奥秘,有些工具会标记_E后缀以示区分(Verify_E不做预处理)。

 2.1  正常签名/验签逻辑

       待签名裸数据X,预处理1得到Z,预处理2得到Ex值,Ex值给到签名验签函数生成签名R+S

 2.2 出现问题原因(只列举一些)

  1)有些签名、验签函数/工具,内置了预处理1、预处理2过程,因此入参是待签名裸数据X即可

  2)不做预处理1、预处理2过程处理,直接将待签名裸数据X给到签名验签函数生成签名R+S (下面示例数据属于这种,要求数据输入长度为32个字节)

 3)使用HASH代替预处理1、预处理2逻辑,将HASH结果直接给到签名验签函数生成签名R+S

 2.3 验证示例数据(16进制格式)

SM2私钥: 68D7B97ED88CD84B06B03C97340F854FDAFC14FBB6CDBF3B42DCBDEB45128CC3

SM2公钥:

X:62EBF178DB7D4488F2596B0B48BDF5520F7BF7A155294269E38F8F5850782656

Y:68D7B97ED88CD84B06B03C97340F854FDAFC14FBB6CDBF3B42DCBDEB45128CC3

待签名裸数据(0x20长度,32个字节):

1234567890123456789012345678901234567890123456789012345678901234

将待签名裸数据,直接作为签名入参,计算结果:

R: 4087F8134051D03A5E85EE98028A292A3E06B5CD8B32EB1F3E7662A189CF4FD4

S: 24F8BE48211F14781DBFEB60B007F9410A410661644B5EE3C8BDB64022D9E8C5

此时,如果将待签名裸数据进行预处理1、预处理2后给到另外一个工具验签时会失败。

如果将待签名裸数据直接作为验签入参(注意该验签函数不参与计算预处理计算)时,验签成功。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值