XML SignatureDie XML-Signature (XML-Sig, auch XML-DSig, XMLDsig) ist eine Spezifikation, um bestehende digitale Signaturen in XML-Schreibweise nutzen zu können. Funktionell hat sie viel mit PKCS #7 gemeinsam, ist aber erweiterbar und auf das Signieren von XML-Dokumenten ausgerichtet. Sie findet Einsatz in vielen weiterführenden Web-Standards wie etwa SOAP, SAML oder dem deutschen Online-Banking-System FinTS. Mit XML-Signaturen können Daten jedes Typs signiert werden, sofern sie in das XML-Dokument der Signatur eingebettet worden sind oder mit einer URL adressiert werden können – erstere wird als enveloped signature[1], letztere als detached (losgelöste) signature[2] bezeichnet. StrukturEine XML-Signatur besteht aus einem <Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
<Reference /> etc.
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
Validierung und SicherheitsaspekteBei der Validierung einer XML-Signatur wird ein Verfahren namens Core Validation angewandt.
Mit diesem Verfahren wird festgestellt, ob die Ressourcen wirklich von der angeblichen Partei signiert wurden. Aufgrund der Erweiterbarkeit der Kanonisierungs- und Transformationsmethoden muss die überprüfende Partei jedoch auch sicherstellen, dass das, was tatsächlich signiert oder verdaut wurde, auch wirklich das ist, was in den ursprünglichen Daten vorhanden war, mit anderen Worten, dass den dort verwendeten Algorithmen vertraut werden kann, dass sie die Bedeutung der signierten Daten nicht verändern. Da die Struktur des signierten Dokuments manipuliert werden kann, was zu „Signature Wrapping“-Angriffen führt, sollte der Validierungsprozess auch die Struktur des XML-Dokuments umfassen. Signierte Elemente und Signaturelemente sollten mit absoluten XPath-Ausdrücken und nicht mit XML-Normalisierung (Kanonisierung)Die Erstellung von XML-Signaturen ist wesentlich komplexer als die Erstellung einer gewöhnlichen digitalen Signatur, da ein bestimmtes XML-Dokument (ein „Infoset“, wie es unter XML-Entwicklern üblich ist) mehr als eine legale serialisierte Darstellung haben kann. So ist beispielsweise Leerraum innerhalb eines XML-Elements syntaktisch nicht von Bedeutung, sodass Da die digitale Signatur die Datenintegrität gewährleistet, würde ein Unterschied von nur einem Byte dazu führen, dass sich die Signatur ändert. Wird ein XML-Dokument von einem Computer auf einen anderen übertragen, kann sich außerdem das Zeilenende von CR zu LF zu CR LF usw. ändern. Ein Programm, das ein XML-Dokument verdaut und validiert, kann das XML-Dokument später anders darstellen, z. B. durch Hinzufügen von überflüssigem Leerraum zwischen Attributdefinitionen und Elementdefinitionen, durch Verwendung relativer (statt absoluter) URLs oder durch Umordnung von Namespace-Definitionen. Kanonisches XML ist besonders wichtig, wenn eine XML-Signatur auf ein entferntes Dokument verweist, das von einem fehlerhaften entfernten Server auf zeitlich variierende Weise gerendert werden kann. Um diese Probleme zu vermeiden und zu gewährleisten, dass logisch identische XML-Dokumente identische digitale Signaturen ergeben, wird beim Signieren von XML-Dokumenten eine XML-Kanonisierungstransformation (häufig mit C14n abgekürzt) verwendet (für das Signieren der Eine weitere Komplikation ergibt sich aus der Art und Weise, wie der Standard-Kanonisierungsalgorithmus mit Namensraumdeklarationen umgeht; häufig muss ein signiertes XML-Dokument in ein anderes Dokument eingebettet werden; in diesem Fall liefert der ursprüngliche Kanonisierungsalgorithmus nicht dasselbe Ergebnis, als wenn das Dokument allein behandelt wird. Aus diesem Grund wurde die sogenannte Exklusive Kanonisierung geschaffen, die XML-Namensraumdeklarationen unabhängig vom umgebenden XML serialisiert. VorteileDie XML-Signatur ist flexibler als andere Formen digitaler Signaturen wie Pretty Good Privacy und Cryptographic Message Syntax, da sie nicht mit Binärdaten, sondern mit dem XML-Infoset arbeitet, sodass Teilmengen der Daten bearbeitet werden können (dies ist auch mit Binärdaten auf nicht standardisierte Weise möglich, z. B. durch Kodierung von Blöcken von Binärdaten in Base64-ASCII), wobei es verschiedene Möglichkeiten gibt, die Signatur und die signierten Informationen zu verbinden und Transformationen durchzuführen. Ein weiteres zentrales Konzept ist die Kanonisierung, d. h., es wird nur das Wesentliche signiert, wobei bedeutungslose Unterschiede wie Leerzeichen und Zeilenenden eliminiert werden. KritikEs gibt Kritik an der Architektur der XML-Sicherheit im Allgemeinen[5] und an der Eignung der XML-Kanonisierung im Besonderen als Front-End zum Signieren und Verschlüsseln von XML-Daten aufgrund ihrer Komplexität, ihrer inhärenten Verarbeitungsanforderungen und ihrer schlechten Leistungsmerkmale[6][7][8]. Das Argument ist, dass die Durchführung der XML-Kanonisierung eine übermäßige Latenzzeit verursacht, die für transaktionale, leistungsempfindliche SOA-Anwendungen einfach zu groß ist. Diese Fragen werden in der XML Security Working Group behandelt.[9][10] Ohne angemessene Richtlinien und Implementierung[4] kann die Verwendung von XML Dsig in SOAP und WS-Security zu Schwachstellen führen,[11] wie etwa XML-Signatur-Wrapping. Siehe auchLiteratur
Normen und Standards
Weblinks
Einzelnachweise
|