XML 多重签名有标准吗?

iOS*_*wan 5 xml security w3c digital-signature

我已经检查了 W3C 网站上的 XML 签名语法和处理,但是它几乎没有说明多重签名。是否有在单个 xml 文件上创建多重签名的标准或规则?谢谢

示例:(仅考虑相同文件引用)

原始xml

<root>
  <item>
    <name>Apple</name>
    <price>100</price>
  </item>
</root>
Run Code Online (Sandbox Code Playgroud)

首先 A 用信封的签名签名

签名的 XML

<root>
  <item>
    <name>Apple</name>
    <price>100</price>
  </item>
  <Signature>this is Signature signed by A with Ref URL=""</Signature>
</root>
Run Code Online (Sandbox Code Playgroud)

现在,B 想要签署 XML(包含 A 的签名)

B 签名 XML

<root>
  <item>
    <name>Apple</name>
    <price>100</price>
  </item>
  <Signature>Signature A: this is Signature signed by A with Ref URL=""</Signature>
  <Signature>Signature B: this is Signature signed by B with Ref URL=""</Signature>
</root>
Run Code Online (Sandbox Code Playgroud)

然后在验证时,它变得混乱......

对于签名 A,在验证时,它看到

<root>
  <item>
    <name>Apple</name>
    <price>100</price>
  </item>
  <Signature>Signature B: this is Signature signed by B with Ref URL=""</Signature>
</root>
Run Code Online (Sandbox Code Playgroud)

但它实际签署的是

<root>
  <item>
    <name>Apple</name>
    <price>100</price>
  </item>
</root>
Run Code Online (Sandbox Code Playgroud)

(注意,由于包络变换,签名和验证时删除了签名节点)同样的问题可以通过在进行包络签名时将签名节点视为根来解决。但是如果涉及多个引用,它可能会变得更加复杂。

Eug*_*its 5

使用当前的 XMLDSig 标准对一组节点进行多个签名并将它们包含到同一个 XML 文档中是没有问题的。不需要特殊的规则或标准。

在您的示例中,每个签名(应该)不是在“根”上进行的,而是在“项目”节点(或项目节点集)上进行的。因此,签名 B 不涵盖作为待签名数据的签名 A。