2

名前空間だけが異なる 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>

名前空間のない 2 番目のファイル:

<?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 で検証できます (公開鍵があれば)。

これがどのように発生するのか、誰か説明してもらえますか?

どうもありがとう、

4

1 に答える 1

0

署名値はダイジェスト値のみに依存していないことがわかります。SignedInfo ノード全体に基づいて計算されます。 http://www.mismo.org/files/InformationSecurityGuidelines/XML_Signature_Section_for_General_I-Guide-1.pdf

于 2012-09-06T07:27:39.193 に答える