我有2个签名文件,只在命名空间中有所不同。这两个文件都提供相同的消息摘要。我使用相同的密钥与相同的算法RSA-SHA1签名。但是有2种不同的签名。我认为只要消息摘要,密钥和算法是相同的,无论原始文件如何,签名都应该相同。
我在openssl1.0.1中使用python-xmlsec1 lib。
带名称空间的第一个文件:
<?xml version="1.0" encoding="UTF-8"?>
<myns:MyElement xmlns:myns="urn:abc" ID="1">
<myns:SubElement AssertionID="2" attr1="value1"/>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>zzIulx6UyIN9BrYp0gpW9cCx05k=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>Gpcf/Yy1U9M6jvQL024pfMNHqB0+3kpUvFK9XF8wglgKIo9kPi2eyZ0qDEBm93ecXD1CfHLyHZc3gKR4cMsfobOkWDCoT5VA6FYwjyASnGlEyJE7dpvqU1BE7wDuCxDznI1NQsRTw4Ix8jFx20Cd91bbDibYG8Fn9ACVZdHRo=</ds:SignatureValue>
</ds:Signature>
</myns:MyElement>
没有命名空间的第二个文件:
<?xml version="1.0" encoding="UTF-8"?>
<myns:MyElement xmlns:myns="urn:abc" ID="1">
<myns:SubElement AssertionID="2" attr1="value1"/>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference>
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>zzIulx6UyIN9BrYp0gpW9cCx05k=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>gs3U/ea2KmLbAy5Tle0196W+AcW7ftS2POgZHYaGLUX0QgPXRx5+a0ZhJ4d0NitzaTgXQtnPaMfqcsw8ZMBEQxYLdeulErtosX5bpiOt9SQpbRre7hB8VJPjb2ZT+Vu5V4SkAf1LI624JjeVUr0xrSjoCSP5ppxW87gQDPU=</SignatureValue>
<KeyInfo>
<KeyName/>
</KeyInfo>
</Signature>
</myns:MyElement>
两个文件都可以通过xmlsec验证(给定公钥)。
有人可以解释一下这是怎么发生的吗?
非常感谢,
答案 0 :(得分:0)
我发现签名值不仅取决于摘要值。它是基于整个SignedInfo节点计算的。 http://www.mismo.org/files/InformationSecurityGuidelines/XML_Signature_Section_for_General_I-Guide-1.pdf