Der XML-Kanonisierungsalgorithmus gibt zwei unterschiedliche Ergebnisse, wenn er direkt aufgerufen wird, als wenn er als Teil einer digitalen XML-Signatur aufgerufen wird.

8

Ich erhalte zwei verschiedene Hashes des gleichen XML-Dokuments, wenn ich direkt einige XML-Dateien kanonisiere, als wenn ich eine digitale Signatur darauf anlege, die auch dasselbe Canonicalization-Algorithrith auf der XML-Datei vor dem Hashing durchführt? Ich habe herausgefunden, dass die kanonische Digitalsignatur die Zeichen \ n 'und die Leerzeichen der neuen Zeilenzeichen bei der Kanonisierung enthält und der direkte Algorithmus dies nicht.

Die neue Zeile Zeichen + Leerzeichen gehört jedoch nicht zur Kanonisierungsspezifikation? Ich schaue speziell auf diese Version Ссылка

Weiß jemand was los ist? Ich habe das XML-Dokument und beide Implementierungen des Codes enthalten, so dass Sie sehen können.

Das ist wirklich rätselhaft und ich würde gerne wissen warum, fehlt mir etwas offensichtlich?

%Vor%

Der direkte Kanonisierungscode

%Vor%

Der digitale Signaturcode xml

%Vor%

Jede Idee wäre großartig! Es ist übrigens alles C # -Code.

Vielen Dank im Voraus

Jon

    
Jon 22.06.2009, 10:20
quelle

2 Antworten

7

Die Art und Weise, wie XML Sig Leerzeichen behandelt, ist meiner Meinung nach gebrochen. Es entspricht sicherlich nicht dem, was die meisten richtig denkenden Menschen als Kanonisierung bezeichnen würden. Das Ändern von Leerzeichen sollte nicht das Digest beeinflussen, aber in xmlsig tut es das.

Eine mögliche Abhilfe besteht darin, das Dokument durch eine Kanonicalizer-Routine zu übergeben, bevor es an den Signaturerstellungscode übergeben wird. Das sollte die Dinge viel vorhersehbarer machen.

Dieser Artikel könnte zur Klärung beitragen.

    
skaffman 22.06.2009, 10:25
quelle
0

Es sieht aus wie in Ihrem zweiten Code, den Sie haben

%Vor%

während Sie in der ersten nicht.

Wie ich es verstehe, verlangt die Kanonisierungsspezifikation, den Leerraum zwischen den Elementen beizubehalten, also schlage ich vor, dass Sie diese Zeile in beide einfügen.

    
Richard C 02.11.2010 12:08
quelle