SM2数字签名结果的分析,本应64字节,为啥有工具显示70字节、71字节、72个字节三种结果

这篇具有很好参考价值的文章主要介绍了SM2数字签名结果的分析,本应64字节,为啥有工具显示70字节、71字节、72个字节三种结果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SM2数字签名结果的分析,本应64字节,为啥有工具显示70字节、71字节、72个字节三种结果

由于编写了《商用密码与安全性评估》书籍,最近收到不少朋友的来信,询问为啥BC库的签名结果是三种字节长度?另一个问题就是密码测评师需要了解编程和代码么 ?

我先回答第二个问题,密码测评师是需要了解代码的,精通程序的测评师才能有利的分析密码算法实现的正确性和有效性,才能明白是不是真正实现了相应的算法而不是欺骗。

关于第一个问题,我们来分析下原因:

sm2签名值,加密解密,安全

 

用工具和BC库为啥签名结果长度有70,71,72 三个结果呢?

把其中的一个结果拷贝下来分析:

3045022053158C29EA739622E0109971E6BBC89C068A9C647D190FA08D02D0EA8EE1AEE1022100C8E815C0A688D910E1890C29C639CB5BF53F2464768B132A5DCB9CF68CFC3D7B

把它转换成一个二进制文件

sm2签名值,加密解密,安全

用ASN.1工具解析器打开该二进制文件:

sm2签名值,加密解密,安全

 

可以看到有两个大整数组成,这应该就是签名结果的 R,S ,因此出现如此长度的签名结果是因为DER编码所致。

为啥后面是33字节? 因为填充了一个00字节,为啥填充零字节呢?看后面的整数的第一个字节C8 ,转换成二进制是11001000 ,根据整数的特性这个数就是负数了,而这里SM2用到的r,s都是无符号整数,所以要进行编码增加00000000的整数前缀,使得它是个正整数。

因此当r,s的最高位都是0位时,不需要填充,它就是等于增加了六个字节的标志字节,累计70字节;当其中一个最高位是1位时,需要填充00,它就是等于增加了七个字节的标志字节,累计71字节;当两个最高位都是1位时,都需要填充00,它就是等于增加了八个字节的标志字节,累计72字节

结合BC库源代码再核实一下是不是DER编码:

sm2签名值,加密解密,安全

 sm2签名值,加密解密,安全

 

总结:密评中签名结果判断第一个字节应该是30 ,第二个字节如果是44 ,后面肯定有两个0220 ;第二个字节如果是45 ,后面出现一个0220,一个022100 ;第二个字节如果是46 ,后面出现两个022100文章来源地址https://www.toymoban.com/news/detail-554696.html

到了这里,关于SM2数字签名结果的分析,本应64字节,为啥有工具显示70字节、71字节、72个字节三种结果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 系统架构设计专业技能 · 系统安全分析与设计(四)【加解密、数字信封、信息摘要、数字签名、数字书证、网络安全、信息安全】

    点击进入系列文章目录 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 数据加密是 防止未经授权的用户访问敏感信息的手段 ,保障系统的机密性要素。数据加密有对称加密算法和非对称加

    2024年02月12日
    浏览(30)
  • sm2签名与sm4加密(一)

    因为某些不可抗原因,友商加密平台系统无法提供接口进行加密验签,以至于需要自己实现监管要求的加密验签。 接口要求,报文先经过sm2生成签名,之后进行sm4加密。收到报文后,先进行sm4解密,解密后将报文进行验签。验证成功之后既结束全部流程。 所以整体上分为两

    2024年02月12日
    浏览(34)
  • sm2签名与sm4加密(三)

    二简单介绍了一下理论,三来简单说下sm2签名的实现, 首先因为openssl太复杂没搞懂,就去看gmssl的代码,gmssl的密钥结构体很简单,长这个样子: 很明显公钥是一个点由xy两个坐标组成,私钥是一个长串。 sm2签名过程可以大体上分成三步,生成公私钥——(交换密钥)——使

    2024年01月18日
    浏览(31)
  • PHP SM2签名如何实现

    SM2是一种基于椭圆曲线密码算法的公钥密码体制,包括数字签名、密钥交换和公钥加密三部分。本文将介绍如何使用PHP实现SM2签名。 在开始实现SM2签名之前,确保已经安装了以下依赖: PHP 7.0 或更高版本 OpenSSL 扩展 使用一个流行的第三方库 php-gmssl 来实现SM2签名。首先,通过

    2024年02月10日
    浏览(41)
  • golang使用SM2(SM2withSM3)签名、验签数据

    对接招行支付 私钥:Hex格式,SM2标准秘钥格式,私钥为32字节字节流,转换为HEX格式为64字节 公钥:base64格式,并且符合ANS1标准,base64编码后总长度为124字节 SM2标准公钥头:3059301306072A8648CE3D020106082A811CCF5501822D03420004 数字签名采用SM2withSM3签名算法,签名方式为PKCS#1裸签名,签

    2024年02月13日
    浏览(28)
  • Java基于BC包的实现SM2签名验签方案,以及SM2签名中bc包冲突的部分解决方法

    信创改造也有一段时间了,这里记录和总结一些关于SM2算法的知识点。 或 由于BC包版本多种多样,且实现SM2算法的过程和结果并不相同。因此在引入bc包时,需要考虑bc包版本的问题,否则将出现包冲突或 ClassNotFound 的问题。 这里特别强调 ,特别是进行SDK开发时,需询问接入

    2024年02月14日
    浏览(40)
  • 安装软件和驱动程序需要微软数字签名无法安装?数字签名和数字证书区别

    1.安装软件和驱动程序需要微软数字签名无法安装 windows安装exe安装包时: 1.1  解决方法: 1.2           这个问题需要安装驱动补丁进行更新驱动操作,如:Windows6.1-sha2补丁.msu 1.3           这种属于签名问题,解决方法: 1..进入“控制面板”,查看方式为大图标,点击“

    2024年02月05日
    浏览(50)
  • openssl+ SM2 + linux 签名开发实例(C++)

    SM2是中国国家密码管理局发布的椭圆曲线密码算法标准,用于数字签名、密钥交换和公钥加密等安全通信场景。以下是SM2签名的理论基础相关知识点: 椭圆曲线密码学(Elliptic Curve Cryptography,ECC): SM2基于椭圆曲线密码学,该密码学利用椭圆曲线上的数学运算实现加密和签

    2024年02月04日
    浏览(28)
  • C#实现SM2签名(对接医保接口注意事项)

    最近在做对接医保接口的项目,入参要求进行SM2签名(注意:是签名而非加密,开始理解成加密研究了一堆加密源码,使用提供的私钥也会报错,后面才发现SM2有专门的签名方法,而接口调用签名也就是 SM2签名 而非加密) 下面是说明适用于2022年云南省医保平台相关项目:

    2024年02月15日
    浏览(38)
  • OpenSSL 3.1.1 ECC 加密、解密、签名、验签(国密 sm2、sm3)

    openssl 3 默认废弃了 旧版本 (opessl 1.x) 的部分api 导致部分旧ecc 代码无法使用(可以通过配置编译选项打开) ,这里展示如何使用新接口用ECC 进行加密解密。 新接口是真的方便,基本上你都不需要懂啥密码学知识,对我们这种密码白痴来说太好了 头文件 生成密钥对 导出公

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包