L’importanza del “sale” per le password

  

Perché anche le password, come la pasta, senza sale vengono male

Quando si parla di sicurezza delle password, quasi tutti sanno che non vanno mai salvate in chiaro, ma devono essere protette tramite hashing. Tuttavia, c’è un dettaglio fondamentale che troppo spesso viene trascurato o implementato male: il salt.
Questo piccolo ingrediente fa una differenza enorme tra un sistema “accettabile” e uno seriamente vulnerabile.

Vediamo perché il “sale” è così importante, come va gestito correttamente e cosa succede quando non lo si usa.

🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

🔡 Hashing delle password: il punto di partenza

Un hash è il risultato di una funzione crittografica che trasforma un input (la password) in una stringa di lunghezza fissa.
Caratteristiche chiave di un buon algoritmo di hashing:

  • È deterministico: la stessa password produce sempre lo stesso hash
  • È one-way: dall’hash non si può risalire alla password originale
  • Una piccola variazione dell’input produce un hash completamente diverso

Esempio (semplificato):

password123 → ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f

Se però due utenti usano la stessa password, senza salt otterranno lo stesso hash. Ed è qui che iniziano i problemi.


🧂 Cos’è un salt e perché serve davvero

Il salt è una stringa casuale che viene aggiunta alla password prima dell’hashing.

hash = H(password + salt)

Il salt:

  • È diverso per ogni utente
  • Non deve essere segreto
  • Deve essere sufficientemente lungo e casuale

Grazie al salt, due utenti con la stessa password avranno hash completamente diversi.

Senza salt

Utente A: password123 → hash1
Utente B: password123 → hash1

Con salt

Utente A: password123 + X7f$2 → hashA
Utente B: password123 + 9K!pQ → hashB

Stessa password, risultati totalmente diversi.


🏴‍☠️ Casi reali: quando il sale mancava

LinkedIn (2012)

Nel famoso data breach di LinkedIn, oltre 6 milioni di password furono esposte.
Il problema principale? Password hashate con SHA-1 e senza salt.

Risultato:

  • I cracker usarono rainbow table precomputate
  • Le password più comuni vennero recuperate in pochissimo tempo
  • Milioni di account compromessi

RockYou (2009)

Il leak RockYou conteneva password in chiaro, ma è diventato un riferimento proprio perché ha permesso di creare enormi dizionari e tabelle di attacco che oggi sono ancora usate contro hash non salati.

Attacchi moderni

Anche oggi, database con hash senza salt:

  • Permettono attacchi offline rapidissimi
  • Rendono inutili password “decenti” ma comuni
  • Consentono correlazioni tra utenti con la stessa password

🏴‍☠️ Salt e rainbow table: il vero nemico

Le rainbow table sono tabelle precomputate che associano password comuni ai rispettivi hash.

Senza salt:

  • Una sola tabella può essere usata contro milioni di hash
  • L’attacco è velocissimo

Con salt:

  • Servirebbe una rainbow table per ogni salt
  • Computazionalmente impraticabile
  • Di fatto l’attacco perde senso

Questo è uno dei motivi principali per cui un sistema senza salt è considerato insicuro, anche se usa un algoritmo di hashing “forte”.


🧑‍🎓 Come si gestisce correttamente il salt

Una domanda comune è:
“Se il salt è casuale, come faccio a verificare la password?”

La risposta è semplice: il salt viene salvato insieme all’hash.

Registrazione utente

  1. L’utente inserisce la password
  2. Il sistema genera un salt casuale
  3. Calcola l’hash:
    hash = H(password + salt)
  4. Salva nel database:
    • salt
    • hash

Login / verifica credenziali

  1. L’utente inserisce la password
  2. Il sistema recupera il salt associato all’utente
  3. Ricalcola:
    hash_verifica = H(password_inserita + salt)
  4. Confronta hash_verifica con l’hash salvato

Se coincidono, la password è corretta.

👉 Il salt non deve mai cambiare per quell’utente, altrimenti l’hash risultante sarebbe diverso.


♻️ Salt globale vs salt per utente

❌ Salt globale (sconsigliato)

  • Un unico salt uguale per tutti gli utenti
  • Meglio di niente
  • Ma ancora vulnerabile a diversi attacchi

✅ Salt unico per utente (best practice)

  • Ogni password è isolata dalle altre
  • Nessuna correlazione tra hash
  • Massima resistenza ad attacchi offline

ℹ️ Salt ≠ Pepper

Per completezza:

  • Salt: casuale, pubblico, salvato nel DB
  • Pepper: segreto globale, salvato nel codice o in un vault

Il pepper può aggiungere un ulteriore livello di sicurezza, ma non sostituisce mai il salt.


💣 I rischi concreti di non usare il salt

Non usare il salt espone a rischi molto reali:

  • 🔓 Cracking massivo delle password
  • Attacchi offline estremamente veloci
  • 👥 Identificazione di utenti con la stessa password
  • 📉 Compromissione totale in caso di breach
  • 🧠 Sfruttamento immediato di password comuni

In pratica, se un database viene rubato:

  • Senza salt → disastro
  • Con salt → danni limitati e costi di attacco molto più alti

🎯 Conclusione

Il salt è uno di quei dettagli che sembrano piccoli, ma che separano una sicurezza professionale da una amatoriale.
Non è un optional, non è una “feature avanzata”: è una necessità assoluta.

Come per la cucina:

  • Una buona ricetta senza sale è insipida
  • Un sistema di password senza salt è insicuro

E in sicurezza informatica, come in cucina, aggiungere il sale al momento giusto fa tutta la differenza.



Follow me #techelopment

Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment