Vai al contenuto
Vai al menu di navigazione
Vai all'indice del modulo

L'importanza dell'identità in Internet e meccanismi di autenticazione

Firma Digitale

La firma digitale è uno strumento crittografico che consente di autenticare i documenti elettronici: così come una firma tradizionale apposta a mano su un documento di carta dimostra l'autenticità del documento stesso, allo stesso modo la firma digitale apposta su un documento digitale ne attesta l'autenticità. Nella legge italiana, la firma digitale possiede gli stessi valori giuridici di una firma autografa su carta.
La firma digitale è un componete che viene aggiunto al messaggio originale da inviare per ottenere due scopi fondamentali: verificare l'autenticità del mittente ossia che il messaggio proviene effettivamente dalla persona che dichiara di averlo mandato, ed impedire che il messaggio venga contraffatto.

Per raggiungere tali obiettivi, la firma digitale utilizza due strumenti crittografici: un sistema di crittografia asimmetrica anche definito a chiave pubblica e una funzione di hash.
La funzione di Hash viene utilizzata per ottenere un riassunto di un messaggio, definito anche come digest, mentre la crittografia asimmetrica viene utilizzata per cifrare tale riassunto ed ottenere quindi la vera e propria firma digitale del messaggio.
La firma digitale viene creata in modo tale da poter verificare sia l'autenticità del mittente che appone la firma che l'originalità del messaggio firmato che si è ricevuto, ovvero il fatto che questo non abbia subito modifiche durante il suo transito nella rete.

Creazione e verifica di una firma digitale
La firma digitale si compone di due momenti principali: la creazione e la verifica.
Consideriamo due utenti: Alice, autrice di un messaggio da firmare che deve creare la firma digitale e Bob, destinatario del messaggio il quale deve verificare la sua autenticità e quindi verificare la firma digitale. Secondo quanto prescritto dal meccanismo di crittografia a chiave asimmetrica utilizzato per la firma digitale, Alice deve disporre di una propria coppia chiavi: una pubblica e privata.

Il processo di creazione può essere così riassunto:

  1. Alice prende il suo messaggio originale M da firmare e lo sottopone alle funzione hash che ne produce un riassunto definito come “messaggio digesth(M) ;
  2. tale riassunto, il messaggio digest h(M), viene sottoposto alla cifratura con la chiave privata di Alice e si trasforma nella firma digitale C(h(M));
  3. Alice quindi allega al messaggio M il digest firmato, ed invia quindi la coppia [M, C(h(M))] ossia messaggio più firma digitale.

Il processo di verifica del messaggio [M, C(h(M))], invece, può essere riassunto come segue:

  1. Bob riceve il messaggio con allegata la firma digitale e applica il processo di decifratura con la chiave pubblica dell'autore al messaggio digest firmato, trasformando C(h(M)) in h(M);
  2. quindi applica funzione hash al messaggio primo elemento del messaggio M, ottenendo un valore h(M);
  3. i due valori ottenuti nel passo 1 e nel passo 2 vengono confrontati fra loro: se sono identici, l'autenticità del messaggio M è verificata.

Qualsiasi modifica effettuata sul messaggio M oppure sul digest firmato C(h(M)) porterà il processo di verifica ad un fallimento. Infatti, senza la chiave privata di chi ha firmato il digest, qualsiasi modifica del messaggio porta inevitabilmente ad una modifica del riassunto, perché è quasi impossibile trovare due messaggi che hanno lo stesso digest (proprietà 2). Pertanto, se si modifica il messaggio, se ne modifica il digest ed il controllo con quello firmato fallirà.

Poiché l'operazione di crittografia per un messaggio molto lungo, utilizzando la tecnica a chiave asimmetrica, potrebbe risultare complesso  ed oneroso da un punto di vista di risorse di calcolo e tempo impiegato, nella realizzazione della firma digitale sono stati introdotti i digest (riassunti del messaggio ottenuti come risultato della applicazione allo stesso di una funzione di hash). Pertanto, si preferisce firmare soltanto il riassunto di un messaggio ed unirlo al messaggio originale. Per verificare la firma sul messaggio, basta decifrare con la chiave pubblica il riassunto firmato e confrontarlo con il riassunto ottenuto dal messaggio originale. Con questo processo si riduce la complessità della realizzazione della firma digitale e si garantiscono le stesse proprietà della cifratura del messaggio per intero.

Firma digitale e firma tradizionale su carta
Anche se in linea di principio la firma digitale e quella su carta sono identiche, nella pratica ci sono delle differenze notevoli. La più importante è che la firma su carta è parte integrante del documento firmato, mentre quella digitale è un'aggiunta al documento: è possibile inviare il documento senza firma per farne perdere l'autenticità. Un'altra importante differenza è che la firma su carta è molto più facilmente falsificabile di quella digitale, dato che è sempre la stessa per ogni documento. La firma digitale, invece, è unica per ogni diverso documento ed in pratica impossibile da ricreare senza possedere la chiave privata del firmatario.

Un'ultima differenza notevole tra la firma digitale e quella su carta è l'impossibilità di distinguere il documento originale da una sua copia: poiché i documenti digitali non sono altro che una sequenza di bit, tutte le copie sono identiche tra loro!! Mentre invece se si vuole creare una copia di un documento cartaceo firmato, sarà impossibile ricreare perfettamente tutte le sue caratteristiche fisiche, come ad esempio le imperfezioni della carta, le imprecisioni della scrittura o l'utilizzo del medesimo inchiostro.

Firma digitale e certificati digitali
Come si è detto, la firma digitale necessita di due chiavi, quella pubblica e quella privata. Se Alice vuole firmare il documento in cui approva le ultime modifiche agli stipendi, non deve far altro che cifrare il messaggio digest con la propria chiave privata: chiunque voglia verificare l'autenticità del messaggio non deve far altro che decifrare con la chiave pubblica di Alice. Ma come si fa ad essere sicuri che una chiave pubblica è effettivamente quella di Alice?
Come si può essere assolutamente certi dell'autenticità di una data chiave pubblica?

Cosa accadrebbe se un certo Bob mettesse in giro la propria chiave pubblica spacciandola per quella di Alice? Bob potrebbe firmare senza problemi qualsiasi documento e chiunque usasse la chiave diffusa da Bob penserebbe che l'autore dei documenti è Alice.

Da questo semplice esempio appare evidente che è necessario un meccanismo di autenticità delle chiavi pubbliche, ovvero un metodo che permetta di accertarsi dell'identità del possessore di una chiave pubblica. Questo meccanismo è dato dai Certificati Digitali. Mediante i certificati digitali è possibile essere sicuri del possessore dell'identità associata ad una data chiave pubblica e, pertanto, essere certi dell'autenticità di un documento.

La firma digitale nella posta elettronica
L'utilizzo più comune della firma digitale avviene nella posta elettronica: con pochi clic del mouse, infatti, è possibile firmare una email e renderla autentica. L'unica cosa di cui si ha bisogno è una chiave pubblica da mettere a disposizione e la relativa chiave privata da tenere segreta. Se si utilizzano dei client di posta elettronica (come ad esempio Outlook, Thunderbird o Netscape) è possibile sfruttare dei plugin appositamente realizzati per gestire le firme digitali. In realtà, tali plugin offrono molte altre funzioni e oltre all'autenticità, possono garantire anche la riservatezza e l'integrità delle email.

I plugin per i client di posta elettronica non fanno altro che automatizzare i processi di creazione e verifica delle firme descritti in precedenza: in invio, quando si è terminata la composizione dell'email, calcolano il digest del messaggio, applicano la firma sul digest e inviano la coppia email+digest firmato; in ricezione, calcolano il digest sull'email, applicano decifratura con chiave pubblica sul digest firmato e confrontano il digest calcolato con quello ottenuto dalla decifratura.
I plugin permettono anche di generare la coppia di chiavi pubblica-privata, di memorizzare le chiavi pubbliche dei vari contatti e offrono la possibilità di ricercare le chiavi pubbliche da speciali banche di dati pubbliche, chiamate key-server.