Hashing: Che Cazzo È ’sto Hashing?
Se hai mai sentito parlare di password, sicurezza informatica o anche solo di blockchain (di cui abbiamo parlato la settimana scorsa, se te lo sei perso sei un pirla), probabilmente ti sei imbattuto in questa parola: hashing. Ma che cavolo è sta roba? Sembra il nome di una nuova droga sintetica o di un ballo di gruppo degli anni ’80. In realtà, è una figata (nel senso buono, non come quando ti dicono “che figata le tue Crocs 😐”). In questo articolo voglio spiegare (spero) in parole semplici cosa è l’hashing, perché è importante e perché conviene smettere di usare password di merda come “password123”.
Che Cos’è, in Parole Povere, l’Hashing?
Partiamo dalle basi, come quando a scuola di cucina ti spiegano come si le uova fritte (eppure, ahimé, anche riesce a fare un disastro…).
Immagina di avere una di quelle macchinette per fare la carne trita, hai presente? Ci metti dentro un pezzo di carne, giri la manovella e dall’altra parte esce carne trita. Ecco, l’hashing è un po’ come quella macchinetta, ma per i dati.
Ah, figo, quindi se ci metto dentro un PDF esce… un PDF tritato?
Minchia, sei simpatico, ti ucciderò per ultimo. No, non proprio. Non trita i dati nel senso che li spezzetta. Ma in un certo senso li trasforma. La macchinetta dell’hashing prende qualsiasi tipo di dato (un testo, un’immagine, un video, un file intero, la tua lista di maleducate) e lo trasforma in una stringa (una sequnza, ma in gergo si chiama stringa) di caratteri di lunghezza fissa, che all’apparenza è completamente casuale. Questa stringa (sequenza) di caratteri è chiamata hash (o “valore hash”, o “digest”, insomma, chiamala come cazzo ti pare, basta che ci capiamo).
Ok, ok, ci sono quasi. Ma perché dovrebbe servirmi trasformare i miei dati in una stringa di caratteri a caso? Che me ne faccio? Ci tappezzo il cesso?
Calma, non fare il fenomeno, che cazzo hai mangiato a colazione?! L’hash ha delle proprietà molto particolari che lo rendono decisamente utile. In ordine (o no?):
È Deterministico: Se prendi lo stesso dato e lo passi alla stessa “macchinetta” (funzione di hash), otterrai sempre lo stesso identico hash. Sempre. Non importa quante volte lo fai, il risultato sarà sempre lo stesso. È come se la macchinetta avesse una memoria di ferro.
Quindi se faccio l’hash della parola “ciao” ottengo sempre lo stesso hash?
Esatto. Prova. Ci sono un sacco di siti online che fanno hash. Cerca “online hash calculator”, mettici “ciao” e usa l’algoritmo SHA-256 (uno dei più comuni). Vedrai che ti uscirà sempre la stessa stringa di caratteri (tipo
b133a0c0e9bee3be20163d2ad31d6248db292aa6dcb1ee087a2aa50e0fc75ae2
, ma non ti fissare con questa stringa, è solo un esempio).È One-Way (A Senso Unico): Questa è la parte veramente interessante e importante. È praticamente impossibile (e dico praticamente perché nella vita nulla è impossibile al 100%, tranne forse te che te ne stai a casa il sabato sera invece di andare a far baldoria con Salvini) tornare indietro dall’hash al dato originale. Cioè, se hai l’hash, non puoi in alcun modo (se non per forza bruta) ricostruire il dato di partenza. È come la macchinetta della carne trita: puoi fare la carne trita dalla carne, ma non puoi rifare il pezzo di carne dalla carne trita. Chiaro no?
Sì, sì, ho capito. Quindi se io faccio l’hash della mia password “password123”, anche se qualcuno ruba l’hash, non può risalire alla mia password?
YES! Finalmente hai detto una roba giusta, porca troia. Ed è proprio per questo che l’hashing è fondamentale per la sicurezza delle password. Quando ti registri su un sito web e scegli una password, il sito non salva la tua password originale (sarebbe da cretini, se lo fanno prendi un martello). Bensì, salva solo l’hash della tua password. Quando poi fai il login e inserisci la tua password, il sito calcola l’hash della password che hai inserito e lo confronta con l’hash che ha salvato. Se i due hash coincidono, significa che hai inserito la password giusta, senza che il sito abbia mai dovuto conoscere la tua password in chiaro. Così l’unico che in teoria sa la tua password sei tu (e la tua morosa…).
È Resistente alle Collisioni (Idealmente, come sempre): Questa è un po’ più complicata, ma cercherò di semplificare al massimo. Idealmente (ovvero nei mondi con le fate, le lucine eccetera), è estremamente improbabile che due dati diversi producano lo stesso hash. Si chiama “collisione” quando due dati diversi producono lo stesso hash. Una buona funzione di hash è progettata per rendere le collisioni praticamente impossibili (di nuovo, praticamente). È come dire che è quasi impossibile che due pezzi di carne diversi, messi nella stessa macchinetta, producano esattamente la stessa carne trita. Capito no? Più o meno dai…
Più o meno… Ma quindi le collisioni possono succedere?
Sì, in teoria (e badate, che le cose che possono succedere in teoria anche con probabilità infime sono tante. Tipo che morite in un incidente d’auto, così, per dire.) possono succedere, ma con le funzioni di hash moderne e robuste, la probabilità è talmente bassa che è come vincere la lotteria 10 volte di fila mentre ti cade un meteorite in testa e Salvini dice una roba sensata. Insomma, per scopi pratici, possiamo dire che le collisioni sono trascurabili. Esistono però funzioni di hash più vecchie e meno sicure che sono più vulnerabili alle collisioni, ma c’è già troppa carne al fuoco (pun intended).
Ricapitolandolo:
Quindi, ricapitolando, l’hashing è:
- Una macchinetta per i dati: Prende qualsiasi dato e lo trasforma in una stringa di caratteri di lunghezza fissa (hash).
- Deterministico: Stesso dato, stesso hash, sempre.
- One-Way: Impossibile (praticamente) tornare indietro dall’hash al dato originale.
- Resistente alle Collisioni: Improbabile (molto improbabile) che due dati diversi producano lo stesso hash.
Ma a Che Cazzo Serve Veramente l’Hashing?
Ok, abbiamo capito che cos’è l’hashing e le sue proprietà magiche. Ma in pratica, a cosa serve? Oltre a proteggere le password (che è già una figata non da poco), l’hashing ha un sacco di altre applicazioni. Eccone alcune:
Verifica dell’Integrità dei Dati: Immagina di scaricare un file enorme da internet, tipo un film in HD o un videogioco. Come fai a essere sicuro che il file che hai scaricato sia integro e non sia stato corrotto durante il download? Semplice: il sito web da cui hai scaricato il file di solito fornisce anche l’hash del file. Tu, dopo aver scaricato il file, puoi calcolare l’hash del file scaricato e confrontarlo con l’hash fornito dal sito. Se i due hash coincidono, significa che il file è integro al 100%. Se non coincidono, significa che c’è stato un problema durante il download e il file è corrotto (o peggio, potrebbe essere stato manomesso da qualcuno). È come avere un sigillo di garanzia digitale sul file. Figata, no?
Blockchain e Criptovalute: Se hai letto l’articolo sulla blockchain (e se non l’hai fatto, vergognati, tanto.), sai che l’hashing è un ingrediente fondamentale della blockchain. Viene usato per creare l’“impronta digitale” di ogni blocco e per collegare i blocchi in una catena immutabile. Senza l’hashing, la blockchain non esisterebbe. Quindi, se ti piacciono le criptovalute (o se le odi, non importa), sappi che devi ringraziare (o maledire) l’hashing.
Firme Digitali: L’hashing è anche usato nelle firme digitali per garantire l’autenticità e l’integrità dei documenti digitali. Quando firmi digitalmente un documento, in realtà stai firmando l’hash del documento, non il documento intero. Questo rende la firma molto più efficiente e sicura.
Ricerca Efficiente di Dati: L’hashing può essere usato per creare delle “tabelle hash” (o “hash map”), che sono delle strutture dati che permettono di cercare dati in modo molto veloce. È un po’ come avere un indice di un libro: invece di dover sfogliare tutto il libro per trovare un’informazione, puoi consultare l’indice e trovarla subito.
Non è Tutto Rose e Fiori (o Hash e Fiori, in Questo Caso)
Anche l’hashing, come tutte le cose belle della vita, tipo me, ha i suoi limiti:
Collisioni (anche se improbabili): Abbiamo detto che le collisioni sono molto improbabili, ma non impossibili. In teoria, un attaccante potrebbe cercare di trovare due dati diversi che producono lo stesso hash (un “attacco di collisione”). Se ci riuscisse, potrebbe usare questa collisione per scopi malevoli, tipo sostituire un file legittimo con uno fasullo che ha lo stesso hash. Per fortuna, trovare collisioni per le funzioni di hash moderne e robuste è estremamente difficile e costoso, ma è un rischio teorico da tenere presente.
Attacchi di “Rainbow Table” e “Brute Force” alle Password: Anche se l’hashing rende difficile risalire alla password originale dall’hash, non è una protezione infallibile al 100%. Esistono tecniche come gli attacchi di “rainbow table” e “brute force” che possono essere usate per cercare di “indovinare” le password a partire dagli hash. Le “rainbow table” sono delle tabelle precalcolate che contengono gli hash di milioni di password comuni. Gli attacchi “brute force” invece consistono nel provare a calcolare l’hash di tutte le possibili password finché non si trova una corrispondenza con l’hash rubato. Per difendersi da questi attacchi, è fondamentale usare password lunghe, complesse e diverse per ogni sito. E smettetela di usare “password123”, che cazzo!
Non è Crittografia: È importante capire che l’hashing non è crittografia. La crittografia serve per nascondere i dati, rendendoli illeggibili a chi non ha la chiave giusta. L’hashing serve per creare un’impronta digitale dei dati, per verificarne l’integrità e l’autenticità. E’ importante non confondere le due cose. È come confondere un lucchetto (crittografia) con un sigillo di ceralacca (hashing). Entrambi servono per la sicurezza, ma in modi diversi.
Quindi
L’hashing è una tecnologia che sta alla base nel mondo digitale di oggi e di un sacco di cose che usiamo tutti i giorni, dalle password alla blockchain, dalla verifica dell’integrità dei file alle firme digitali. È una tecnologia potente e versatile, ma è importante conoscerne anche i limiti e le potenziali vulnerabilità.
La prossima volta che sentirai parlare di hashing pensa alla macchinetta per la carne trita dei dati, alla one-way, e alla sicurezza che può garantire. E soprattutto, smettila di usare password di merda! Grazie per l’attenzione e alla prossima settimana con un altro argomento nerd e (spero) interessante.
Post Scriptum: Hash di ’Sto Articolo
Giusto per fare i fighi e per farti capire ancora meglio la potenza dell’hashing, ho calcolato l’hash SHA-256 di questo articolo (in formato testo semplice, senza HTML o altre formattazioni). Ecco l’hash:
31e452bbf5134ac1d0d0a3a5897359b83eaccf6a46aed7d4323ddb51ec2d76f0
Ora, se io modificassi anche solo una virgola di questo articolo, anche solo uno spazio bianco, anche solo una lettera, l’hash cambierebbe completamente. Questo dimostra quanto anche una piccola modifica al dato originale cambi radicalmente l’hash. È proprio questa proprietà che rende l’hashing così utile per la verifica dell’integrità dei dati. E anche per farmi sentire un grande (imbecille) a scrivere un post scriptum del genere. Ciao stelline!