|
|
 |
XML-Verschlüsselung (XML Encryption)
Status: W3C Note vom 4.03.2002
Version:
Homepage: http://www.w3.org/TR/xmlenc-core
Verfasser: W3C
Für die Sicherheit von XML-Dokumenten ist die Verschlüsselung der Inhalte in hohem Maße kritisch. Das gilt natürlich insbesondere für Daten, die ein Anwender über ungeschützte Internet-Verbindungen übermittelt. Die XML-Encryption-Funktionen sorgen für die Verschlüsselung der XML-Dokumente - oder Teilen davon. Bei den verschlüsselten Daten handelt es sich ebenfalls um XML-Dokumente. Es gibt weitere Besonderheiten: So ist beispielsweise eine fein abgestufte Verschlüsselung möglich, etwa von einzelnen Attributen, deren Werten oder auch Teilbäumen. Wie die XML-Signaturen fügt sich auch diese Technik nahtlos in XML ein. Außerdem ermöglicht XML-Encryption Vertraulichkeit auf Anwendungs- und nicht nur auf Verbindungsebene.
Damit man Daten erfolgreich verschlüsseln und mit einer Gegenseite austauschen kann sind vier Basisinformationen erforderlich:
- Der verschlüsselte Inhalt, der die chiffrierten Informationen, zumindest aber eine Referenz auf deren Speicherort enthält
- Unverschlüsselter Inhalt mit relevanten Informationen für die Interaktion. Dabei kann es sich um Inhalte handeln, die aus Performance-Gründen oder auch aus sicherheitstechnischen Überlegungen heraus nicht verschlüsselt werden müssen
- Schlüsselinformationen, die Informationen über die verwendeten Schlüssel zumindest aber eine Referenz, enthalten
- Empfängerinformationen, also Informationen über das oder die Ziele der verschlüsselten Daten
Verschlüsselungsalgorithmen
Um sensible Daten für Fremde unkenntlich zu machen benutzt man Verschlüsselungsalgorithmen. Diese erzeugen aus einer Zeichenkette eine neue, die aber ohne passenden Schlüssel nicht wieder entschlüsselt werden kann. Hier werden grundsätzlich zwei verschieden Arten der Verschlüsselung benutzt:
- Verschüsselung mit symmetrischem Schlüssel, d.h. zur Ver- und Entschlüsselung wird der selbe Schlüssel verwendet. Diese Algorithmen sind effzient.
Beispiele:TripleDES, AES128
- Verschlüsselung mit asymmetrischen Schüsseln, d.h. einem Schlüsselpaar (öffentlicher und geheimer Schlüssel). Die Daten werden mit dem frei verfügbaren publickey verschlüsselt und können nur mit dem geheimen privatekey entschlüsselt werden. Diese Verschlüsselung ist aufwendiger, aber auch sicherer, da kein geheimer Schlüssel übertragen werden muss.
Beispiel: RSA
| Beispiel: Personenbezogene Daten |
<Personaldaten>
<Person ID="Mustermann00123">
<Name>HansMustermann</Name>
<Gehalt>5000</Gehalt>
<Beurteilung>
<BeurteilerURI="#Klaus Weissalles00245"/>
<Text>Mustermannwirdhierbeurteilt</Text>
<Note> 1 </Note>
</Beurteilung>
</Person>
<Person> . . . </Person>
. . .
</Personaldaten>
|
Granularität der Verschlüsselung
Es werden fünf Arten der Verschlüsselung unterschieden, je nach dem was man verschlüsselt:
- ein XML-Element
- Inhalt eines XML-Elements
- Wert eines XML-Elements
- beliebige Daten (Arbitrary Data)
- Super-Encryption, d.h. Mehrfach verschlüsselung
Die Übergänge der einzelne Punkte sind fließend. So kann man die Verschlüsselung eines gesamten XML-Dokuments sowohl als Verschlüsselung eines Elements (root-Element) als auch als die von beliebigen Daten (Type=‘‘text/xml’’) auffassen.
| Beispiel: Verschlüsselung eines XML-Elements |
<Personaldaten>
<EncryptedData ID="Person1" Type="Element">
<EncryptionMethod Algorithm="3des-cbc"/>
<KeyInfo>
<KeyName>TotalSecurityKey</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>jzHj/jl8Zuhhje8j389</CipherValue>
</CipherData>
</EncryptedData>
. . .
</Personaldaten>
|
Es wird angenommen, dass in der Personaldatenbank generell alle Daten geheim sind, also müssen alle Personendaten verschlüsselt werden. Hier wird jedes Person-Element einzeln verschlüsselt. Die Tags sind bezeichnend. KeyInfo gibt Auskunft über den Schlüssel für die Entschlüsselung. Hier wird beispielsweise nur der Name bekannt gegeben. Der Empfänger muss den Schlüssel mit dieser Information identifizieren können.
| Beispiel: Verschlüsselung mehrerer Elemente |
<Personaldaten>
<Person ID="Mustermann00123">
<Name>Hans Mustermann</Name>
<EncryptedData Type="Content">
<EncryptionMethod Algorithm="3des-cbc"/>
<KeyInfo>
<RetrievalMethod URI="http://www.beispiel.de/key#key1"/>
</KeyInfo>
<CipherData>
<CipherValue>kgfui97Gj87Hju6640kHH</CipherValue>
</CipherData>
</EncryptedData>
</Person>
</Personaldaten>
|
Hier nehmen wir an, dass die Namen der Personen bekannt sein dürfen , doch nicht deren Gehalt und Beurteilung.
Die RetrievalMethod gibt an wie bzw. wo man den Schlüssel erhält. Hier ist es ein Verweis auf einen Schlüssel, der an anderer Stelle liegt.
Wenn nur ein atomarer Wert eines Elements verschlüsselt werden soll, so wird wie im letzten Fall verfahren (Type=‘‘Content’’). Die Verschlüsselung ersetzt den Wert.
| Beispiel: Verschlüsselung beliebiger Daten |
. . .
<Beurteilung>
<Beurteiler URI="#Klaus Weissalles00245" Type="Person"/>
<Text>
<EncryptedData ID="‘Beurteilung1" Type="text/txt">
<KeyInfo>
<EncryptedKey CarriedKeyName="BeurteilungsKey">
<KeyInfo>
<KeyName>SchluesselKey</KeyName>
<ReferenceList>
<DataReference URI="#Beurteilung1"/>
</ReferenceList>
</KeyInfo>
<CipherData>
<CipherValue>67GUo;667hhdik</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherReference URI="http://www.beispiel.txt/beurt.txt"/>
</CipherData>
</EncryptedData>
</Text>
<Note>1</Note>
</Beurteilung>
|
Beliebige Daten können jedes Dokument bezeichnen, auch ein gesamtes XML-Dokument (text/xml), JPG-Bilder (image/jpg) etc. Diese Daten müssen nicht in dem selben XML-Dokument vorliegen, sondern es sind auch externe Quellen zugelassen. Sie werden dann durch URI-Referenzen bestimmt. Bei der Verschlüsselung wird das gesamte externe Dokument durch die Verschlüsselung ersetzt. In dem verweisenden Dokument bleibt ein Verweis des Typs CipherReference. Angenommen der Beurteilungstext einer Person liegt in einer externen Text Datei und soll verschlüsselt werden. Hier ist der Schlüssel zum Wiederherstellen der Beurteilung in EncryptedData direkt zu finden. Allerdings ist dieser wiederum verschlüsselt, sonst wäre die Verschlüsselung der Beurteilung nutzlos. Man sieht, dass das EncryptedKey-Element ähnlich dem EncryptedData-Element aufgebaut ist.
| Beispiel: Super-Encryption |
<Personaldaten>
<EncryptedData>
<KeyInfo>
<KeyName> PersonaldatenzugangsrechteKey </KeyName>
</KeyInfo>
<CipherData>
<CipherValue>
hier steht die Verschlüsselung der Daten
</CipherValue>
</CipherData>
</EncryptedData>
</Personaldaten>
|
Super-Encryption ist ein wesentlicher Punkt für hierarchische Zugangsrechte. Z.B. darf die Personalsachbearbeiterin das Gehalt einer Person einsehen, doch nicht seine Beurteilung. Diese darf nur von ihren Vorgesetzten eingesehen werden. Für andere sind die gesamten Daten unzugänglich.
Entschlüsselt man CipherValue, dann würde innerhalb des Beurteilung-Elements wieder ein EncryptedData Element stehen. Dieses könnte dann nur von den Vorgesetzten eingesehen werden.
| |