前言:
安全电子签章是通过采用PKI公钥密码技术,将数字图像处理技术与电子签名技术进行结合,以电子形式对加盖印章图像数据的电子文档进行数字签名,以确保文档来源的真实性以及文档的完整性,防止对文档未经授权的篡改,并确保签章行为的不可否认性。
在使用电子印章对各种文档进行电子签章过程中,签章者通过数字签名对文档数据进行签章处理,从而达到与传统纸质文件盖章操作相同的可视化效果,同时又利用数字签名技术保障了文档数据的真实性、完整性以及签章者行为的不可否认性。
签章数据结构
v4
电子签章数据由签章信息、签章者证书、签名算法标识、签名值、时间戳等组成。
签章信息由版本号、电子印章、签章时间、原文杂凑值、原文属性、自定义数据等组成
其中:
version:电子签章版本号,该版本号与电子印章版本号保持一致。
eseal:生成电子签章使用的电子印章。
timeInfo:电子签章对应的时间,可以是GeneralizedTime时间。
dataHash:待签名原文的杂凑值。
propertyInfo:原文数据的属性,如文档ID、日期、段落、原文内容的字节数、指示信息、签名保护范围等,此部分受签名保护,propertyInfo的具体结构可自行定义,但至少应包含签名保护范围。
extDatas:厂商自定义数据。
签章者证书:cert:签章者的数字证书,应符合GB/T 20518的规定,按DER编码格式存放。
签名算法标识
signatureAlgID:签名算法标识,应符合GB/T 33560的规定,应与签章者证书中的算法声明保持一致。
签名值
signature:签章者对签章信息TBS_Sign进行数字签名的结果,注意签名过程中的原文杂凑所采用的算法应与签名算法保持协调,如果签名算法是SM2,则杂凑算法应采用SM3算法
时间戳
timeStamp:对签名值得时间戳,应符合GB/T 20520的规定,时间戳格式按DER编码存放
电子签章生成流程
a) 准备电子印章,并验证电子印章的正确性和有效性,具体步骤如下:
1)验证电子印章正确性和有效性
2)选择拟进行电子签章的签章者证书,并验证该证书的有效性,验证项至少包括:证书信任链、证书有效期验证、证书是否被撤销、密钥用法是否正确。
3)根据电子印章中的签章者证书列表类型,提取电子印章中的签章者证书信息列表,并用来判断步骤2)选择的签章者证书是否在列表中,如果证书信息类型值为1,则直接比对证书,如果值为2,则计算步骤2)中的证书的杂凑再进行比对
如果拟签章者在电子印章的签章者列表中,则进行后续流程;
如果比对失败,返回错误代码并退出签章流程,根据错误代码进一步判断,如果比对失败是因为签章者证书执行更新、重签发等操作而导致,程序应提示重新制作印章。
b) 对原文进行电子签章,具体步骤如下:
1)按照propertyInfo中的签名保护范围来准备待签名原文
2)将待签名原文数据进行杂凑运算,形成原文杂凑值
3)按照电子签章数据格式组成签章信息
4)签章者对签章信息进行数字签名,生成签名值
5)如果需要加盖时间戳,则利用上述签名值产生相应的时间戳
6)将步骤3)4)5)以及签章者信息、签名算法标识组成电子签章数据
电子签章验证流程如下:
a) 验证电子签章数据格式的正确性
1)根据电子印章数据格式来解析电子签章数据。
2)若解析失败,则返回错误代码并退出验证流程。
3)按照电子印章验证流程验证电子签章中的电子印章的正确性。
4)如果电子签章或电子印章数据格式不正确,则返回错误代码并退出验证流程。
b) 验证电子签章签名值是否正确
1)根据步骤a)解析所得的签章信息、签章者证书和签名算法标识,验证电子签章签名值。
2)如果签名值验证失败,则返回错误代码并退出验证流程。
c)验证签章者证书与电子印章的匹配性
1)提取电子印章中的签章者证书信息类型与签章者证书信息列表。
2)如果上述签章者证书信息类型值为1,则需要比对数字证书。将步骤a)解析所得的签章者证书与电子印章中签章者证书信息列表内的证书逐一作二进制比对,若均比对失败,则返回错误代码并退出验证流程。
3)如果上述签章者证书信息类型值为2,则需要比对证书的杂凑值。先计算步骤a)解析所得的签章者证书的杂凑值,再与电子印章中签章者证书信息列表内的杂凑值逐一作比对,若均比对失败,则返回错误代码并退出验证流程。
d)验证电子印章的有效性
1)从签章信息中提取电子印章,按照电子印章验证流程验证印章的有效性,若验证失败,需集合签章信息中的签章时间综合判断。
2)若电子印章失效因制章者证书失效导致,且在签章时间点上制章者证书也是无效的,则应记录为提示信息。
3)若电子印章失效因过期或被撤销所导致,且在签章时间不在电子印章有效期内,或当时电子印章不在正常状态,则返回错误代码并退出验证流程。
4)验证签章时刻,电子印章是否处于正常状态,如不处于正常状态,则返回错误代码并退出验证流程。
e)验证签章者证书有效性
1)从电子签章数据获得签章者证书,验证签章者证书有效性,验证项至少包括:证书信任链验证、证书有效期验证、证书是否被撤销、密钥用法是否正确。
2)若签章者证书有效性验证失败且是由于证书信任链验证或密钥用法不正确导致的,则返回错误代码并退出验证流程。
3)若签章者证书有效性验证失败且是由于证书过期或证书状态已撤销导致的,则按照步骤f)进一步判断
f)验证签章时间的有效性
1)比对签章者证书有效期和签章时间,如果签章时间不在签章者证书有效期内,则签章无效,验证失败,返回错误代码并退出验证流程。
2)如果签章时间处于签章者证书有效期内,则检查对应的撤销列表,如果证书在签章时间处于失效状态,则签章无效,验证失败,返回错误代码并退出验证流程。
g)验证原文杂凑
1)从电子签章数据中提取propertyInfo数据,从propertyInfo中提取签名保护范围提取待验证原文
2)将待验证原文数据进行杂凑运算,形成待验证原文杂凑值。
3)从电子签章数据中提取原文杂凑值,与上述待验证原文杂凑值进行二进制比对,如果比对失败,则电子签章验证失败,返回错误代码并退出验证流程。
h)验证时间戳的有效性
1)如果电子签章数据中包含时间戳,则应进行时间戳的有效性验证。
2)若时间戳验证不通过,则签章无效,返回错误代码并退出验证流程
3)比对时间戳中的时间与签章时间,若签章时间晚于时间戳中的时间,则签章无效,返回错误代码并退出验证流程。