【发布时间】:2013-08-29 22:51:51
【问题描述】:
我正在学习XML Advanced Electronic Signatures。
要创建“ArchiveTimeStamp”(第 58 页),规范说:
根据 XMLDSIG 的引用处理模型处理检索到的 ds:Reference 元素。
如果结果是 XML 节点集,则对其进行规范化。 (...)
参考处理模型结束了:
<ds:Reference Id="myId" URI="http://fakefile.xml">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod/>
<ds:DigestValue/>
</ds:Reference>
该过程使用“URI=...”和“ds:Transforms”来检索数据。
以下部分摘自 (4.3.3.2 The Reference Processing Model):
URI 解引用或后续结果的数据类型 Transforms 是八位字节流或 XPath 节点集。 (...)
在本规范中,“同一文档”引用被定义为 由井号 ('#') 后跟一个 片段或由空 URI (...) 组成
除非 URI-Reference 是这样的“相同文档”引用,否则 取消引用 URI-Reference 的结果必须是八位字节流。在 特别是,由 URI 标识的 XML 文档不会被 签名应用程序,除非 URI 是同文档引用或 除非应用了需要 XML 解析的转换。
以下示例演示了 URI 属性标识的内容 以及如何取消引用:
URI="http://example.com/bar.xml"
标识八位字节 (...)URI="http://example.com/bar.xml#chapter1"
标识外部 XML 资源 (...) 的 ID 属性值为“chapter1”的元素,以八位字节流的形式提供。 (...)URI=""
标识节点集(...)URI="#chapter1"
标识包含 (...) 的节点集
问题。
对于这些参考资料:
<ds:Reference Id="myId" URI="http://fakefile.xml">
...
(empty transform list)
...
</ds:Reference>
结果 1#: (<file> ... childs ... <file>)。 不应用摘要转换
<ds:Reference Id="myId" URI="http://fakefile.xml">
...
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
...
</ds:Reference>
结果 2#:(xml with exc-c14n)。 不应用摘要转换
<ds:Reference Id="myId" URI="http://fakefile.xml">
...
<ds:Transform "fake_Xpath_transform_to_get_all_childs"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
...
</ds:Reference>
结果 3#:(只有具有 exc-c14n <child_1/>...<child_x/> 的孩子) 没有应用摘要转换。这不是要解析的有效 XML 文件,没有单个根。但可以在 fakefile.xml 上下文中使用“节点集”。
结果(1#、2# 和 3#)是“八位字节流”吗?
因为: 除非 URI-Reference 是这样的“相同文档”引用,否则取消引用 URI-Reference 的结果必须是八位字节流。
或者它们是 XML 高级电子签名规范化所需的“XML 节点集”?
因为: (...) 特别是,由 URI 标识的 XML 文档不会被签名应用程序解析,除非 URI 是同文档引用,或者除非应用了需要 XML 解析的转换。 p>
或者(除非应用了需要 XML 解析的转换)仅在参考上下文中有效并且结果是八位字节流?
欢迎文章。
【问题讨论】:
标签: xml cryptography xml-signature xades4j xml-dsig