我想解析一个XML文件及其内容。我在维基百科上读过关于它的结构和一些RFC的文章。但是我想不出一些事情,比方说这是一个XML示例:
<?xml version="1.0"?>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="urn:xml-dsig:transformation:v1.1"/>
<SignatureMethod Algorithm="some-algo"/>
<Reference URI="#KeyInfo">
<Transforms>
<Transform Algorithm="urn:xml-dsig:transformation:v1.1"/>
</Transforms>
<DigestMethod Algorithm="some-algo-256"/>
<DigestValue>some-hash-256</DigestValue>
</Reference>
<Reference URI="#Object">
<Transforms>
<Transform Algorithm="urn:xml-dsig:transformation:v1.1"/>
</Transforms>
<DigestMethod Algorithm="some-algo-256"/>
<DigestValue>some-hash-256</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>signature-value-in-base-64</SignatureValue>
<KeyInfo Id="KeyInfo">
<X509Data>
<X509Certificate>x509-cert-in-base-64</X509Certificate>
</X509Data>
</KeyInfo>
<Object Id="Object">
<Result>
...Initial XML I was signing...
</Result>
</Object>
</Signature>我的问题是:
#KeyInfo在<Reference>标记中,这意味着<KeyInfo>部分也被签名了?(因为wiki说“一个或多个引用元素指定由URI引用签名的资源”)。这就引出了第二个问题<KeyInfo>和<Object>中同时对数据进行签名,那么实际要签名的是什么?这仅仅是在<DigestValue>标记中计算的xml的这两个部分的散列,还是从<KeyInfo开始到</KeyInfo>结束标记之间的数据的整个标记?(与<Object>相同的问题)。Wiki没有具体说明这样的事情,我在RFC中迷失了方向,找不到这些问题的答案。
发布于 2022-09-27 10:02:13
KeyInfo将包括在签名中。SignedInfo元素的内容是实际得到签名的内容。首先使用指定的转换将其规范化,然后将序列化元素的字节输入到所选的签名算法中。实际内容(KeyInfo和Object)包含在签名中,因为DigestValue元素存在于SignedInfo中,而不是直接签名。因此,在签名验证期间验证这些哈希值是正确的是至关重要的。https://stackoverflow.com/questions/73854761
复制相似问题