Firme digitali
Le firme digitali possono essere usate per distribuire un messaggio in formato testo non crittografato quando i destinatari devono identificare e verificare il mittente del messaggio. La firma di un messaggio non modifica il messaggio; genera semplicemente una stringa di firma digitale che è possibile aggregare con il messaggio o trasmettere separatamente. Una firma digitale è una breve parte di dati crittografata con la chiave privata del mittente. La decrittografia dei dati della firma tramite la chiave pubblica del mittente dimostra che i dati sono stati crittografati dal mittente o da un utente che ha accesso alla chiave privata del mittente.
Le firme digitali vengono generate usando algoritmi di firma a chiave pubblica . Una chiave privata genera la firma e la chiave pubblica corrispondente deve essere usata per convalidare la firma. Questo processo è illustrato nella figura seguente.
Per la creazione di una firma digitale da un messaggio sono necessari due passaggi. Il primo passaggio prevede la creazione di un valore hash (noto anche come digest del messaggio) dal messaggio. Questo valore hash viene quindi firmato, usando la chiave privata del firmatario. Di seguito è riportata una illustrazione dei passaggi necessari per la creazione di una firma digitale.
Per verificare una firma, sono necessari sia il messaggio che la firma. Prima di tutto, è necessario creare un valore hash dal messaggio nello stesso modo in cui è stata creata la firma. Questo valore hash viene quindi verificato rispetto alla firma usando la chiave pubblica del firmatario. Se il valore hash e la firma corrispondono, è possibile assicurarsi che il messaggio sia effettivamente quello firmato originariamente e che non sia stato manomesso. Il diagramma seguente illustra il processo coinvolto nella verifica di una firma digitale.
Un valore hash è costituito da una piccola quantità di dati binari, in genere circa 160 bit. Viene generato usando un algoritmo hash. Alcuni di questi algoritmi sono elencati più avanti in questa sezione.
Tutti i valori hash condividono le proprietà seguenti, indipendentemente dall'algoritmo usato:
- La lunghezza del valore hash è determinata dal tipo di algoritmo usato e la relativa lunghezza non varia con le dimensioni del messaggio. Le lunghezze dei valori hash più comuni sono 128 o 160 bit.
- Ogni coppia di messaggi non identici si traduce in un valore hash completamente diverso, anche se i due messaggi differiscono solo per un singolo bit. Usando la tecnologia odierna, non è possibile individuare una coppia di messaggi che si traducono nello stesso valore hash senza interrompere l'algoritmo hash.
- Ogni volta che viene eseguito l'hashing di un determinato messaggio usando lo stesso algoritmo, viene generato lo stesso valore hash.
- Tutti gli algoritmi di hash sono unidirezionale. Dato un valore hash, non è possibile recuperare il messaggio originale. Infatti, nessuna delle proprietà del messaggio originale può essere determinata in base al solo valore hash.