SM2的P7结构体简单分析

2024-03-21 03:40
文章标签 分析 简单 结构 p7 sm2

本文主要是介绍SM2的P7结构体简单分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SM2签署的P7结构体简单分析

本文用于记录我一次为了验签SM2国密不得不把整个P7结构体理解一遍后,得出来的一些结论,可能以后很难再用到,故记录下来以减少以后用到时的再学习成本

借鉴和提供了帮助的文章及网站

支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱

X.509数字证书的结构与解析

翻译:《PKCS#7 - SignedData》

CSR Decoder And Certificate Decoder

解析过程

本文用到了一个解析P7签名值的网站

使用到的解析值:

MIIDagYKKoEcz1UGAQQCAqCCA1owggNWAgEDMQ4wDAYIKoEcz1UBgxEFADBQBgoqgRzPVQYBBAIBoEIEQGRlYzllODgwYmQ4YmQ3NjE3NjczYjI5ZTY0OTM5YWVhNjhkYmNjYWQyNTJiYTdhOWI4NTgwMTM5NjRmMGI1ZGKgggJFMIICQTCCAeWgAwIBAgIINYArYH+E530wDAYIKoEcz1UBg3UFADArMQswCQYDVQQGEwJDTjENMAsGA1UECgwEWkhDQTENMAsGA1UEAwwEWkhDQTAeFw0yMTAyMjQwODAyNTRaFw0yMjAyMjQwODAyNTRaMF8xCzAJBgNVBAYTAkNOMS0wKwYDVQQKDCTkuK3njq9DQeeUteWtkOetvue6puW5s+WPsC3lpZHnuqbplIExITAfBgNVBAMMGOe7tOajrumbhuWbouaciemZkOWFrOWPuDBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABCud4IDiuW/2D/DjPTWE1ic4VXmruShbrUF8VZ9XYfKT5N+hZ+Wj31O/XctY221i3XWXSe5wzRTcp4hVeAUcamWjgbwwgbkwDgYDVR0PAQH/BAQDAgbAMB8GA1UdIwQYMBaAFLQvQoI7jjkMzTbzWLavdHXRdscXMDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly93d3cudGp6aGNhLmNvbS9jcmw0MDMuY3JsMB0GA1UdDgQWBBSXV9IeudED3RQi3UEQ8npWVCYPNDAPBgNVHRMBAf8EBTADAQEAMCMGCCqBHNAUBAEEAQH/BBQTEjEyNkdGS1g1MUNNUFRUSERGQjAMBggqgRzPVQGDdQUAA0gAMEUCIQCfrGEgtGcJli3gAmMkTvU+77U2RLSg58cgyHqSY61TDAIgR7mtH/BOODFgmnqp8GajXNmy1+oFvP8TwHR8RWa83fAxgaUwgaICAQEwNzArMQswCQYDVQQGEwJDTjENMAsGA1UECgwEWkhDQTENMAsGA1UEAwwEWkhDQQIINYArYH+E530wDAYIKoEcz1UBgxEFADANBgkqgRzPVQGCLQEFAARHMEUCICRK70zLyX+ZFkinxeStdo3eywZvl/hHt24xM2s3HEkcAiEAsLMe/LQwIQhCWXWCpsIw8kpduTkDQoB0cwY1RumGlYI=

这里的解析值是用base64加密的,解密结果:

[1.2.156.10197.6.1.4.2.2, [0][3, [[1.2.156.10197.1.401, NULL]], [1.2.156.10197.6.1.4.2.1, [0]#64656339653838306264386264373631373637336232396536343933396165613638646263636164323532626137613962383538303133393634663062356462], [0][[[0]2, 3855128974485415805, [1.2.156.10197.1.501, NULL], [[[2.5.4.6, CN]], [[2.5.4.10, ZHCA]], [[2.5.4.3, ZHCA]]], [210224080254Z, 220224080254Z], [[[2.5.4.6, CN]], [[2.5.4.10, 中环CA电子签约平台-契约锁]], [[2.5.4.3, 维森集团有限公司]]], [[1.2.840.10045.2.1, 1.2.156.10197.1.301], #034200042B9DE080E2B96FF60FF0E33D3584D627385579ABB9285BAD417C559F5761F293E4DFA167E5A3DF53BF5DCB58DB6D62DD759749EE70CD14DCA7885578051C6A65], [3][[2.5.29.15, TRUE, #030206c0], [2.5.29.35, #30168014b42f42823b8e390ccd36f358b6af7475d176c717], [2.5.29.31, #30283026a024a0228620687474703a2f2f7777772e746a7a6863612e636f6d2f63726c3430332e63726c], [2.5.29.14, #04149757d21eb9d103dd1422dd4110f27a5654260f34], [2.5.29.19, TRUE, #3003010100], [1.2.156.10260.4.1.4, TRUE, #131231323647464b583531434d50545448444642]]], [1.2.156.10197.1.501, NULL], #03480030450221009FAC6120B46709962DE00263244EF53EEFB53644B4A0E7C720C87A9263AD530C022047B9AD1FF04E3831609A7AA9F066A35CD9B2D7EA05BCFF13C0747C4566BCDDF0], [[1, [[[[2.5.4.6, CN]], [[2.5.4.10, ZHCA]], [[2.5.4.3, ZHCA]]], 3855128974485415805], [1.2.156.10197.1.401, NULL], [1.2.156.10197.1.301.1, NULL], #30450220244aef4ccbc97f991648a7c5e4ad768ddecb066f97f847b76e31336b371c491c022100b0b31efcb430210842597582a6c230f24a5db9390342807473063546e9869582]]]]

使用网站的解析效果:
SM2的P7结构体

解析结果说明

我们按上面的红框数字说明

1 版本

这里是指签名值版本,意义不明

2 摘要加密算法

这里的OID 1.2.156.10197.1.401是指SM3摘要算法

3 签名原文

由于我是看Itext源码来理解这里的P7结构体含义的,而Itext对这部分的注释是 possible ID_PKCS7_DATA反正我对这里的理解就是签名原文

Itext中在签署时,先把用SHA256加密后的摘要进行了一层封装,这里的secondDigest就是我放进去的签名原文,实际签署的时候是拿这里后造出来的attribute的字节码值去进行RSA加密的,而这个attribute的字节码值就存放在了P7结构体的这里。

	ASN1EncodableVector attribute = new ASN1EncodableVector();ASN1EncodableVector v = new ASN1EncodableVector();v.add(new ASN1ObjectIdentifier(SecurityIDs.ID_CONTENT_TYPE));v.add(new DERSet(new ASN1ObjectIdentifier(SecurityIDs.ID_PKCS7_DATA)));attribute.add(new DERSequence(v));v = new ASN1EncodableVector();v.add(new ASN1ObjectIdentifier(SecurityIDs.ID_MESSAGE_DIGEST));v.add(new DERSet(new DEROctetString(secondDigest)));attribute.add(new DERSequence(v));

要提醒的是P7由attach模式和detach模式,前者有签名原文,后者没有签名原文,表现到页面上就是不会有3号红框中的字节码的那一部分

4 签名公钥证书

这一部分建议看X.509数字证书的结构与解析,写的很详细

5 签名信息

这一部分包含了比较重要的几个信息

  1. 签名者的信息,包含了由国家组织姓名等别名组成的签名者唯一标识
  2. 签名者证书序列号,用于和上面的签名公钥证书的序列号相对应,来确定是用哪个证书解密
  3. 接着是摘要算法 1.2.156.10197.1.401对应SM3 Hash Algorithm
  4. 签署算法 1.2.156.10197.1.301.1对应SM2-1 Digital Siganture Algorithm
    2.156.10197.1.301.1对应SM2-1 Digital Siganture Algorithm```
  5. 最后是用签署算法签出来的结果

这篇关于SM2的P7结构体简单分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/831649

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资