La struttura XML dovrebbe influenzare la firma digitale?

0

Ho un documento XML come questo:

<?xml version="1.0" encoding="utf-8"?><root><a>1</a></root>

Firmo questo documento utilizzando una libreria DLL, fornita dal provider di crittografia, e ottengo un documento come questo:

<?xml version="1.0" encoding="utf-8"?><root><a>1</a>
<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"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha1"/>
<ds:Reference>
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha1"/>
<ds:DigestValue>...</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>...</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</root>    

Dopodiché, linearizzo questa firma:

<?xml version="1.0" encoding="utf-8"?><root><a>1</a><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"/><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha1"/><ds:Reference><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha1"/><ds:DigestValue>...</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>...</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>...</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature></root>

Il terzo documento dovrebbe essere valido?

Ho una discussione con un fornitore di servizi che rifiuta di verificare i miei documenti se li linearizzo dopo firma. Tuttavia, afaik, tutti gli algoritmi devono canonicalizzare XML prima di firmare, eseguire hashing o verificare, in modo che i documenti logicamente equivalenti abbiano lo stesso hash / firma.

Allo stesso tempo, il loro sviluppatore mi dice che il suo vero, ma gli spazi bianchi strutturali non vengono rimossi durante c14n, vale a dire che gli spazi bianchi fuori dai tag vengono mantenuti e inclusi nei calcoli hash.

Chi ha ragione?
Il problema principale è che sto utilizzando IBM WebSphere Integration Bus che linearizza automaticamente qualsiasi XML e non c'è modo di disabilitare questa funzionalità. Il supporto IBM dice a "che il tuo codice non dovrebbe mai basarsi sulla struttura XML, l'XML riguarda i dati, non il testo, non è un nostro problema, se il tuo codice non funziona dopo la linearizzazione ecc."

    
posta Yeldar Kurmangaliyev 14.06.2016 - 10:10
fonte

1 risposta

1

Il fornitore di servizi è corretto e la DLL che usi per firmare il documento inserisce erroneamente spazi bianchi.

Ecco la parte rilevante delle specifiche XML:

An XML processor must always pass all characters in a document that are not markup through to the application

Le nuove righe inserite dal codice di firma non sono considerate markup: esistono tra gli elementi e quindi sono considerate parte del testo (la specifica XML chiama questo "contenuto misto").

Se non puoi modificare il comportamento del codice di firma, devi passare il suo output al servizio senza "re-linearizzare".

Per ulteriori informazioni, leggi link - questa è una copia dell'XML 1.0 specifica che è stata annotata da Tim Bray, uno degli editor di specifiche originali. Ha due note ( 1 e 2 ) che spiegano le decisioni prese dal team delle specifiche in merito agli spazi bianchi" non significativi "(TL; DR: non esiste una cosa del genere).

    
risposta data 14.06.2016 - 16:07
fonte

Leggi altre domande sui tag