XML-Verschlüsselung
Die XML-Verschlüsselung (Extensible Markup Language) ist eine Spezifikation, die vom World Wide Web (WWW) Consortium (W3C) im Jahr 2002 entwickelt wurde und die erforderlichen Schritte zum Verschlüsseln von Daten, zum Entschlüsseln von Daten, die Syntax für die Darstellung der mit XML verschlüsselten Daten, die zum Entschlüsseln der Daten verwendeten Informationen und eine Liste von Verschlüsselungsalgorithmen wie Triple Data Encryption Standard (DES), Advanced Encryption Standard (AES) und den Rivest-Shamir-Adleman-Algorithmus (RSA) beschreibt.
You can apply XML encryption to an XML element, XML element content, and arbitrary data, including an XML document. For example, suppose that you need to encrypt the <CreditCard> element shown in the example 1.
Beispiel 1: XML-Beispieldokument
<PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<CreditCard Limit='5,000' Currency='USD'>
<Number>4019 2445 0277 5567</Number>
<Issuer>Example Bank</Issuer>
<Expiration>04/02</Expiration>
</CreditCard>
</PaymentInfo>
Beispiel 2: XML-Dokument mit einem gemeinsamen geheimen Schlüssel:
Beispiel 2 zeigt das XML-Dokument nach Verschlüsselung. Das Element <EncryptedData> stellt das verschlüsselte Element <CreditCard> dar. Das Element <EncryptionMethod> beschreibt den angewandten Verschlüsselungsalgorithmus, der in diesem Fall "Triple DES" ist. Das Element <KeyInfo> enthält die Informationen zum Abrufen eines Entschlüsselungsschlüssels. Dies ist in diesem Beispiel das Element <KeyName>. Das Element <CipherValue> enthält den verschlüsselten Text, der durch Serialisierung und Verschlüsselung des Elements <CreditCard> abgerufen wurde.
<PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<EncryptedData Type='http://www.w3.org/2001/04/xmlenc#Element'
xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod
Algorithm='http://www.w3.org/2001/04/xmlenc#tripledes-cbc'/>
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<KeyName>John Smith</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>ydUNqHkMrD...</CipherValue>
</CipherData>
</EncryptedData>
</PaymentInfo>
Beispiel 3: Ein XML-Dokument, das mit dem öffentlichen Schlüssel des Empfängers verschlüsselt wird:
In Beispiel 2 wird davon ausgegangen, dass Sender und Empfänger einen gemeinsamen geheimen Schlüssel (Secret Key) haben. Wenn der Empfänger ein Schlüsselpaar aus öffentlichem und privatem Schlüssel besitzt, was wahrscheinlich der Fall ist, kann das Element <CreditCard>, wie in Beispiel 3 gezeigt, verschlüsselt werden. Das Element <EncryptedData> ist dasselbe wie das Element <EncryptedData> in Beispiel 2. Das Element <KeyInfo> enthält jedoch ein Element "EncryptedKey".
<PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<EncryptedData Type='http://www.w3.org/2001/04/xmlenc#Element'
xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod
Algorithm='http://www.w3.org/2001/04/xmlenc#tripledes-cbc'/>
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<EncryptedKey xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod
Algorithm='http://www.w3.org/2001/04/xmlenc#rsa-1_5'/>
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<KeyName>Sally Doe</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>yMTEyOTA1M...</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>ydUNqHkMrD...</CipherValue>
</CipherData>
</EncryptedData>
</PaymentInfo>
XML-Verschlüsselung gemäß WSS-Core:
Die Spezifikation WSS-Core wird von der Organization for the Advancement of Structured Information Standards (OASIS) entwickelt. Die Spezifikation beschreibt Erweiterungen für SOAP-Messaging, die durch Nachrichtenintegrität, Nachrichtenvertraulichkeit und Authentifizierung jeder Nachricht einen besseren Schutz bieten. Die Vertraulichkeit von Nachrichten wird durch Verschlüsselung gemäß XML-Verschlüsselung realisiert.
Gemäß der Spezifikation WSS-Core ist die Verschlüsselung jeder Kombination von Teilen des Nachrichtenhauptteils (Body), Header-Blöcken, ihren Unterstrukturen und Anhängen einer SOAP-Nachricht zulässig. Außerdem fordert die Spezifikation, dass bei der Verschlüsselung von Teilen einer SOAP-Nachricht den verschlüsselten Teilen der Nachricht eine Referenz aus dem Sicherheitsheader vorangestellt werden muss. Die Referenz kann dem Empfänger einen Hinweis darauf geben, welche verschlüsselten Teile der Nachricht zu entschlüsseln sind.
Die XML-Syntax der Referenz basiert auf den Informationen, die verschlüsselt werden, und der Art der Verschlüsselung. Beispiel: Das Element <CreditCard> in Beispiel 4 ist mit einem gemeinsamen geheimen Schlüssel oder dem öffentlichen Schlüssel des Empfängers verschlüsselt.
Beispiel 4: SOAP-Beispielnachricht
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
<SOAP-ENV:Body>
<PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<CreditCard Limit='5,000' Currency='USD'>
<Number>4019 2445 0277 5567</Number>
<Issuer>Example Bank</Issuer>
<Expiration>04/02</Expiration>
</CreditCard>
</PaymentInfo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Die ausgegebenen SOAP-Nachrichten werden in den Beispielen 5 und 6 gezeigt. In diesen Beispielen wird das Element <ReferenceList> bzw. <EncryptedKey> als Referenz verwendet.
Beispiel 5: SOAP-Nachricht, die mit einem gemeinsamen geheimen Schlüssel verschlüsselt ist
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
<SOAP-ENV:Header>
<Security SOAP-ENV:mustUnderstand='1'
xmlns='http://schemas.xmlsoap.org/ws/2003/06/secext'>
<ReferenceList xmlns='http://www.w3.org/2001/04/xmlenc#'>
<DataReference URI='#ed1'/>
</ReferenceList>
</Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<EncryptedData Id='ed1'
Type='http://www.w3.org/2001/04/xmlenc#Element'
xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod
Algorithm='http://www.w3.org/2001/04/xmlenc#tripledes-cbc'/>
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<KeyName>John Smith</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>ydUNqHkMrD...</CipherValue>
</CipherData>
</EncryptedData>
</PaymentInfo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Beispiel 6: Eine SOAP-Nachricht, die mit dem öffentlichen Schlüssel des Empfängers verschlüsselt ist:
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>
<SOAP-ENV:Header>
<Security SOAP-ENV:mustUnderstand='1'
xmlns='http://schemas.xmlsoap.org/ws/2003/06/secext'>
<EncryptedKey xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod
Algorithm='http://www.w3.org/2001/04/xmlenc#rsa-1_5'/>
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<KeyName>Sally Doe</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>yMTEyOTA1M...</CipherValue>
</CipherData>
<ReferenceList>
<DataReference URI='#ed1'/>
</ReferenceList>
</EncryptedKey>
</Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>John Smith</Name>
<EncryptedData Id='ed1'
Type='http://www.w3.org/2001/04/xmlenc#Element'
xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod
Algorithm='http://www.w3.org/2001/04/xmlenc#tripledes-cbc'/>
<CipherData>
<CipherValue>ydUNqHkMrD...</CipherValue>
</CipherData>
</EncryptedData>
</PaymentInfo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Beziehung zur digitalen Signatur:
Die Spezifikation WSS-Core unterstützt auch die Nachrichtenintegrität, die über eine digitale Signatur gemäß der XML-Signaturspezifikation realisiert wird.
Die Kombination von Verschlüsselung und digitaler Signatur für gemeinsame Daten führt zu einer Schwachstelle bei der Verschlüsselung.