Internet è una rete e, come tale, canale di scambio di dati. Occorre, dunque, la garanzia che i dati in transito mantengano la loro integrità laddove, con questo termine, si intende l’impossibilità di alterarli.
Da sola, l’integrità non è sufficiente a sancire la sicurezza del dato. Sono due concetti separati tra loro, cosa questa che approfondiremo più avanti.
L’integrità è garantita dall’hash, tecnica mediante la quale un input composto da un numero variabile di caratteri viene convertito in una stringa di lunghezza fissa chiamata checksum (o impronta).
Quantum Key Distribution: cos’è e perché è utile a rendere inattaccabili i sistemi di cifratura
Indice degli argomenti
L’hashing è sufficiente?
L’hashing non si applica soltanto alle password e non è esclusivamente elemento fondante della blockchain, il funzionamento è in sé tanto semplice quanto efficace. Una volta ottenuto un hash partendo da un qualsiasi tipo di input, laddove il file venisse modificato lungo il tragitto tra una risorsa online e lo strumento mediante il quale una persona lo ha prelevato, l’hash sarebbe completamente differente.
Questo, però, sancisce solo che i dati non sono stati alterati, concetto che non può essere confuso con la sicurezza, ai cui fini l’hash in sé non è sufficiente. Se prelevassimo dal web un file contenente un malware, il suo hash sarebbe identico tanto all’origine quanto alla destinazione. L’hashing ha un ruolo fondamentale ma non è garanzia di sicurezza, non sostituisce i sistemi di difesa tradizionali e non deve indurre ad abbassare la guardia.
Gli algoritmi di hashing
Sono diversi e, se ci muoviamo, a titolo di esempio, nel mondo delle password e della cyber sicurezza in genere, i dati possono essere archiviati usando diverse tecniche, tra le quali:
- MD5: algoritmo che codifica una stringa in un’impronta digitale a 128 bit. È uno degli algoritmi di longevi e utilizzati.
- CRC52: CRC è acronimo di Cyclic Redundancy Check ed è una tecnica usata per trovare errori o modifiche nei dati. Viene di norma usato nei file compressi e, più in generale, per controllare l’integrità di file.
- RipeMD: è l’algoritmo di hashing utilizzato nello standard Bitcoin e, da qui, adottato anche da altre criptovalute.
- BCrypt: funzione hash progettata per essere lenta, con l’obiettivo di rendere più costoso in termini di tempo ogni tentativo di cracking delle password e di conseguenza scoraggiare gli hacker.
- Tiger: funziona con piattaforme a 64 bit, è disponibile nelle configurazioni a 128 e 160 bit.
- SHA-2: funzione hash crittografica sviluppata dalla National Security Agency (NSA) si erige sull’algoritmo SHA-1. Entrambi usano configurazioni a 224, 256, 384 o 512 bit.
Il concetto di bit ritorna preponderante. Vale dunque la pena approfondirlo usando, come esempio, una configurazione a 128 bit. Per esteso, una dimensione del blocco a 128 bit vuole dire che i dati sono divisi in matrici quattro per quattro, ognuna di 16 byte, fermo restando che un byte contiene otto bit. 16 byte moltiplicati per 8 bit restituiscono un totale di 128 bit in ogni blocco.
A prescindere dalla configurazione, la dimensione dei dati sottoposti ad hashing non cambia. A 128 bit di dati in chiaro corrispondono 128 bit di dati crittografati.
Gestione delle password: cosa sono gli hash e a cosa servono
L’algoritmo più sicuro
Le comunità che affrontano l’argomento non trovano un accordo. Le criptovalute optano per RipeMD, MD5 si è guadagnato un’audience nel corso degli anni e resta ancora molto diffuso, il National Institute of Standards and Technology (Nist) è incline a promuovere SHA-2.
È più probabile che non si possa definire un algoritmo migliore dell’altro senza partire dall’obiettivo ultimo dell’hashing. Esiste anche SHA-3, rilasciato nel 2015 (e quindi prossimo a compiere 10 anni di età) e che non ha ottenuto un grande riscontro.
Esempi di hashing
Le funzioni e le tecniche di hashing sono diverse, un esempio risulta quindi opportuno per meglio spiegarne il funzionamento.
Utilizzando la funzione SHA-2 a 244 bit e convertendo la frase “La mela fa bene alla salute” si ottiene il codice 390edf1c961e20cdffeff4726e0eb572e2cec0c1e0c959c81a3353a8.
Non c’è alcuna correlazione evidente che permetta di risalire alla frase che ha generato tale codice, tant’è che se ne usassimo molto simile alla precedente, per esempio “La pera fa bene alla salute”, pure cambiando poche lettere e mantenendo lo stesso numero di lettere, si ottiene un hash completamente differente, 14f59a26f86da4ec82b2da0a98f4da660039dcad188bd7b26623633a.
Se prendiamo in esame una frase più lunga, per esempio “La sede del parlamento europeo è a Strasburgo”, otterremmo sempre un hash di 56 caratteri, in questo caso: fa48484dd8fac11c9a04f8498893f02dde2627dd49a5ede78556c614.
La stringa restituita dalla funzione SHA-2 a 244 bit è di 56 caratteri esadecimali poiché ogni carattere rappresenta 4 bit (56*4=224). Se fosse stata scelta la configurazione a 256 bit la lunghezza della stringa sarebbe stata di 64 caratteri esadecimali (64*4).
Ognuno può provare da sé, digitando il testo desiderato nel campo a inizio pagina osservando gli hash restituiti.
Per essere certi che il checksum di un file alla sua origine sia identico a quello del file dopo essere stato prelevato, ci sono diverse soluzioni. Sourceforge ne mette a disposizione una gratuita che può essere usata in qualsiasi ambito, anche relativo allo scambio di un file sulla medesima rete LAN.