Firme Digitali
Una firma digitale è una identificazione elettronica di una persona o di un' entità creata usando un algoritmo a chiave pubblica e destinata a permettere al destinatario di verificare l'integrità dei dati e l'identità del mittente. Per verificare l'integrità dei dati di un documento in forma elettronica o di un messaggio nella sua interezza (verificare cioè che non sia stato alterato), viene applicato un algoritmo di hash che genera un breve messaggio di lunghezza fissa, generalmente di 128 byte. Questo processo, generalmente indicato come algoritmo di firma digitale, crea un “sunto” (Digest) del messaggio originale, cioè una “versione” ridotta dello stesso.
Algoritmi normalmente utilizzati per questa funzione sono: SHA1, MD2, MD4 e MD5. Questi algoritmi sono funzioni “a senso unico” un po' come gli algoritmi di cifratura con chiave pubblica e privata. Il processo di creazione del sunto o “hash” del messaggio non è cioè reversibile. Questi algoritmi sono destinati alle applicazioni di firme digitali dove un grande documento elettronico o una stringa di caratteri (come potrebbe essere un testo Word), un foglio elettronico, un record di un database, il contenuto intero di un hard disk o una immagine JPG, deve essere compresso in maniera sicura prima di essere firmato con la chiave privata.
Tutti gli algoritmi per i digest citati producono, da un messaggio di lunghezza arbitraria (quindi al limite anche l'intera immagine di un hard disk), un condensato di 128 bit.
Anche se la struttura di questi algoritmi è in qualche maniera simile, il disegno di MD2 è piuttosto diverso da quello di MD4 e MD5. MD2 è stato utilizzato per sistemi di elaborazione a 8 bit mentre gli altri sono stati creati per sistemi a 32 bit. La descrizione ed il codice sorgente per i tre algoritmi citati può essere trovata con il titolo RFC 1319 – 1321.
Dopo aver prodotto lo hash del messaggio originale, il passo successivo, il cui scopo è quello di verificare l'identità del mittente, consiste nel cifrare lo hash stesso usando la chiave privata del mittente permettendo così di collegare la sua firma al messaggio stesso (garanzia quindi di autenticità della provenienza del messaggio).
Per decifrare, il destinatario userà la chiave pubblica del mittente, ottenendo così la prova che quello specifico messaggio poteva provenire solo dal mittente medesimo. Questo processo di autenticazione del mittente è conosciuto con il nome di “non ripudio” visto che il mittente non può, successivamente, dichiarare di non aver generato il messaggio.
Una volta decifrato, il destinatario calcolerà nuovamente lo hash usando sul documento elettronico lo stesso algoritmo scelto dal mittente (quindi MD2, MD4 o MD5) e confronterà quindi i risultati. In questo modo potrà essere verificata l'integrità del messaggio (garanzia quindi che il messaggio originale non sia stato modificato). Si può quindi dire che la firma digitale è un metodo crittografico che garantisce:
Integrità dei dati – In quanto ogni modifica al testo renderà impossibile calcolare il medesimo hash inserito dal mittente.
Autenticazione – Il destinatario può essere sicuro che il messaggio è stato inviato dal mittente in quanto unico proprietario di quella specifica chiave segreta.
Non ripudio – Il mittente non può, in un momento successivo, dichiarare di non aver inviato il messaggio.
Non viene invece garantita la riservatezza, in quanto il messaggio, passando in chiaro, potrebbe essere visionato da qualcuno presente lungo il percorso di rete che ne intercetti il contenuto.
Per ovviare a questo problema si introduce il concetto di Busta Digitale.
La Busta digitale
Una busta digitale si utilizza per spedire le informazioni crittografate (quindi in modalità “riservata”, cioè nessuno le può vedere al di fuori dei due interessati) insieme alla relativa chiave. E' un metodo sicuro per inoltrare i documenti elettronici senza gli svantaggi derivanti dall'utilizzo dei sistemi di crittografia asimmetrica su grosse moli di informazioni e per garantire l'integrità dei dati, l'autenticazione ed il non ripudio.
Il messaggio da spedire può essere crittografato con una chiave asimmetrica o simmetrica. Lo svantaggio di utilizzare una chiave asimmetrica è che la cifratura/decifrazione richiedono molto più tempo che non una chiave simmetrica. Se il messaggio è corto il tempo non è più un problema. Quando si usa una chiave asimmetrica ed il messaggio è più lungo, la memoria necessaria aumenta molto e quindi il messaggio richiede più tempo per essere ricevuto e questo è uno dei motivi del suo uso limitato.
Il meccanismo della “Busta Digitale” funziona in questo modo:
la chiave simmetrica utilizzata per crittografare il messaggio (e renderlo quindi “riservato”) può essere chiamata “chiave di sessione”. Se una chiave di sessione è spedita al destinatario in chiaro, tutti potrebbero accedere alla stessa mentre transita e sarebbe quindi facile perdere la riservatezza. Quindi è vitale che la chiave di sessione sia crittografata prima di inviarla al destinatario. La chiave di sessione viene crittografata con la chiave privata del mittente e poi di nuovo crittografata con la chiave pubblica del destinatario.
Il messaggio cifrato e la chiave di sessione crittografata sono inviati al destinatario, che a sua volta “apre” la chiave di sessione con la chiave privata del destinatario (per accertare così l'autenticazione del mittente e l'integrità della chiave di sessione) e poi con la chiave pubblica del mittente (per accertare la riservatezza della chiave di sessione). La chiave di sessione viene quindi applicata al messaggio encryptato per ottenere il messaggio in chiaro.
Il processo di crittografare i dati da spedire con la chiave simmetrica e crittografare la chiave simmetrica con l'algoritmo della chiave pubblica è detto “Busta Digitale”.