Sale (crittografia)

Da Wikipedia, l'enciclopedia libera.

In crittografia, un sale è una sequenza casuale di bit utilizzata assieme ad una password come input a una funzione unidirezionale, di solito una funzione hash, il cui output è conservato al posto della sola password, e può essere usato per autenticare gli utenti.

Usando dati sale si complicano gli attacchi a dizionario, quella classe di attacchi che sfruttano una precedente cifratura delle voci di un elenco di probabili parole chiave per confrontarle con l'originale: ogni bit di sale utilizzato raddoppia infatti la quantità di memorizzazione e di calcolo necessari all'attacco.

Di solito, il sale viene salvato assieme al numero di iterazioni (key stretching) e all'output della funzione unidirezionale, ma per aumentare la sicurezza è abitudine tenere segreto il valore sale e conservarlo separatamente dal database delle password. Ciò fornisce un vantaggio quando viene rubato il database con le password, ma non il sale. Per scoprire una password da un hash rubato, infatti, un utente malintenzionato non può limitarsi a provare password comuni (ad esempio le parole o i nomi della lingua italiana), ma è costretto a calcolare gli hash di caratteri casuali (almeno per la parte dell'input che si pensa essere il sale), il che è molto più lento.

Il sale è strettamente legato al concetto di nonce, un numero casuale da usare una sola volta in una comunicazione crittografata: ad esempio, i nonce vengono usati nel protocollo HTTP in alcune operazioni di calcolo del digest della password.

Esempio[modifica | modifica sorgente]

Si supponga che la chiave segreta di un utente venga rubata da un database sotto forma di hash, e che sia noto che la password originale fosse una delle 200.000 parole della lingua italiana. Sapendo che il sistema utilizza un valore sale lungo 32 bit, gli hash pre-calcolati dell'attaccante non sono più di alcuna utilità: in questo caso, un utente malintenzionato dovrebbe calcolare l'hash di ogni parola con ognuno dei 2^{32} (4.294.967.296) possibili valori sale, fino a trovare una corrispondenza. Il numero totale di tentativi possibili può essere ottenuto moltiplicando il numero di parole nel dizionario con il numero di valori sale possibili:

{2^{32} \times 200.000 \approx 8,5899 \times 10^{14}}

Per completare un attacco a forza bruta, l'attaccante dovrebbe calcolare circa 800.000 miliardi di hash, invece di soli 200.000. Anche sapendo che la password stessa è semplice, il valore segreto del sale rende molto più difficile individuare la password.

Implementazioni Unix[modifica | modifica sorgente]

Le prime versioni di Unix usavano il file passwd (/etc/passwd) per conservare gli hash delle password salate (password con anteposti due caratteri di sale casuali). Si noti che in queste vecchie versioni di Unix anche il sale era memorizzato in chiaro nel file passwd, insieme con l'hash delle password salate, e che tutti gli utenti del sistema potevano leggerlo: il permesso di lettura era necessario perché alcune applicazioni potessero accedere a nomi utente e altre informazioni. In questo modo, quindi, la sicurezza della password era protetta solo dalle funzioni di hashing impiegate.

Implementazioni nelle applicazioni web[modifica | modifica sorgente]

Molte applicazioni web conservano le password degli utenti sotto forma di hash in un database. Senza alcun valore sale, un attacco di SQL injection a buon fine condurrebbe alla probabile compromissione delle password. Dato che molti utenti riutilizzano le proprie password su siti diversi, il valore sale è una componente essenziale per la sicurezza di una web application.[1]

Note[modifica | modifica sorgente]

  1. ^ (EN) ISC Diary – Hashing Passwords, Dshield.org. URL consultato il 2012-04-27.

Voci correlate[modifica | modifica sorgente]

crittografia Portale Crittografia: accedi alle voci di Wikipedia che trattano di crittografia