У меня есть файл подписи, который отличается только в пространстве имен. Оба этих файла предоставляют один и тот же дайджест сообщений. Я использую тот же ключ для подписывания с тем же самым 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 (данный открытый ключ).
Не могли бы вы объяснить, как это может произойти?
Большое спасибо,
Кроме того, даже значение дайджеста является тем же самым, преобразование делает значение подписи другим. Здесь канонизация отличается, а не трансформируется. Может ли значение сигнатуры эффекта канона, но не значение дайджест? –
После тестирования с помощью Java crypto lib я вижу, что различная канонизация может привести к различной сигнатуре, но с тем же значением дайджеста. –