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

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57