首页/安全/等保与合规速查/SM2 签名与验签:命令与验证
密码与认证合规50 条

SM2 签名与验签:命令与验证

SM2 签名配合 SM3 摘要用于数据与身份的真实性验证;联调时可用 OpenSSL 完成签名与验签闭环,验证密钥与流程正确性。

等保与合规速查安全更新于 2026-10-13

SM2 签名的用途

SM2 签名配合 SM3 摘要用于验证数据与身份的真实性:签名方用私钥对摘要签名,验签方用公钥验证。它解决的是完整性与来源可信问题,不提供机密性——需要保密时仍要另行加密。联调阶段可以用 OpenSSL 完成一次签名与验签闭环,用来验证密钥、摘要算法与数据格式是否匹配。

基本信息

依据GB/T 32918.2(数字签名算法)
摘要算法SM3
常用工具OpenSSL(不同版本对 SM2 签名的支持方式不同)
提供能力完整性与来源真实性,不提供机密性
联调要点摘要一致、数据未被转换、公钥与私钥配对

典型使用场景

  • 接口签名:对请求参数签名,服务端验签防篡改
  • 固件与软件包校验:发布前签名,安装前验签
  • 电子凭证签发:证书或凭据的签发与验签
  • 联调测试:用命令行验证密钥与流程正确
  • 代码评审:检查签名与验签是否使用一致的摘要

签名验签示例

签名验签示例
# 生成 SM2 密钥对
openssl ecparam -genkey -name SM2 -out sm2.key
openssl ec -in sm2.key -pubout -out sm2.pub
# 用 SM3 摘要签名
openssl dgst -sm3 -sign sm2.key -out data.sig data.txt
# 用公钥验签,输出 Verified OK 表示通过
openssl dgst -sm3 -verify sm2.pub -signature data.sig data.txt
# SM2 签名涉及用户标识(默认 ID),不同版本选项不同
# 必要时通过选项指定,具体以所用 openssl 版本文档为准

验签失败的常见原因

现象可能原因
摘要不一致签名与验签使用的摘要算法不同
内容被改写文本模式处理导致换行或编码变化
公钥不匹配验签公钥与签名私钥并非同一对
标识不一致SM2 用户标识设置不同

工程落地注意点

  • 二进制处理:签名与验签必须针对同一份字节内容,避免文本模式转换
  • 编码统一:接口传输时明确字符编码,防止两端计算出的摘要不同
  • 密钥存储:私钥交由密钥管理服务或密码机保管,不落应用磁盘
  • 标识约定:把 SM2 用户标识写进对接文档,两端保持一致
  • 验签失败可观测:记录摘要值与公钥标识,便于快速定位问题来源
验签失败先排查四件事:摘要算法是否一致(SM3)、数据是否被换行转换、公钥与私钥是否配对、SM2 用户标识是否一致。

易错点

  • 文本编辑器自动换行或转码:处理文件应使用二进制模式,避免内容被改写导致验签失败
  • 把签名当加密:签名不提供机密性,需保密时应同时对数据加密
  • 公私钥未配对使用:拿错证书或密钥时验签失败,排查成本高
  • 忽略 SM2 用户标识:标识设置不一致时签名无法互验,需在对接文档中明确

数据来源与参考

  • GB/T 32918.2-2016
  • OpenSSL 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌