[PRECEDENTE] [INDICE] [PRINT]

XML Signature

Tecnologia per la firma elettronica basata su XML

In Breve

Le XML Signature sono le firme digitali progettate per essere utilizzate nelle transazioni XML definite dal W3C. A causa della complessità dei calcoli richiesti dagli algoritmi a chiave pubblica, le specifiche di XML Signature prevedono che non tutto il messaggio venga criptato dalla chiave privata, ma soltanto una sua "impronta digitale", chiamata "digest". Poichè l’algoritmo utilizzato per ricavare il digest è sensibile a qualsiasi cambiamento effettuato sul documento originario, chi lo riceve può avere la garanzia che esso non è stato modificato durante la trasmissione ricalcolandone il digest e confrontandolo con quello generato dal mittente. Il destinatario può inoltre controllare la validità della firma fornendola ad un algoritmo di verifica insieme al digest del messaggio e alla chiave pubblica del mittente. Attraverso questi due controlli è possibile autenticare e stabilire l’integrità del messaggio.
Una caratteristica peculiare di XML Signature è la possibilità di firmare singole parti di un documento XML. Questo è di particolare importanza nel caso di documenti scritti da più autori (in cui ciascuno di essi può firmare gli elementi che ha creato) oppure di form che devono essere completati dall’utente finale (se venisse firmato l’intero documento i dati inseriti dal destinatario invaliderebbero la firma).
Una singola XML Signature può essere usata per firmare più risorse di tipi diversi.
La validazione della firma richiede che i dati firmati siano rintracciabili attraverso uno URI definito all’interno della XML Signature oppure si trovino nel suo stesso file XML: l’elemento contenente la firma può essere infatti padre, fratello o figlio della parte di documento firmata. Se il documento firmato si trova in un documento diverso da quello che contiene la firma, si ha una "detached signature"; se la firma contiene la parte firmata, si ottiene una "enveloping signature"; se, infine, la firma è contenuta nel documento firmato, si ha una "enveloped signature".

Descrizione

XML-Signature è una Recommendation del W3C, World Wide Web Consortium, sviluppata congiuntamente con IETF, Internet Engineering Task Force, rilasciata nel febbraio 2002, che descrive come garantire l’integrità e l’autenticazione, sia del documento che del mittente, per vari tipi documenti, tra cui quelli XML, mediante l’apposizione della firma digitale. La caratteristica distintiva di XML-Signature è quella di poter intervenire anche solo su parti di documenti XML.
La flessibilità di XML però crea dei problemi nel processo di validazione della firma in quanto XML consente di esprimere le stesse informazioni in modi diversi, nel senso che due file possono essere logicamente equivalenti ma risultare differenti nel testo che li rappresenta per spazi all’interno dei tag o commenti. Quando si valida una firma digitale, si deve utilizzare esattamente lo stesso flusso di byte utilizzato nella sua generazione; per questo motivo, solo per aver aggiunto un commento o addirittura uno spazio si renderebbe invalida la firma.
Come soluzione a tale problema, W3C ha introdotto il processo di canonizzazione dei documenti, cioè la tecnica con cui è possibile manipolare contenuti XML allo scopo di rappresentarli in maniera standard. Così, due documenti logicamente equivalenti avranno esattamente la stessa forma canonica. Per eseguire tali processi si utilizzano delle cosiddette trasformazioni che manipolano il file testuale.

Creazione e verifica della firma

Nella creazione della firma digitale non viene criptato l’intero documento ma ne viene creata una sintesi, chiamata digest, prodotta da un algoritmo, chiamato funzione hash, che riceve in input il documento ed è in grado di produrre una stringa che lo identifica in maniera univoca. La funzione è molto sensibile ad ogni minimo cambiamento del documento e quindi differenti versioni produrranno digest diversi. Esempi di algoritmi di hashing utilizzabili sono Message-Digest Algorithm e Secure Hashing Algorithm. La firma, perciò, non è un altro che un digest criptato.
E’ possibile creare vari tipi di firme. Si parla quindi di:

  • enveloping signature, se la firma contiene l’oggetto firmato,
  • enveloped signature, se l’oggetto firmato contiene la firma,
  • detached signature, se l’oggetto firmato non è incluso nell’elemento firma.

Il destinatario, per controllare la validità della firma. decripta la firma digitale ed ottiene il digest originario del documento che è stato spedito; calcola poi il digest del documento che gli è arrivato e lo confronta con quello ricevuto.
A questo punto il destinatario può stabilire la veridicità del mittente e l’integrità del documento, con cui si esclude la possibilità di modifiche avvenute nel tragitto da mittente a destinatario.


[PRECEDENTE] [INDICE] [PRINT]

Contenuto realizzato nel corso delle attività del centro CROSS (www.cross-lab.it)