当前位置:   article > 正文

sm2 签名验签_sm2验签

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

不能互相验签的原因

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

线上 sm2 工具


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/363171
推荐阅读
相关标签
  

闽ICP备14008679号