sm2 签名验签

目前发现 sm2 有很多实现,比如 gmssl, openssl 1.1.1 ,openssl 3.0 和各种代码库实现等等。实践中发现这些实现会出现不能互相验签的情况。
网上的资料,给出了一些 openssl 指令,但是没有标明 openssl 的版本,由于 openssl1.1.1 版本和 openssl 3 版本支持的参数有区别,会导致到具体环境可能执行出错的情况1

openssl 3.0.2 sm2 签名验签

#Ubuntu 22.04.1 LTS
#version
#openssl version
#OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
#生成秘钥
openssl ecparam -genkey -name SM2 -out pri.key
openssl ec -in pri.key -pubout -out pub.key
echo -n "1234" > data
#pkeyutl 默认 userid 是空的,可通过 distid 指定。
openssl pkeyutl -sign -in data -inkey pri.key -out pkeysig -rawin -digest sm3
openssl pkeyutl -verify -pubin -in data -inkey pub.key -sigfile pkeysig -rawin -digest sm3
#dgst 这个 -sm3 好像不用加,默认就是sm3,默认 userid 是空的,可通过 distid 指定。
openssl dgst -sm3 -sign pri.key -out dgstsig -sigopt distid:1234567812345678 data
openssl dgst -sm3 -verify pub.key -signature dgstsig -sigopt distid:1234567812345678 data

不能互相验签的原因

在数据、公私钥一致的情况下,不同工具之间不能互相验签有三种原因:签名算法不同、userid 不同、摘要算法不同。下面是一个由于算法不同导致无法互相验签的例子。
gmssl v2 用 dgst 命令通过 sm2 私钥签名出的结果,在别的工具上无法验签的问题分析

线上 sm2 工具


  1. macos 上的openssl version 显示为 libressl ,还不支持sm2
    openssl 1.1.1 目前停止维护了。 ↩︎

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值