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

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请