Firma digitale

La firma digitale, o firma elettronica, ha lo stesso scopo di quella convenzionale.

La prima cosa che può venire in mente, pensando di simulare quello che accade con carta e penna, è di creare una firma digitale che sia una rappresentazione elettronica di quella convenzionale. Una firma digitale siffatta non sarebbe altro che un insieme di byte, scelti in un qualche modo, da inserire nel file di un documento da firmare. Questa soluzione naive semplicemente non garantisce alcuna sicurezza poiché chiunque può tagliare la parte di file contenente questa "firma" per poi aggiungerla illegalmente ad un altro file.
Le proprietà che vorremmo avesse una firma digitale sono:

  1. semplicità di creazione da parte del leggittimo firmatario;
  2. impossibilità di falsificazione;
  3. semplicità di verifica da parte di chiunque.

Sistemi per la creazione e la verifica di firme digitali

Il sistema più diffuso per la creazione e la verifica di firme digitali sfrutta le caratteristiche dei sistemi crittografici a due chiavi. Un sistema crittografico garantisce la riservatezza del contento dei messaggi, rendendoli incomprensibili a chi non sia in possesso di una "chiave" (intesa secondo la definizione crittologica) per interpretarli. Nei sistemi crittografici a due chiavi, detti anche a chiave pubblica o asimmetrici, ogni utente ha una coppia di chiavi: una chiave privata, da non svelare a nessuno, con cui può decodificare i messaggi che gli vengono inviati, e una chiave pubblica, che altri utenti utilizzano per codificare i messaggi da inviargli. Per ogni utente, le due chiavi vengono generate da un apposito algoritmo con la garanzia che la chiave privata sia la sola in grado di poter decodificare correttamente i messaggi codificati con la chiave pubblica associata. Lo scenario in cui un mittente vuole spedire un messaggio ad un destinatario in modalità sicura è il seguente: il mittente utilizza la chiave pubblica del destinatario per la codifica del messaggio da spedire, quindi spedisce il messaggio codificato al destinatario; il destinatario riceve il messaggio codificato e adopera la sua chiave privata per ottenere il messaggio "in chiaro".

Grazie ad un'ulteriore proprietà delle due chiavi, inversa rispetto a quella descritta, un sistema di questo tipo è adatto anche per ottenere dei documenti firmati, infatti: la chiave pubblica di un utente è la sola in grado di poter decodificare correttamente i documenti codificati con la chiave privata di quell'utente. Se un utente vuole creare una firma per un documento, procede nel modo seguente: con l'ausilio di una funzione hash ricava l'impronta digitale del documento, il message digest, un file di dimensione fissa che riassume le informazioni contenute nel documento, dopodiché utilizza la propria chiave privata per codificare quest'impronta digitale: il risultato di questa codifica è la creazione di una firma. La funzione hash, è fatta in modo da rendere minima la probabilità che da testi diversi si possa ottenere il medesimo valore dell'impronta, inoltre è one-way, questo significa che dall'impronta è pressoché impossibile ottenere nuovamente il testo originario. La firma prodotta dipende dall'impronta digitale del documento e quindi dal documento stesso, oltre che dalla chiave privata dell'utente. A questo punto la firma viene allegata al documento.

Chiunque può verificare l'autenticità di un documento: per farlo, decodifica la firma del documento con la chiave pubblica del mittente, ottenendo l'impronta digitale del documento, e poi confronta questa con quella che si ottiene applicando la funzione hash, pubblica, al documento; se le due impronte sono uguali, l'autenticità del documento è garantita.

Schema di firme

Siano D un insieme finito di possibili documenti, F un insieme finito di possibili firme, K un insieme finito di possibili chiavi;
se ∀ k ∈ K ∃ un algoritmo di firma sigk:D→F, ∃ un corrispondente algoritmo di verifica verk:D×F→{vero, falso} tale che ∀ d ∈ D, ∀ f ∈ F : verk(d,f) = { vero se f = sigk(d) ; falso se f ≠ sigk(d) }
allora (D, F, K, sigk, verk) costituisce uno schema di firme.

I due elementi fondamentali di uno schema di firme sono l'algoritmo di firma e l'algoritmo di verifica.
L'algoritmo di firma crea una firma elettronica che dipende dal contenuto del documento a cui deve essere allegata, oltre che dalla chiave dell'utente. Una coppia (documento, firma) rappresenta un documento firmato, ovvero un documento a cui è stata allegata una firma. L'algoritmo di verifica può essere utilizzato da chiunque per stabilire l'autenticità della firma di un documento.

Dato un d ∈ D solo il firmatario deve essere in grado di calcolare f ∈ F tale che verk(d,f) = vero.

Uno schema di firme è detto incondizionatamente sicuro se non esiste un modo per la falsificazione di una firma f ∈ F. Segue che non esistono schemi di firme incondizionatamente sicuri poiché un malintenzionato potrebbe testare tutte le possibili firme y ∈ F di un documento d ∈ D di un utente, usando l'algoritmo pubblico verk fino a quando non trova la giusta firma. Naturalmente questo tipo di attacco alla sicurezza dello schema di firme risulta essere computazionalemente oneroso e praticamente irrealizzabile, anche adottando gli algoritmi più raffinati e i processori più potenti, poiché si fà in modo che la cardinalità dell'insieme di possibili firme sia enormemente elevata.

Differenze tra firma digitale e firma convenzionale

  FIRMA CONVENZIONALE FIRMA DIGITALE
CREAZIONE manuale mediante algoritmo di creazione
APPOSIZIONE sul documento: la firma è parte integrante del documento come allegato: il documento firmato è costituito dalla coppia (documento, firma)
VERIFICA confronto con una firma autenticata: metodo insicuro mediante algoritmo di verifica pubblicamente noto: metodo sicuro
DOCUMENTO COPIA distinguibile indistinguibile
AUTOMAZIONE DI PROCESSI non possibile possibile


Categoria:Crittologia Categoria:sicurezza informatica

See also: Firma digitale, Algoritmo, Byte, Carta, Chiave privata, Chiave pubblica, Crittografia, Crittografia asimmetrica, Crittologia, Hash