Impronta di Hash

L’impronta hash è un particolare tipo di impronta informatica (ovvero una sequenza di lettere e cifre che identificano in modo univoco un file o un documento) generata utilizzando la funzione di hash, ovvero un tipo di algoritmo non invertibile. Questo significa che – da un file o da un gruppo di files – sarà possibile generare una ed una sola impronta (univoca) ma da questa stringa non sarà possibile ri-generare l’origine con un procedimento inverso (non invertibile).

Per queste proprietà, l’impronta hash viene utilizzata da molti sistemi software per garantire la sicurezza del dato e per certificare la conformità dei documenti.

 

Cos’è la funzione hash

La funzione hash è un algoritmo informatico. La parola hash in inglese significa sminuzzare e la funzione hash fa proprio questo: i dati vengono “sminuzzati” e trasformati in una stringa con lunghezza predefinita. L’output che la funzione hash restituisce si chiama digest. Ci sono molte funzioni hash, che sono in grado di assicurare diversi livelli di sicurezza e generano digest diversi (ad esempio Adler32, MD5, SHA-1, PANAMA, eccetera). L’impronta hash può essere generata per qualsiasi file informatico costituito da sequenze di bit, pertanto è applicabile a file di Word, Excel, PDF, ma anche a file multimediali come le immagini, i file audio, le pagine web, eccetera.

 

Come generare l’impronta hash

Dati uno o più file, l’impronta hash viene generata applicando una classe speciale di algoritmi (funzione di hash appunto) che permettono di ottenere stringe di lunghezze diverse a seconda del tipo di funzione utilizzata. La sequenza di numeri e lettere viene generata scandendo in sequenza i byte dei file presi in esame ed eseguendo una serie di passaggi, formando delle impronte intermedie legate fra loro, per poi ottenere alla fine l’impronta definitiva.

Esistono numerosi algoritmi di hashing con proprietà e livelli di complessità differenti; tra le applicazioni più comunemente utilizzati vi sono:

MD5 (Message Digest 5)
Output:  stringa di 128bit = 32 caratteri

SHA (Secure Hash Algoritm)
SHA1 – Output: stringa di 160bit = 40 caratteri esadecimali
SHA256 – Output: stringa di 256bit = 64 caratteri esadecimali
SHA512 – Output: stringa di 512bit = 128 caratteri esadecimali
SHA224 – Output: stringa di 224bit = 56 caratteri esadecimali
SHA384 – Output: stringa di 384bit = 96 caratteri esadecimali

Il metodo mediamente più usato è SHA256 che genera un stringa lunga 64 caratteri.

 

A cosa serve l’impronta hash

L’impronta hash viene apposta a garanzia dell’integrità di un file e per certificare la conformità di un documento.

Tramite l’impronta hash un file informatico avrà una ed una sola impronta per tutto il suo contenuto: se viene cambiato anche solo un carattere del contenuto l’impronta hash sarà diversa. L’impronta hash non è invertibile, ovvero da un’impronta hash non è possibile ricavare il file iniziale: nessun algoritmo è infatti in grado di risalire al contenuto originario. Per questo motivo, viene utilizzata per:

  • crittografia: rendere i dati non comprensibili a persone non autorizzate, garantendone la riservatezza e la sicurezza informatica. Ad esempio, per memorizzare password di utenti in un database: molti sistemi archiviano le password dei propri utenti tramite funzione hash;
  • conformità: garantisce che il documento in esame non ha subito modifiche dopo l’archiviazione o la trasmissione; questo perchè ri-eseguendo l’algoritmo di hash su un documento anche di pochissimo alterato, si otterrebbe un message digest completamente diverso, mettendo in evidenza che è stato modificato;
  • firma digitale: viene utilizzata per la firma digitale e la marca temporale. In merito esistono due tipologie di formato: CADES e PADES. Con il CADES viene creata una busta crittografata (ossia un file che ha estensione .p7m) che, oltre ai vari dati, contiene anche l’impronta hash; il software di apertura del file .p7m controlla la corrispondenza tra questa impronta e quella che viene memorizzata nel contenitore, e se le due impronte non coincidono impedisce l’apertura del file stesso. Il formato PADES (PDF Advanced Electronic Signatures) produce invece un file in formato PDF firmato.