L’hashing è un processo informatico unidirezionale che prende un qualsiasi input (un testo, un file o una password) e lo trasforma in una stringa di caratteri di lunghezza fissa, chiamata hash o digest. A differenza della crittografia, l'hashing non è progettato per essere "decifrato": una volta ottenuto l'hash, è matematicamente impossibile risalire al dato originale.

Caratteristiche Fondamentali

Un buon algoritmo di hashing deve rispettare tre proprietà fondamentali per essere considerato sicuro:

  1. Determinismo: Lo stesso identico input produrrà sempre lo stesso identico hash.
  2. Effetto Valanga: Anche la minima modifica nell'input (come cambiare una virgola o un singolo bit) produce un hash completamente diverso e irriconoscibile rispetto al precedente.
  3. Resistenza alle collisioni: Deve essere estremamente difficile che due input diversi producano lo stesso hash. Se ciò accade, si verifica una "collisione", che rende l'algoritmo vulnerabile.

Ambiti di Applicazione

L'hashing viene utilizzato principalmente per due scopi critici nella gestione delle reti e della sicurezza:

Verifica dell'Integrità: Quando scarichiamo un file o inviamo un messaggio, possiamo allegare il suo hash. Il destinatario ricalcola l'hash del file ricevuto e lo confronta con quello originale: se i due codici corrispondono, abbiamo la certezza che il file non è stato danneggiato o alterato da malintenzionati durante il transito.

Gestione delle Password: Per motivi di sicurezza, i server moderni non salvano mai la password reale di un utente nei propri database. Viene invece salvato solo l'hash della password. Quando l'utente effettua il login, il sistema calcola l'hash della password inserita e lo confronta con quello memorizzato. In questo modo, anche se un hacker dovesse violare il database, otterrebbe solo una lista di hash inutilizzabili invece delle password in chiaro.

Algoritmi Comuni

Nel tempo sono stati sviluppati diversi algoritmi, alcuni dei quali oggi sono considerati obsoleti:

Differenza tra Crittografia e Hashing

È importante non confondere i due concetti. La Crittografia è un processo bidirezionale (Cifratura $\leftrightarrow$ Decifratura) pensato per mantenere la riservatezza. L'Hashing è un processo unidirezionale pensato per garantire che i dati siano autentici e non siano stati manomessi.