XML Encryption

Standard e procedure di trasmissione e standard e linguaggi di modellazione della collaborazione

In Breve

Come XML Signature, anche XML Encryption è una tecnologia in via di definizione presso il W3C.
Le specifiche di XML Encryption descrivono come criptare dati (di qualsiasi tipo) e rappresentarli in XML. Il risultato dell’operazione di crittografia è un elemento EncryptedData che contiene (attraverso il contenuto di uno dei suoi figli) o indica (attraverso uno URI) i dati cifrati. Quando si cripta un elemento XML o il suo contenuto, EncryptedData sostituisce rispettivamente l’elemento o il suo contenuto nella versione cifrata del documento XML: quindi, se si cripta l’intero documento, EncryptedData diventerà la radice del nuovo documento.
XML Encryption usa le strutture di XML Signature (quando possibile) ed è stato pensato per essere usato insieme ad esse: laddove le si utilizzino, devono essere precedute dal prefisso "ds:".

Descrizione

XML-Encryption è una W3C Recommendation datata dicembre 2002, che descrive come criptare elementi XML o file binari e rappresentare il risultato criptato in XML.
E’ possibile criptare:

  • un intero documento,
  • un elemento,
  • il contenuto di un elemento,
  • il valore di un elemento.

Il risultato del processo di cifratura è un elemento EncryptedData che contiene i dati criptati e che viene sostituito alla parte in chiaro.
Utilizzare la cifratura dei dati a livello di documento o di messaggio rende la sicurezza persistente rispetto a soluzioni che intervengono solo a livello di trasmissione, ottenendo quindi soluzioni non persistenti. Infatti, si potrebbe pensare che un protocollo come Secure Sockets Layer, sia in grado di garantire il miglior livello di sicurezza, ma non è esattamente così. SSL è un protocollo che protegge i dati nel transito della rete in modo non persistente; è una soluzione che funziona molto bene, utilizzata oggi nella quasi totalità dei servizi sicuri offerti sul web. Cosa succede, però, se si decide di trasmettere le solite informazioni ma senza utilizzare SSL? I dati viaggerebbero in chiaro e se intercettati risulterebbero completamente usufruibili da individui non autorizzati. Ecco, allora, che XML-Encryption diventa uno strumento molto importante per garantire la riservatezza dei dati.

Criptare e decriptare messaggi

Per criptare un dato, ci si deve accordare per prima cosa su quale algoritmo di cifratura utilizzare. Ne esistono molti, sia simmetrici che asimmetrici; i secondi sono sicuramente più sicuri.
Bisogna poi ottenere una chiave, che può essere anch’essa criptata, e costruire l’elemento ds:KeyInfo che la descrive. Si prosegue poi con la cifratura del dato che avviene mediante la riduzione dell’informazione in una stringa a cui si applica successivamente l’algoritmo di cifratura unito alla chiave.
Si costruisce, infine, la struttura che sarà sostituita al contesto originale. In caso si voglia utilizzare il meccanismo di reference, cioè indicare mediante un URI la posizione dei dati criptati, si salva il dato criptato da un altra parte, ad esempio in un altro file, e si inserisce nel contesto originale l’URI del documento esterno.
Per decriptare un dato, specularmente, si devono determinare l’algoritmo utilizzato, i parametri utilizzati e la chiave utilizzata. Si recuperano poi i dati criptati e si decriptano utilizzando l’algoritmo congiuntamente alla chiave. Il contenuto decriptato viene poi riposto nel suo contesto originale.

Sia nel processo di cifratura che decifratura, la chiave potrebbe essere criptata. Non c’è nessun problema a riguardo in quanto basta riapplicare gli stessi procedimenti due volte, prima per ottenere la chiave e poi per il contenuto.