Come funziona la Firma Digitale: Crittografia Asimmetrica

Luca Cicchinelli/ febbraio 23, 2017/ Security/ 0 comments

In Italia, una firma digitale ha lo stesso valore giuridico di una normale firma.
Analizzeremo in che modo si possa garantire l’autenticità e la provenienza di un messaggio firmato.

L’utilizzo di una firma digitale rende possibile l’identificazione del mittente di un messaggio grazie, soprattutto, alla crittografia asimmetrica.

La crittografia asimmetrica utilizza due chiavi, una per cifrare e una per decifrare, a differenza della crittografia simmetrica che ne utilizza una soltanto.

Crittografia asimmetrica

Questo tipo di crittografia è basata sull’utilizzo di una chiave privata e di una chiave pubblica per ogni utente.

Firma digitale: Coppia di chiavi

Coppia di chiavi

La chiave pubblica dovrà essere accessibile a chiunque, mentre quella privata dovrà rimanere segreta.

Le due chiavi vengono generate attraverso un procedimento matematico basato sulla moltiplicazione di due numeri primi.
Non approfondiremo la parte matematica, nel caso in cui fossi interessato ai meccanismi che permettono la generazione delle chiavi, di cifrare e decifrare un messaggio puoi cliccare qui.

La sicurezza della crittografia asimmetrica è racchiusa nell’enorme complessità computazionale che necessiterebbe risalire ad una chiave privata, partendo dalla rispettiva chiave pubblica.
Per esempio un attacco di tipo bruteforce ad una chiave di 1024 bit potrebbe impiegare anche 5,95 x 10211 anni. L’universo esiste da circa 13,75 x 109 anni.

Quel che viene cifrato attraverso l’utilizzo di una chiave pubblica può essere decifrato solo dalla rispettiva chiave privata, e viceversa.
Ogni utente deve essere a conoscenza delle chiavi pubbliche altrui e deve, a sua volta, comunicare la propria chiave pubblica agli altri.

Firma digitale: Scambio di chiavi

Scambio di chiavi

Supponiamo che Bu1tre voglia inviarmi un messaggio cifrato, con la certezza che io sia l’unico in grado di decifrarlo.
Dopo essere venuto a conoscenza della mia chiave pubblica, cifrerà con essa il messaggio che vuole inviare.
Quando riceverò il messaggio cifrato, potrò decifrarlo utilizzando la mia chiave privata, di cui sono l’unico possessore.

Funzione di hash

Per garantire la provenienza di un messaggio la firma digitale utilizza, insieme alla crittografia asimmetrica, una funzione di hash.

Una funzione di hash è un algoritmo che avendo in input una stringa di una lunghezza qualsiasi, restituisce una stringa avente sempre la stessa lunghezza.
Esistono innumerevoli funzioni di hash, le più utilizzate sono lo SHA e l’MD5.

L’hash di una determinata stringa sarà sempre lo stesso, ma soprattutto non ci saranno mai due stringhe diverse che restituiranno lo stesso hash.
Se per esempio cifrassimo badpr0g in MD5 otterremo sempre questo hash di 32 caratteri esadecimali: 907f40029428f5f3e2d0b7a79b04f83d

Firma digitale: Funzione di hash

Funzione di hash

Una caratteristica fondamentale delle funzioni di hash è l’irreversibilità. Da un determinato hash non è possibile risalire matematicamente alla stringa di origine.

Firma digitale

Abbiamo finalmente le basi per comprendere i meccanismi che permettono alla firma digitale di svolgere le sue funzioni.

Innanzitutto, dobbiamo comprendere che la firma digitale NON utilizza la cifratura asimmetrica per garantire la segretezza del messaggio, bensì per garantire l’identità del mittente.
Il suo scopo è semplicemente quello di attestare che un determinato messaggio sia stato inviato veramente da una determinata persona e che non sia stato modificato da terzi.

Supponiamo che Bu1tre voglia inviarmi un messaggio e voglia che io sia sicuro che il mittente sia davvero lui.

Bu1tre applicherà al suo messaggio una funzione di hash, attualmente per la firma digitale si utilizza lo SHA-256.
L’hash ottenuto sarà quel che viene chiamato digest.

Firma digitale: Creazione digest

Creazione digest

Adesso Bu1tre dovrà cifrare il digest ottenuto dal messaggio con la sua chiave privata.
Quel che ha ottenuto è la sua firma digitale relativa al messaggio da inviare.

Per potermi accertare dell’identità di Bu1tre avrò bisogno di:

  • Messaggio in chiaro
  • Firma digitale
  • Certificato digitale
Firma digitale: Invio del messaggio firmato

Invio del messaggio firmato

Nel certificato digitale, vedremo tra poco cos’è, troverò la chiave pubblica di Bu1tre. Attraverso di essa potrò decifrare la firma digitale ottenendo così il digest del messaggio.
Cifrando il messaggio in chiaro, utilizzando la stessa funzione di hash utilizzata da Bu1tre, otterrò lo stesso digest che mi è stato inviato.

Per garantire che una determinata chiave pubblica appartenga ad una determinata persona si utilizzano i certificati digitali.
Questi certificati digitali sono rilascianti da degli enti certificatori che attestano la proprietà delle chiavi.

Il certificato digitale che contiene la chiave pubblica di Bu1tre è cifrato con la chiave privata dell’ente certificatore.
Quando riceverò il certificato, lo decifrerò utilizzando la chiave pubblica dell’ente certificatore.

Questo meccanismo rende affidabile l’identità del mittente. Poiché seppure un malintenzionato decifrasse un documento firmato e lo firmasse nuovamente, utilizzando una chiave pubblica differente, non potrebbe ricreare il certificato senza essere in possesso della chiave privata dell’ente.

Firma digitale: Ricezione del messaggio firmato

Ricezione del messaggio firmato

Se il messaggio in chiaro a cui io stesso ho applicato la funzione di hash e il digest che ho ricevuto non sono identici: la firma non sarà ritenuta valida.

Conclusione

Per qualsiasi dubbio potete contattarci utilizzando i commenti o le nostre pagine social.

Facci sapere cosa ne pensi con un commento!