为什么SM2算法签名结果不是64字节?

💡 原文中文,约800字,阅读约需2分钟。
📝

内容提要

SM2算法的签名长度通常为64字节,由R和S各32字节组成。密钥管理服务使用ASN.1编码,签名格式为SEQUENCE,包含R和S两个INTEGER。由于可能需要在首字节前补00,编码长度可能为70、71或72字节。ASN.1使用TLV格式,0x30和0x02表示SEQUENCE和INTEGER。

🎯

关键要点

  • SM2算法的签名长度为64字节,由R和S各32字节组成。
  • 密钥管理服务使用ASN.1编码签名结果。
  • SM2算法签名数据格式的ASN.1定义为SEQUENCE,包含R和S两个INTEGER。
  • 在大数INTEGER做DER编码时,首字节为1时需补00,导致编码长度可能增加。
  • 编码长度可能为70、71或72字节,具体取决于R和S的补位情况。
  • 特殊场景下,编码长度可能为69字节,取决于前导0的处理。
  • ASN.1使用TLV格式存储数据,0x30和0x02分别表示SEQUENCE和INTEGER。
  • 0x44、0x45、0x46表示SEQUENCE的长度,分别对应70、71和72字节。
  • 0x20表示INTEGER的长度,对应32字节。
➡️

继续阅读