Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

XML Encryption

XML Encryption: proteggere un documento XML o parte di esso
XML Encryption: proteggere un documento XML o parte di esso
Link copiato negli appunti

Grazie alla sua caratteristiche di flessibilità ed espandibilità, XML è molto utilizzato come formato di scambi dati tra applicazioni.

In molti ambiti (commerciale, militare, etc.) risulta molto importante avere a disposizione uno strumento in grado di assicurare la protezione dei dati che vengono scambiati tra le applicazioni.

Attualmente lo strumento maggiormente utilizzato per garantire la sicurezza in ambito è SSL (Secure Socket Layer) che permette di creare un canale protetto per lo scambio di dati tra due applicazioni.
Questa tecnologia male si adatta alla protezione di singole parti di un documento, in quanto cifra l'intero documento e soprattutto protegge il dato durante lo scambio, ma una volta arrivato a destinazione il dato viene decifrato e non è quindi più protetto.

In XML il problema della sicurezza è affrontato dalla specifica di XML Encryption, una tecnologia in grado di proteggere un documento XML o parti di esso. XML Encription permette di cifrare gli elementi di un documento XML utilizzando i più diffusi algoritmi di crittografia, sia a chiave simmetrica che a chiave pubblica.

In sistema a chiave simmetrica il dato viene codificato utilizzando la stessa chiave sia per la codifica sia per la decodifica e questo impone che entrambe l'applicazione che riveve i dati conosca la chive per poterli decodificare correttemente.

In un algoritmo a chiave pubblica sono presenti due chiavi tra loro correlate: una pubblica (che può essere tranquillamente divulgata) ed una privata (che deve essere tenuta segreta). In questo sistema ogni codifica fatta con una chiave può essere decodificata solamente con l'altra chiave; quindi per proteggere i dati da inviare ad una determinata persona è sufficiente utilizzare la chiave pubblica ad essa associata. In questo modo ho la sicurezza che solo quella determinata persona potrà decodificare i dati visto che è l'unica a conoscenza della chiave privata.

Consideriamo il seguente esempio di documento XML:

<?xml version="1.0"?>
<acquirente>
  <nome>Mario Rossi</nome>
  <carta_di_credito>
    <numero>1234 5678 9123 4567</numero>
    <scadenza>12/2003</scadenza>
  </carta_di_credito>
</acquirente>

Vediamo come possiamo proteggere l'informazione relativa al numero di carta di credito utilizzando XML Encryption.

<?xml version="1.0"?>
<acquirente>
  <nome>Mario Rossi</nome>
  <carta_di_credito>
    <EncryptedData Id="Enc_esempio" 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#rsa-1_5" />
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldisg#">
        <ds:KeyName>M_Rossi</ds:KeyName>
      </ds:KeyInfo>
      <CipherData>
        <CipherValue>A55BDBC11</CipherValue>
      </CipherData>
    </EncryptedData>
    <scadenza>12/2003</scadenza>
  </carta_di_credito>
</acquirente>

Nel documento XML l'elemento cifrato viene sostituito dall'elemento <EncryptedData> che contiene i dati protetti e le informazioni relative all'algoritmo crittografico utilizzato.
L'attributo Type permette di specificare quale parte del documento viene cifrata: un solo elemento (#Element), come in questo caso, o un gruppo di elementi (#Content).

L'elemento <EncryptionMethod> permette di descrivere l'algoritmo utilizzato per cifrare il dato; in questo esempio abbiamo utilizzato RSA, un algoritmo a chiave pubblica.

Le informazioni sulla chiave da utilizzare sono contenute all'interno dell'elemento <ds:KeyInfo>. In questo esempio l'elemento <ds:KeyName> indica l'identificativo della chiave da utilizzare per decifrare il dato.

L'elemento <CipherData> racchiude i dati codificati. Al suo interno può essere presente l'elemento <CipherValue> (come in questo caso), che contiene il dato cifrato rappresentato da una sequenza di ottetti in base64, oppure l'elemento <CipherReference>, che indica l'URI contenente il dato cifrato.

Vediamo adesso un altro esempio di utilizzo di XML Encryption.

<?xml version="1.0"?>
<acquirente>
  <nome>Mario Rossi</nome>
  <carta_di_credito>
    <EncryptedData Id="Enc_esempio" Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldisg#">
        <ds:RetrivalMethod URI="#Key_esempio" Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"/>
        <ds:KeyName>M_Rossi</ds:KeyName>
      </ds:KeyInfo>
      <CipherData>
        <CipherValue>A12EABC3A</CipherValue>
      </CipherData>
    </EncryptedData>
  </carta_di_credito>
</acquirente>
<EncryptedKey Id="Key_esempio" xmlns="http://www.w2.org/2001/04/xmlenc#">
  <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
  <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:KeyName>M_Rossi</ds:KeyName>
  </ds:KeyInfo>
  <CipherData>
    <CipherValue>abcxyz</CipherValue>
  </CipherData>
  <ReferenceList>
    <DataReference URI="#Enc_esempio"/>
  </ReferenceList>
</EncryptedKey>

In questo caso abbiamo utilizzato un algoritmo a chiave simmetrica, chiamato 3DES (triple Data Encryption Standard), per codificare gli elementi <numero> e <scadenza> del documento d'esempio ed in questo esempio viene evidenziata un'altra caratteristica di XML Encryption: la possibilità di cifrare anche la chiave di codifica.

In questo modo la chiave per decodificare il dato viene trasmessa, anch'essa cifrata, insieme al dato protetto all'interno del documento XML.

All'interno di <ds:KeyInfo> troviamo adesso l'elemento <ds:RetrivalMethod> che contiene il riferimento all'elemento <EncryptedKey> che contiene la chiave per la decodifica.

La struttura di quest'ultimo elemento è molto simile a quella di <EncryptedData> con la sola differenza che all'interno di <CipherData> troviamo codificata una chiave e non un elemento XML.

Infatti, all'interno di <CipherData>, è contenuta la chiave utilizzata per codificare il dato secondo l'algoritmo 3DES e cifrata mediante l'algoritmo di cifratura RSA.

L'elemento <ReferenceList> contiene <DataReference> che indica il riferimento ai dati codificati con la chiave definita in <EncryptedKey>.

Per un'analisi più approfondita su XML Encryption e sugli algoritmi di cifratura utilizzabili per proteggere i documenti XML, vi consiglio la lettura della specifica del linguaggio che potete trovare all'indirizzo: http://www.w3.org/tr/xmlenc-core.

Ti consigliamo anche