签名列表文件的入口点在7.4主入口中定义。签名列表文件中可以包含多个签名(例如联合发文等情况),见图85。当允许下次继续添加签名时,该文件不会被包含到本次签名的保护文件列表(References)中。
签名列表根节点对应元素说明见表66。
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
Singnatures | 签名列表根节点 | 必选 | ||
MaxSignId | ID | 安全标识的最大值,作用与文档人口文件Documcnt.xml中的MaxID相同,为了避免在签名时影响文档入口文件,采用了与ST_ID不一样的ID编码方式。推荐使用“sNNN”的编码方式,NNN从I开始 | 可选 | |
Singnature | 数字签名或安全签章在列表中的注册信息,一次签名或签章对应一个节点 | 必须 | ||
ID | ID | 签名或签章的标识 | 必选 | |
Type | string | 签名节点的类型,目前规定了两个可选值,Seal表示是安全签章,Sign表示是纯数字签名 | 必须 | |
Base_Loc | ST_Loc | 指向包内的签名描述文件 | 必选 |
参考XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<ofd:Signatures xmlns:ofd="http://www.ofdspec.org/2016">
<ofd:Signature BaseLoc="/Doc_0/Signs/Sign_0/Signature.xml" Type="Sign" ID="2"></ofd:Signature>
<ofd:MaxSignId>3</ofd:MaxSignId>
</ofd:Signatures>
OFD的数字签名通过对签名描述文件的保护间接实现对OFD原文的保护。签名结构中的签名信息(Signedlnfo)是这一过程中的关键节点,其中记录了当次数字签名保护的所有文件的二进制摘要信息,同时将安全算法提供者、签名算法、签名时间和所应用的安全印章等信息也包含在此节点内。签名描述文件同时包含了签名值将要存放的包内位置,一旦对该文件实施签名保护,则其对应的包内文件原文以及本次签名对应的附加信息都将不可改动,从而实现一次数字签名对整个原文内容的保护。签名描述文件的主要结构描述见图86。
文件摘要文件根节点为Signature,其子节点Signedlnfo对应元素说明见表67。
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
Signature | 签名描述文件的根节点 | 必选 | ||
SignedInfo | 签名要保护的原文及本次签名相关的信息 | 必选 | ||
Provider | 创建签名时所用的签章组件提供者信息 | 必选 | ||
ProviderName | string | 创建签名时所用的签章组件的提供者名称 | 必选 | |
Company | string | 创建签名时所用的签章组件的制造商 | 可选 | |
Version | string | 创建签名时所用的签章组件的版本 | 可选 | |
SignatureDateTime | string | 签名时间,记录安全模块返回的签名时间,以便验证时使用 | 必选 | |
SignatureMethod | string | 签名方法,记录安全模块返回的签名算法代码,以便验证时使用 | 必选 | |
References | 包内文件计算所得的摘要记录列表 一个受本次签名保护的包内文件对应一个Refcrcncc节点 |
必选 | ||
StampAnnot | 本签名关联的外观(用OFD中的注释来表示),该节点可出现多次 | 可选 | ||
Seal | 电子印章信息 | 可选 | ||
Bascloc | ST_Loc | 指向包内的安全电子印章文件,循密码领域的相关规范 | 必选 | |
SignedValue | ST_Loc | 指向安全签名提供者所返回的针对签名描述文件计算所得的签名值文件 | 必选 |
SignatureMethod 和 CheckMethod 参考 商用密码领域中的相关OID定义
参考XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<ofd:Signature xmlns:ofd="http://www.ofdspec.org/2016">
<ofd:SignedInfo>
<ofd:Provider ProviderName="ChinaRailway12306" Company="ChinaRailway12306" Version="4"></ofd:Provider>
<ofd:SignatureMethod>1.2.156.10197.1.501</ofd:SignatureMethod>
<ofd:SignatureDateTime>20240229124528</ofd:SignatureDateTime>
<ofd:References CheckMethod="1.2.156.10197.1.401">
<ofd:Reference FileRef="/OFD.xml">
<ofd:CheckValue>NhknjYrKzaIDnuETPCnp+yoVVPw34zVkdsP0sIpbJJE=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/Document.xml">
<ofd:CheckValue>R7m/EJtd/Xo8azMv3fLQbzaF92FYBIClE8gSnCnYam8=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/PublicRes.xml">
<ofd:CheckValue>ZPUoMhT5KptDmAO3QVbp+XNrvxDZ/pY9F4BSvIos5yY=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/DocumentRes.xml">
<ofd:CheckValue>1+qnSWBxIQKtlBvKebF3Pu1tG7Ajyrdu1PjwCFzHOe4=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/TPLS/TPL_6/Content.xml">
<ofd:CheckValue>qDYUpHHdEuTfmAsvgmCBwzQijyFnDZGPe2YhmF4ITs0=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/Pages/Page_0/Content.xml">
<ofd:CheckValue>v1cHKtixS9ZxnBqLwU7avVKJ85mE/s5I/MT2x9uVRM8=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/Attachs/Attachments.xml">
<ofd:CheckValue>aUIGiAFcIt8ntoNrVkqgX2XTUOU08UQMx5VYn1q+rmk=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/TPLS/TPL_71/Content.xml">
<ofd:CheckValue>g+buXK7D+L7C4bKnO4veX7K5xS5pvURfDeW/oSW9Y9k=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/Res/Img_48_41.png">
<ofd:CheckValue>vjTHBkOXOYslHFUg44KKERtK1ubcwNU/RtbBOgpNeU4=</ofd:CheckValue>
</ofd:Reference>
<ofd:Reference FileRef="/Doc_0/Attachs/rai_issuer_20240229_24119221152000000086.xml">
<ofd:CheckValue>tcMFGq2RaT3ASksSf0LmCz2nubxdY51QRGI+tQPg3LY=</ofd:CheckValue>
</ofd:Reference>
</ofd:References>
</ofd:SignedInfo>
<ofd:SignedValue>/Doc_0/Signs/Sign_0/SignedValue.dat</ofd:SignedValue>
</ofd:Signature>
References的下级节点记录了包内文件的摘要信息,其结构如图87所示。
Reference对应元素说明见表68。
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
CheckMethod | string | 摘要方法,视应用场景的不同使用不同的摘要方法用于各行业应用时,应使用符合该行业安全标准的算法 | 必选 | |
Reference | 针对一个文件的摘要节点 | 必选 | ||
FileRef | ST Loc | 指向包内的文件,使用绝对路径 | 必选 | |
CheckValue | basc64Binary | 对包内文件进行摘要计算,对所得的二进制摘要值进行basc64编码所得结果 | 必选 |
CheckValue 是二进制摘要值进行basc64编码,SM3的摘要结果为byte,需要通过Base64.getEncoder().encodeToString(resultBytes)转换。
一个数字签名可以跟一个或多个外观描述关联,也可以不关联任何外观,其关联方式如图 88所示。
该节点属性说明见表69。
名称 | 类型 | 说明 | 备注 | 章节 |
---|---|---|---|---|
PageRef | ST_ReflD | 引用外观注释所在的页面的标识 | 必选 | |
ID | ID | 签章注释的标识 | 必选 | |
Boundary | ST_Box | 签章注释的外观外边框位置,可用于签章注释在页面内的定位 | 必选 | |
Clip | ST_Box | 签章注释的外观裁剪设置 | 必选 |
签名值指向包内的一个二进制文件,该文件存放数字签名或签章结果。该值需满足的密码安全要求在其他规范中限定。