XML-Verschlüsselung

Die XML-Verschlüsselung 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 XML-Syntax für die Darstellung verschlüsselter Daten, die zum Entschlüsseln der Daten verwendeten Informationen und eine Liste von Verschlüsselungsalgorithmen wie Triple DES, AES und RSA beschreibt.

Sie können die XML-Verschlüsselung auf ein XML-Element, den Inhalt eines XML-Elements und beliebige Daten einschließlich XML-Dokumente anwenden. Beispiel: Sie möchten das in Beispiel 1 gezeigte Element <CreditCard> verschlüsseln.

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 erforderlichen Informationen zum Abrufen eines Entschlüsselungsschlüssels. Dies ist in diesem Beispiel das Element <KeyName>. Das Element <CipherValue> enthält den Verschlüsselungstext, der sich durch Serialisierung und Verschlüsselung des Elements <CreditCard> ergibt.

<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), Headerblö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: Beispielnachricht der SOAP Version 1.1:

<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>
SOAP Version 1.2 unterstützt encodingStyle nicht, deshalb ändert sich das Beispiel wie folgt:
<SOAP-ENV:Envelope
   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: Eine SOAP-Nachricht der Version 1.1, die mit einem gemeinsamen geheimen Schlüssel verschlüsselt ist

<SOAP-ENV:Envelope
   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>

SOAP Version 1.2 unterstützt encodingStyle nicht, deshalb ändert sich das Beispiel wie folgt:

<SOAP-ENV:Envelope
   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>

SOAP Version 1.2 unterstützt encodingStyle nicht, deshalb ändert sich das Beispiel wie folgt:

<SOAP-ENV:Envelope 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.

Symmetrische Verschlüsselung und asymmetrische Verschlüsselung im Vergleich

Für die XML-Verschlüsselung unterstützt der Anwendungsserver zwei Typen von Verschlüsselung:

  • Symmetrische Verschlüsselung

    In den Releases vor WebSphere Application Server Version 7, einschließlich IBM® WebSphere Application Server Version 6.1 Feature Pack for Web Services, wurde die Referenz "KeyName" standardmäßig dazu verwendet, auf den gemeinsam genutzten Schlüssel außerhalb der SOAP-Nachricht zu verweisen. Der Standard Web Services Security (WS-Security) Version 1.1 empfiehlt die Verwendung der Referenz "KeyName" jedoch nicht. Da das Element "KeyName" von der Sicherheitsrichtlinie nicht unterstützt wird, wird es auch im Anwendungsserver nicht unterstützt.

    Der Standard Web Services Secure Conversation (WS-SecureConversation) definiert, wie der gemeinsam genutzte Schlüssel zwischen Client und Service ausgetaucht wird und wie auf den gemeinsam genutzten Schlüssel in der Nachricht verwiesen wird. Die im Kerberos-Tokenprofil beschriebene Verwendung von Kerberos zusammen mit Web Services Security definiert, wie ein Kerberos-Sitzungsschlüssel oder ein aus dem Sitzungsschlüssel abgeleiteter Schlüssel zur Ausführung einer symmetrischen Verschlüsselung eingesetzt wird. Daher können Sie die symmetrische Verschlüsselung einsetzen, indem Sie WS-SecureConversation oder Kerberos verwenden. WebSphere Application Server unterstützt das DerivedKeyToken, wenn WS-SecureConversation verwendet wird. Bei Verwendung von Kerberos unterstützt WebSphere Application Server sowohl den Einsatz des DerivedKeyToken als auch den direkten Einsatz des Kerberos-Sitzungsschlüssels.

  • Asymmetrische Verschlüsselung

    Für die asymmetrische Verschlüsselung führt die Spezifikation "XML Encryption" das Konzept des Key Wrapping ein. Die Daten, wie z. B. der Inhalt des SOAP-Elements "body" (Hauptteil), werden mit einem gemeinsam genutzten Schlüssel verschlüsselt, der während der Verarbeitung dynamisch generiert wird. Anschließend wird der generierte gemeinsam genutzte Schlüssel mit dem öffentlichen Schlüssel des Empfängers verschlüsselt. WebSphere Application Server unterstützt das X509Token für asymmetrische Verschlüsselung.


Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_encryptv6
Dateiname:cwbs_encryptv6.html