La firma digitale

La crittografia a chiave pubblica può essere usata per apporre una firma digitale ad un documento. Con firma digitale si intende l'operazione di codifica di una stringa tra 128 e 512 bit, detta message digest, che identifica univocamente il messaggio. Il message digest di un messaggio viene ottenuto applicando una funzione, detta hash, ad un messaggio di qualunque dimensione. Nelle funzioni hash è sufficiente modificare anche un solo bit nel messaggio di ingresso per ottenere un digest diverso. Inoltre è praticamente impossibile risalire al messaggio dal suo digest.

Consideriamo l'esempio illustrato in figura:


esempio di messaggio con firma digitale

Per verificare che il messaggio ricevuto sia proprio quello inviato dal mittente, e non da un impostore, occorre utilizzare la chiave pubblica del mittente e controllare la autenticità della firma.

Un apposito programma di firma digitale, eseguito dal ricevente, che usa la chiave pubblica del mittente, svolge le seguenti operazioni:

  1. separa dal messaggio la firma digitale che si trova in fondo ad esso;
  2. decodifica la firma digitale con la chiave pubblica del mittente, ottenendo il digest;
  3. ricalcola quindi il message disgest del messaggio rimanente e lo confronta con quello decodificato;
  4. se i due coincidono, il ricevente avrà la garanzia che il messaggio non abbia subito modifiche durante il trasporto in rete e che il messaggio sia inequivocabilmente quello del mittente.
La firma digitale è quindi un meccanismo che garantisce sia l'integrità sia la non repudiabilità di un messaggio, quando è garantita l'autenticità della chiave pubblica del mittente (vedi paragrafo La fiducia nella firma).

I principali algoritmi per il calcolo di un message digest sono:

MD5 (Message Digest 5)
E' una funzione hash ideata da Ron Rivest. L'algoritmo, che si basa sulla manipolazione di blocchi di dati composti di 512 bit, a loro volta suddivisi in sottoblocchi di 32 bit l'uno, produce un valore hash lungo 128 bit, rendendo disponibili 2128 valori differenti. La sicurezza dell'algoritmo si basa essenzialmente sulla difficoltà di determinare due messaggi che portino allo stesso valore hash. L'attacco più efficiente a questo algoritmo è quello basato su forza bruta.

SHA (Secure Hash Algorithm)
Algoritmo ideato dal National Institute of Standards and Technology (NIST, http://www.nist.gov) e dalla National Security Agency (NSA, http://www.nsa.gov) per essere utilizzato con l'algoritmo Digital Signature Algorithm, DSA, produce un message digest di 160 bit a partire da un input di lunghezza inferiore a 264 bit. Il message digest viene poi dato in input al DSA che produce la firma del messaggio. Viene considerato sicuro per la dimensione del digest prodotto.