Un hash è una stringa di lunghezza fissa (digest) generata da dati di input di qualsiasi dimensione utilizzando una funzione hash. Il processo è unidirezionale: non è possibile decifrare o invertire un hash per ottenere i dati originali. Ecco perché "crittografia hash" è un termine improprio; L'hashing non è crittografia.
Gli algoritmi di hash più diffusi includono:
MD5 (obsoleto per motivi di sicurezza)
SHA-1 (obsoleto)
SHA-256, SHA-512 (parte della famiglia SHA-2)
SHA-3
bcrypt, scrypt, Argon2 (per l'hashing sicuro delle password)
L'hashing ha diversi scopi nell'ambito della sicurezza informatica e dell'integrità dei dati. I motivi principali per utilizzare l'hashing includono:
Integrità dei dati: garantisce che i dati non siano stati alterati (ad esempio, checksum dei file).
Archiviazione delle password: memorizza le password in modo sicuro confrontando gli hash anziché memorizzare le password effettive.
Firme digitali: gli hash vengono firmati anziché documenti di grandi dimensioni.
Efficienza: valori hash piccoli e di dimensioni fisse sono più veloci da confrontare rispetto a grandi blocchi di dati.
Poiché gli hash sono deterministici e veloci, sono ideali per le attività di verifica.
L'utilizzo di una funzione hash implica:
Inserimento di dati (ad esempio, un file, una stringa o una password).
Elaborazione dei dati con un algoritmo di hashing.
Ottenimento di un digest, ovvero una stringa di dimensione fissa che rappresenta in modo univoco l'input.
Per la protezione tramite password:
Combinazione della password con un sale (dati casuali).
Applicazione di una funzione hash sicura (ad esempio, bcrypt o Argon2).
Memorizzazione Hash e salt risultanti in modo sicuro.
Poiché gli hash non possono essere invertiti, si verifica l'input (come una password) eseguendo nuovamente l'hash e confrontando il nuovo hash con quello memorizzato.
L'hash dovrebbe essere utilizzato quando:
È necessario verificare l'integrità dei dati (ad esempio, verificando la presenza di danneggiamenti o manomissioni).
Le password devono essere archiviate in modo sicuro (non crittografate o in chiaro).
Sono coinvolte firme e certificati digitali (l'hashing garantisce l'autenticità del documento).
Dati veloci Il confronto è necessario (ad esempio, nelle tabelle hash o nelle cache).
L'hashing non è adatto quando è necessario recuperare i dati originali in un secondo momento: è a questo che serve la crittografia.