Chiffrement XML
Le chiffrement XML (Extensible Markup Language) est une spécification développée par W3C en 2002 qui contient la procédure de chiffrement des données, la procédure de déchiffrement des données chiffrées, la syntaxe XML représentant les données chiffrées, les informations permettant de déchiffrer les données et une liste d'algorithmes de chiffrement, tels que triple Data Encryption Standard (DES), Advanced Encryption Standard (AES) et Rivest-Shamir-Adleman (RSA).
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.
Exemple 1: Document XML exemple
<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>
Exemple 2 : Document XML avec une clé secrète commune :
L'exemple 2 affiche le document XML après chiffrement. L'élément <EncryptedData> représente l'élément <CreditCard> chiffré. L'élément <EncryptionMethod> décrit l'algorithme de chiffrement appliqué, qui est triple DES dans cet exemple. L'élément <KeyInfo> contient les informations permettant d'extraire une clé de déchiffrement, qui est un élément <KeyName> dans cet exemple. L'élément <CipherValue> contient le texte chiffré obtenu par la sérialisation et le chiffrement de l'élément <CreditCard>.
<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>
Exemple 3 : Document XML chiffré avec la clé publique du destinataire :
Dans l'exemple 2, il est supposé que l'expéditeur et le destinataire ont une clé secrète commune. Si le destinataire a une paire de clés publique et privée, ce qui est sans doute le cas, l'élément <CreditCard> peut être chiffré comme décrit dans l'exemple 3. L'élément <EncryptedData> est identique à l'élément <EncryptedData> se trouvant dans l'exemple 2. Toutefois, l'élément <KeyInfo> contient un élément 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>
Chiffrement XML dans WSS-Core :
La spécification WSS-Core est en cours de développement par OASIS (Organization for the Advancement of Structured Information Standards). Elle décrit les améliorations des applications de messagerie SOAP visant à assurer la qualité de la protection à travers l'intégrité, la confidentialité des messages et une authentification unique des messages. La confidentialité des messages est assurée par le chiffrement XML.
La spécification WSS-Core supporte le chiffrement de toute combinaison de blocs de corps, de blocs d'en-tête, de leurs sous-structures et des pièces jointes d'un message SOAP. Lorsque vous chiffrez des éléments d'un message SOAP, la spécification requiert également l'ajout d'une référence provenant du bloc d'en-têtes de sécurité aux éléments chiffrés du message. La référence peut aider le destinataire à identifier les éléments chiffrés du message à déchiffrer.
La syntaxe XML de la référence varie en fonction des informations chiffrées et de leur mode de chiffrement. Par exemple, supposons que l'élément <CreditCard> de l'exemple 4 soit chiffré avec une clé secrète commune ou avec la clé publique du destinataire.
Exemple 4 : Message SOAP exemple
<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>
Les messages SOAP en résultant sont affichés dans les exemples 5 et 6. Dans ces exemples, les éléments <ReferenceList> et <EncryptedKey> sont utilisés en tant que références, respectivement.
Exemple 5 : Message SOAP chiffré avec une clé secrète commune
<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>
Exemple 6 : Message SOAP chiffré avec la clé publique du destinataire :
<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>
Relation à la signature numérique :
La spécification WSS-Core garantit également l'intégrité du message, qui est assurée par la spécification de signature numérique XML.
Une combinaison de chiffrement et de signature numérique pour des données communes entraîne des risques au niveau du chiffrement.