安全电子签章密码技术规范
GB/T 38540-2020
本标准规定了采用密码技术实现电子印章和电子签章的数据结构定义,以及相应的生成与验证流程
本标准适用于电子印章系统的开发和使用,也可用于指导该类系统的检测。
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 20518 信息安全技术 公钥基础设施 数字证书格式
GB/T 20520 信息安全技术 公钥基础设施 时间戳规范
GB/T 32905 信息安全技术 SM3密码杂凑算法
GB/T 32918 信息安全技术 SM2圆曲线公钥密码算法
GB/T 33560 信息安全技术 密码应用标识规范
GB/T 35276 信息安全技术 SM2密码算法使用规范
GB/T 33560 密码应用标识规范 参考 商用密码领域中的相关OID定义
下列术语和定义适用于本文件
一种由电子印章制章者数字签名的安全数据。
注:包括电子印章所有者信息和图形化内容的数据,用于安全签署电子文件。
使用电子印章签署电子文件的过程
注:电子签章可实现与纸质文件盖章操作相似的可视效果,可保障数据来源的真实性,数据完整性以及签名人行为的不可否认性。
需要进行电子签章或数字签名处理的电子文件
电子签章过程产生的包含电子印章、原文信息和数字签名等信息的数据
电子印章管理系统和电子签章软件的统称。
注1:电子印章管理系统具有电子印章制作与管理、安全审计等功能。
注2:电子签章软件是对电子文件加盖电子印章或添加数字签名的软件
电子印章系统中具有电子印章制作和管理权限的机构。
注:电子印章中的图像和相关信息应经制章者进行数字签名,电子印章中的制章者证书应是该机构的单位证书
电子印章的所有者,是具备电子印章法定使用权限的实体,
由GB/T32918 定义的一种椭圆曲线密码算法
由GB/T32905 定义的一种杂凑算法
下列缩略语适用于本文件。
ASN.1的相关知识:
微软:https://learn.microsoft.com/zh-cn/windows/win32/seccertenroll/about-introduction-to-asn-1-syntax-and-encoding
简书:https://www.jianshu.com/p/fccd30a76505
https://asn1js.org/
https://lapo.it/asn1js/
OID:对象标识符(Object Identifier) 参考 商用密码领域中的相关OID定义
清单:OID全清单
安全电子签章是通过采用PKI公钥密码技术,将数字图像处理技术与电子签名技术进行结合,以电子形式对加盖印章图像数据的电子文档进行数字签名,以确保文档来源的真实性以及文档的完整性,防止对文档未经授权的篡改,并确保签章行为的不可否认性。
为了确保电子印章的完整性、不可伪造性,以及合法用户才能使用,需要定义一个安全的电子印章数据格式。通过数字签名,将印章图像数据与签章者等印章属性进行安全绑定,形成安全电子印章。在使用印章过程中,应对电子印章进行安全性验证。
在使用电子印章对各种文档进行电子签章过程中,签章者通过数字签名对文档数据进行签章处理从而达到与传统纸质文件盖章操作相同的可视化效果,同时又利用数字签名技术保障了文档数据的真实性、完整性以及签章者行为的不可否认性
电子印章由印章信息、制章者证书、签名算法标识、签名值等部分组成,其数据结构如图1所示。
印章信息 | 制章者证书 | 签名算法标识 | 签名值 |
---|
图1 电子印章的数据结构示意图
SESeal::=SEQUENCE(
eSeallnfo SES_Seallnfo, --印章信息
cert OCTET STRING, --制章者证书
signAlgID OBJECT IDENTIFIER, --签名算法标识
signedValue BIT STRING --签名值
}
eSealInfo: 印章信息,是电子印章基本域;
cert: 制章系统的 X.509 证书,宜使用 DER 编码格式;
signAlgID: 制章系统对 eSealInfo 域进行数字签名所使用的签名算法标识;
signedValue 制章系统对 eSealInfo 域进行数字签名的结果。
印章信息 eSeallnfo由印章头、印章标识、印章属性、印章图像数据、自定义数据等部分组成,其数据结构如图2所示。
印章头 | 印章标识 | 印章属性 | 印章图像数据 | 自定义数据 |
---|
图1 印章信息的数据结构示意图
印章信息 eSealInfo的 ASN.1定义如下:
SES_SealInfo::=SEQUENCE{
header SES_Header, --印章头
esID IA5String, --印章标识
property SES_ESPropertyInfo, --印章属性
picture SES_ESPictruelnfo, --印章图像数据
extDatas ExtensionDatas OPTIONAL --自定义数据
}
印章头由头标识、版本号和厂商标识等组成,其数据结构如图3所示
头标识 | 版本号 | 厂商标识 |
---|
图3 印章头的数据结构示意图
印章头的 ASN.1定义为:
SES_Header::=SEQUENCE{
ID IA5String, --头标识
version INTEGER, --印章版本号
Vid IA5String --厂商标识
}
其中:
ID:固定值“ES”
version:电子印章数据结构版本号,本标准设定数值为4,代表当前版本为v4。
Vid:电子印章厂商标识,在互联互通时,用于识别不同的软件厂商实现
esID:区分电子印章的唯一标识编码,用于查找和索引其他信息
印章属性由印章类型、印章名称、签章者证书信息类型、签章者证书信息列表、制作时间、有效期起始时间、有效期终止时间等部分组成,其结构如图4所示。
印章类型 | 印章名称 | 签章者证书信息类型 | 签章者证书信息列表 | 制作时间 | 有效期起始时问 | 有效期终止时间 |
---|
图4 印章属性的数据结构示意图
印章属性的ASN.1定义为::
SES_ESPropertyInfo::=SEQUENCE{
type INTEGER , --印章类型
name UTF8String, ---印章名称
certListType INTEGER , --签章者证书信息类型
certlist SES_CertList, --签章者证书信息列表
createDate GeneralizedTime, --印章制作时间
validStart GeneralizedTime, --印章有效期起始时间
validEnd GeneralizedTime --印章有效期终止时间
}
其中:
type:代表印章类型,可根据业务需要自定义。
name:印章名称,如“XX公司财务专用章”,对于在公安部门进行备案的印章,其印章名称与备案的名称保持一致。
certListType:签章者证书信息类型,1--数字证书,2--数字证书的杂凑值
certList:签章者证书信息列表,一个或多个签章者证书或签章者证书杂凑值组成的列表
createDate:印章制作时间。
validStart:印章有效期起始时间
validEnd:印章有效期终止时间
其中:
type: 代表印章类型,电子印章类型格式分为电子公章标识和电子名章标识两类,电子印章类型至少包括电子法定名称章(代码:01)、电子财务专用章(代码:02)、电子发票专用章(代码:03)、电子合同专用章(代码: 04)、电子名章(代码:05)五类,当印章类型代码为 01、02、03、04 时,称为电子公章标识;当印章类型代码为 05 时,称为电子名章标识;
name: 印章名称,如“XXXX 章”,对于在公安部门进行备案的印章,其印章名称 与备案的名称保持一致;
certListType: 电子印章所有者证书列表类型,1-证书列表,2-证书杂凑值列表;
certList: 电子印章所有者证书列表数据,电子印章所有者证书列表或电子印章所有 者证书杂凑值列表,电子印章所有者数字证书即电子印章数字证书;
createDate: 印章制作日期;
validStart: 印章有效期起始时间;
validEnd: 印章有效期终止时间。
SES_CertList::=CHOICE{
certs CertInfoList,--签章者证书
certDigestList CertDigestList--签章者证书杂凑值
}
CertInfoList::=SEQUENCE OF Cert
CertDigestList::=SEQUENCE OF CertDigestObj
Cert::=OCTET STRING
Cert符合 GB/T 20518 中Certificate定义,按DER编码格式存放 数字证书格式
CertDigestObj::=SEQUENCE {
type ObjType, --自定义类型
value CertDigestValue--证书杂凑值
}
ObjType ::=PrintableString
CertDigestValue::=OCTET STRING
印章图像数据由图像类型、图像数据、图像显示宽度和图像显示高度等部分组成,其数据结构如图5所示。
图像类型 | 图像数据 | 图像显示宽度 | 图像显示高度 |
---|
图5 印章图像的数据结构示意图
印章图像数据的ASN.1定义为:
SES_ESPictruelnfo::=SEQUENCE{
type IA5String, --图像类型
data OCTET STRING, --图像数据
width INTEGER, --图像显示宽度
height INTEGER --图像显示高度
}
其中:
type:印章图像数据格式类型,如GIF、BMP、JPG、PNG、SVG 等。
data:印章图像数据,机构的电子印章宜采用相关国家管理部门指定的印模,
width:图像显示宽度(单位为毫米,mm)
height:图像显示高度(单位为毫米,mm)
自定义数据包含一系列自定义属性字段,可用于支持电子印章扩展特性,其ASN.1定义为
ExtensionDatas::=SEQUENCE SIZE(0..MAX)OF ExtData
ExtData::=SEQUENCE{
extnID OBIECT IDENTIFIER, --自定义扩展字段标识
critical BOOLEAN DEFAULT FALSE, --自定义扩展字段是否关键
extnValue OCTET STRING --自定义扩展字段数据值
}
人力资源部自定义如下:
自定义数据包括如下内容:
a) 印章制作单位信息(sealMakingUnitInfo)用于标识电子印章的印章制作单位。该数据项应为字符型,长度不大于 200 个字节,单位信息格式为“统一社会信用代码+名称”。其 ASN.1 的
结构如下:
Id-sealMakingUnitInfo OBJECT IDENTIFIER ::= {1.2.156.112600.7.1}
sealMakingUnitInfo::= OCTET STRING
b) 印章使用单位_单位少数民族文字名称(sealHoldingUnit_EthnicMinorities Name)用于印章 使用单位的单位少数名族名称。其 ASN.1 的结构如下:
Id-sealHoldingUnitEthnicMinoritiesName OBJECT IDENTIFIER ::= {1.2.156.112600.7.2}
sealHoldingUnitEthnicMinoritiesName::= OCTET STRING
c) 印章使用单位_单位英文名称(sealHoldingUnit_EnglishName)用于印章使用单位的单位英文名称。其 ASN.1 的结构如下:
Id-sealHoldingUnitEnglishName OBJECT IDENTIFIER ::= {1.2.156.112600.7.3}
sealHoldingUnitEnglishName::= OCTET STRING
cert:对电子印章进行签名的制章者的数字证书,应符合GB/T20518中Certificate定义,按DER编码格式存放。
signAlgID:代表签名算法OID标识,应符合GB/T 33560 的规定。
示例:基于SM2算法和SM3算法的签名OID为1.2.156.10197.1.501.
signedValue:制章者对电子印章格式中印章信息域 SES_SealInfo,按 SEQUENCE 方式组成的信息内容进行数字签名所得的结果。
如果签名算法使用SM2,应符合GB/T 35276的规定SM2算法的加密签名消息语法规范
电子印章验证流程如下:
如果上述步骤都验证成功,则电子印章验证正确有效,可正常退出验证流程。
电子签章数据由签章信息、签章者证书、签名算法标识、签名值、时间戳等组成电子签章数据结构如图6所示
签章信息 | 签章者证书 | 签章者证书 | 签名值 | 时间戳 |
---|
图6 电子签章数据结构示意图
电子签章数据的ASN.1定义为:
SES_Signature::=SEQUENCE {
toSign TBS_Sign, --签章信息
cert OCTET STRING, --签章者证书
signatureAlgID OBIECT IDENTIFIER , --签名算法标识
signature BIT STRING, --签名值
timeStamp[0] BIT STRING OPTIONAL --对签名值的时间戳
}
签章信息由版本号、电子印章、签章时间、原文杂凑值、原文属性、自定义数据等组成,结构如图7
版本号 | 电子印章 | 签章时间 | 原文杂凑值 | 原文属性 | 自定义数据 |
---|
图7 签章信息的数据结构示意图
TBS_Sign::=SEQUENCE{
version INTEGER, --电子签章版本号,与电子印章版本号保持一致
eseal SESeal, --电子印章 第6.2 章 电子印章生成流程内容
timelnfo GeneralizedTime, ---签章时间
dataHash BITSTRING, --原文杂凑值
propertyInfo IA5String, --原文数据的属性
extDatas[0] ExtensionDatas OPTIONAL --自定义数据
}
其中:
version:电子签章版本号,该版本号与电子印章版本号保持一致
eseal:生成电子签章使用的电子印章。
timelnfo:电子签章对应的时间,可以是GeneralizedTime时间
dataHash:待签名原文的杂凑值。
propertyInfo:原文数据的属性,如文档 ID、日期、段落、原文内容的字节数、指示信息、签名保护范围等,此部分受签名保护,propertyInfo的具体结构可自行定义,但至少应包含签名保护范围。
extDatas:厂商自定义数据。
cert:签章者的数字证书,应符合GB/T20518的规定,按DER编码格式存放。
signatureAlgID:签名算法标识,应符合GB/T33560的规定,应与签章者证书中的算法声明保持致 。
示例:基于SM2算法和SM3算法的数字签名OID为1.2.156.10197.1.501。
signature:签章者对签章信息TBS_Sign进行数字签名的结果;注意签名过程中的原文杂凑所采用的算法应与签名算法保持协调,如果签名算法是SM2,则杂凑算法应采用SM3算法如果签名算法使用SM2,应符合GB/T35276的规定
timeStamp:对签名值的时间戳,应符合GB/T20520的规定,时间戳格式按 DER 编码存放。
电子签章生成流程如下:
根据错误代码进一步判断,如果比对失败是因为签章者证书执行更新、重签发等操作而导致,程序应提示重新制作印章。
电子签章验证流程如下:
如果上述各步骤验证均有效,那么电子签章验证结果为有效,可正常退出验证流程。