Firma elettronica

La firma elettronica


La firma elettronica sorge dalla necessità delle imprese e delle amministrazioni di ridurre i costi e accrescere la sicurezza dei loro processi interni.

Uno dei metodi della firma elettronica è la firma elettronica scritta che consiste della captazione della firma fisica mediante un dispositivo per firme, chiamato pad delle firme.

Per realizzare la firma elettronica scritta sono necessari hardware e software adeguati.

La teoria
La firma elettronica di un documento è il risultato dell’applicazione di un certo algoritmo matematico, chiamato funzione hash, al contenuto. Questa funzione hash associa un valore di un insieme finito (generalmente i numeri naturali) al suo input. Quando l’input è un documento, il risultato della funzione è un numero che identifica quasi univocamente il testo in concreto. Se si allega questo numero al testo, il destinatario puó applicare nuovamente la funzione e verificare il risultato con quello che ha ricevuto. Nonostante ció, vi sono alcune difficoltá.

Le possibilità di rete della firma elettronica
Affinchè sia utile, la funzione hash deve soddisfare due importanti requisiti. In primo luogo, deve essere difficile trovare due documenti il cui valore per la funzione “hash” sia uguale. In secondo luogo, dato uno di questi valori, dovrebbe essere difficile recuperare il documento che lo ha prodotto.


Alcuni sistemi di codificazione di dominio pubblico possono essere utilizzati per firmare dei documenti. Colui che firma cifra o codifica il documento con la sua chiave privata e chiunque voglia verificare la firma e vedere il documento, non deve fare altro che usare la chiave pubblica del firmatario per decifrarla.


Esistono funzioni "hash" designate per soddisfare queste due importanti proprietà. SHA e MD5 sono esempi di questo tipo di algoritmi. Per farne uso, il documento si firma con una funzione "hash", il cui risultato è la firma. Un’altra persona può verificare la firma attraverso la stessa funzione con copia del documento confrontando il risultado con il documento originale. Se coincidono, è praticamente sicuro che che i documenti siano identici. Il problema consiste nell’usare una funzione "hash" per firme digitali che non permetta che un "aggressore" interferisca con la verifica della stessa. Nel caso in cui il documento e la firma fossero inviati senza essere codificate, si potrebbe modificare il documento e generare una firma corrispondente senza che il destinatario ne sia al corrente. Nel caso in cui si codificasse solo il documento, un aggressore potrebbe manipolare la firma e provocare un fallimento della verifica della stessa. Un terza opzione è usare un sistema di codificazione ibrido per cifrare sia la firma che il documento.


Il firmatario userà la sua chiave privata e chiunque può usare la sua chiave pubblica per verificare la firma e il documento. Questo probabilmente può apparire logico, ma in realtà non ha alcun senso. Se questo algoritmo creasse il documento, sicuramente lo proteggerebbe anche da eventuali manipolazioni e non occorrerebbe firmarlo. Il problema piú grave è che ciò non protegge da manipolazioni nè la firma nè il documento. Con questo sistema, solamente la chiave di sessione del sistema di codifica simmetrico si codifica usando la chiave privata del firmatario. Chiunque può usare la chiave pubblica e recuperare la chiave della sessione. È quindi logico usarla per codificare documenti sostitutivi e firme per inviarle a terzi a nome del mittente.

La soluzione
Un algoritmo efficace dovrà usare un sistema con chiave pubblica per codificare solo la firma. In particolare, il valore “hash” si codificherà mediante l’uso della chiave privata del firmatario, in modo che chiunque potrà verificare la firma utilizzando la chiave pubblica corrispondente. Il documento firmato si potrà inviare usando qualsiasi altro algoritmo di codifica, o nessuno algoritmo se si tratta di un documento pubblico. Nel caso in cui si modifichi, la verifica della firma fallirà. È proprio ció quello che la verifica il compito di rilevare.

Il Digital Signature Algorithm è un algoritmo di firma con chiave pubblica che funziona come abbiamo descritto. DSA è l’algoritmo principale per firme che si usa en GnuPG.