电子签章技术规范
电子签章技术规范
该文记录对安全电子签章密码技术规范的理解。
安全电子签章密码技术规范
- GB/T 38540-2020 信息安全技术 安全电子签章密码技术规范
- GM/T 0031-2014 安全电子签章密码技术规范
1. GB/T 38540
1.1. 电子印章
graph LR
SESeal[电子印章] --> eSealInfo[印章信息]
SESeal --> cert[制章者证书]
SESeal --> signAlgID[签名算法标识]
SESeal --> signedValue[签名值]
eSealInfo --> header[印章头]
eSealInfo --> esID[印章标识]
eSealInfo --> properrty[印章属性]
eSealInfo --> picture[印章图像数据]
eSealInfo --> extDatas[自定义数据]
header --> ID[头标识]
header --> version[印章版本号]
header --> Vid[厂商标识]
properrty --> type[印章类型]
properrty --> name[印章名称]
properrty --> certListType[签章证书信息类型]
properrty --> certList[签章证书信息列表]
properrty --> createDate[制作时间]
properrty --> validStart[有效起始日期]
properrty --> validEnd[有效终止日期]
picture --> pic_type[图像类型]
picture --> data[图像数据]
picture --> width[图像显示宽度]
picture --> height[图像显示高度]
1.2. 电子签章
graph LR
SES_Signature[电子签章] --> TBS_Sign[签章信息]
SES_Signature --> cert[签章者证书]
SES_Signature --> signatureAlgID[签名算法标识]
SES_Signature --> signature[签名值]
SES_Signature --> timeStamp[签名值时间戳]
TBS_Sign --> version[电子签章版本]
TBS_Sign --> eseal[电子印章]
TBS_Sign --> timeInfo[签章时间]
TBS_Sign --> dataHash[原文杂凑值]
TBS_Sign --> propertyInfo[原文数据的属性]
TBS_Sign --> extDatas[自定义数据]
2. GM/T 0031
2.1. 电子印章
graph LR
SESeal[电子印章] --> SES_SealInfo[印章信息]
SESeal --> SES_SignInfo[签名信息]
SES_SealInfo --> header[头信息]
SES_SealInfo --> esID[印章标识]
SES_SealInfo --> property[属性信息]
SES_SealInfo --> picture[印章图片信息]
SES_SealInfo --> extDatas[自定义数据]
header --> ID[数据标识]
header --> version[数据版本号]
header --> Vid[厂商ID]
property --> type[印章类型]
property --> name[印章名称]
property --> certList[签章人证书列表]
property --> createDate[印章制作日期]
property --> validStart[有效起始日期]
property --> validEnd[有效终止日期]
picture --> pic_type[图片类型]
picture --> data[图片数据]
picture --> width[图片显示宽度]
picture --> height[图片显示高度]
SES_SignInfo --> cert[制章人证书]
SES_SignInfo --> signatureAlgorithm[签名算法标识]
SES_SignInfo --> signData[签名值]
2.2. 电子签章
graph LR
SES_Signature[电子签章] --> TBS_Sign[签章信息]
SES_Signature --> signature[签章签名值]
TBS_Sign --> version[电子签章版本]
TBS_Sign --> eseal[电子印章]
TBS_Sign --> timeInfo[签章时间]
TBS_Sign --> dataHash[原文杂凑值]
TBS_Sign --> propertyInfo[原文数据的属性]
TBS_Sign --> cert[签章人对应签名证书]
TBS_Sign --> signatureAlgID[签名算法标识]
3. 分析
3.1. 电子印章
可以看到 GB/T 38540
和 GM/T 0031
电子印章相关字段都是一样的,只是 GB/T 38540
的制章者证书,签名算法标识,签名值在外层,而 GM/T 0031
的制章者证书,签名算法标识,签名值在签名信息包裹。
为了区分两个标准的签章格式
- 如果可以把
ASN1
格式解析为树形图,可以简单判别子节点个数,有四个是GB/T 38540
只有两个是GM/T 0031
- 如果是依次解析,可以判断第一个节点后节点的类型,节点类型是
OCTET_STRING(0x04)
就是GB/T 38540
,而节点类型是SEQUENCE
就是GM/T 0031
4. 代码实现
https://github.com/august295/EnDeCode
参考
本文由作者按照 CC BY 4.0 进行授权