2012-09-03 2 views
2

У меня есть файл подписи, который отличается только в пространстве имен. Оба этих файла предоставляют один и тот же дайджест сообщений. Я использую тот же ключ для подписывания с тем же самым RSA-SHA1. Но есть две разные подписи. Я думаю, что до тех пор, пока дайджест сообщения, ключ и алгоритм одинаковы, подпись должна быть одинаковой, независимо от того, какой файл происхождения.такое же сообщение дайджест, но другое значение подписи

Я использую python-xmlsec1 lib с openssl1.0.1.

Первый файл с пространством имен:

<?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

После тестирования с помощью Java crypto lib я вижу, что различная канонизация может привести к различной сигнатуре, но с тем же значением дайджеста. –

ответ