参考文献的XML签名版本控制

时间:2014-05-13 11:59:07

标签: xml xml-signature

是否有一种标准定义的方式来处理签名XML内容中的版本控制? 为了弄清楚我想做什么,这是我解决问题的方法:

<root>
    <Data vid="1">
         <value>123</value>
         ...
    </Data>
    <Misc vid="1">
         <value>smthng</value>
    </Misc>
    <Sigature>
         <SignedInfo>
              <Reference ref="//root/Data[@vid = '1']">
                   <DigestValue>F234D=</Digestvalue>
              </Reference>
              <Reference ref="//root/Misc[@vid = '1']">
                   <DigestValue>12dA5=</Digestvalue>
              </Reference>
         </SignedInfo>
         <SignatureValue>2828282=</SigantureValue>
     </Signature>
</root>

如果我现在更改数据,请将<Data vid="1">替换为<Data vid = "2">并附加另一个Siganture,如下所示:

<root>
    <Data vid="2">
         <value>CHANGED</value>
         ...
    </Data>
    <Misc vid="1">
         <value>smthng</value>
    </Misc>
    <Sigature>
         <SignedInfo>
              <Reference ref="//root/Data[@vid = '1']">
                   <DigestValue>F234D=</Digestvalue>
              </Reference>
              <Reference ref="//root/Misc[@vid = '1']">
                   <DigestValue>12dA5=</Digestvalue>
              </Reference>
         </SignedInfo>
         <SignatureValue>2828282=</SigantureValue>
         <Keyinfo />
     </Signature>
    <Sigature>
         <SignedInfo>
              <Reference ref="//root/Data[@vid = '2']">
                   <DigestValue>F234D=</Digestvalue>
              </Reference>
         </SignedInfo>
         <SignatureValue>282AFDE82=</SigantureValue>
         <Keyinfo />
     </Signature>
</root>

我可以在我的代码中通过评估两个签名来保护数据和杂项的完整性,但忽略了无法解决的引用,在这种情况下 // root / Data [@vid ='1']无法检查,因为它不再存在。

简单地辞去所有内容是不可能的,因为必须清楚,谁是最后一个更新签名数据的哪一部分。 如果仅更新数据(例如,未经许可更新或读取杂项的客户端),则只能通过新签名对数据进行签名,必须保留旧签名以识别misc的最后一个编辑器。

SignedInfo和Reference TAG有一个可选的Attribute id,用于在XML文档的其他地方引用它们,因此不应该回收它们用于版本控制。

我提出的另一个想法是根本不使用ID,只检查所有签名,确保对于多次签名的引用,至少有一个签​​名有效。

如何正确完成/ W3C希望如何完成?

0 个答案:

没有答案