2009-12-10 12 views
9

Ok, sto cercando di capire il motivo per usare il sale.Qual è lo scopo del "sale" durante l'hashing?

Quando un utente si registra, creo un sale unico per lui/lei che memorizzo in DB. Poi ho hash e la password con SHA1. E quando lui/lei sta effettuando l'accesso, lo re-hash con sha1($salt.$password).

Ma se qualcuno ha hackerato il mio database può vedere la password hash E il sale.

È più difficile da decifrare rispetto all'asportazione della password senza sale? Non capisco ...

Scusate se sono stupido ...

+0

Basta pensare a questo: poiché ogni utente ha un sale diverso, la combinazione di password di sale + è univoca anche se la password non lo è. – Gumbo

+0

Il sale fa molto meglio il tuo hashish, ecco perché. –

+0

vedere http://stackoverflow.com/search?q=salt – VolkerK

risposta

8

Se non si utilizza un sale poi un attaccante può precompute una password < -> hash database non in linea, anche prima di aver rotto nella vostra server. L'aggiunta di un sale aumenta notevolmente le dimensioni di quel database, rendendo più difficile l'esecuzione di un tale attacco.

Inoltre, una volta individuati, possono indovinare una password comunemente utilizzata, cancellarla e quindi controllare tutte le password nel database per una corrispondenza. Con un sale diverso per ogni utente, possono attaccare solo una password alla volta.

C'è un articolo su Wikipedia su salts in cryptography.

+0

È particolarmente divertente se si sale continuamente e re-hash un numero di volte. Certo, è più lento per l'utente accedere, ma non è fattibile, anche sapendo che il sale deve provare a forzare la password. – StrixVaria

+0

@StrixVaria: in che modo la nuova concatenazione di sale e reinghing potrebbe essere diversa dalla semplice concatenazione del sale più volte? Non penso che questo ti possa dare ulteriore sicurezza. –

+0

Solo a causa del tempo extra necessario per ogni "ipotesi" nel tentativo di forza bruta. Se hai hash x volte, occorrono x volte più tempo per ipotesi. Quando x diventa grande, diminuisce il numero di tentativi che possono essere tentati. – StrixVaria

1

Un'altra intenzione dietro l'uso di un sale è assicurarsi che due utenti con la stessa password non finiscano per avere lo stesso hash nella tabella degli utenti (assumendo che il loro sale non sia lo stesso). Tuttavia, la combinazione di una password salt e di una password può portare alla stessa "stringa" o hash alla fine e l'hash sarà esattamente lo stesso, quindi assicurati di usare una combinazione di sale e password in cui due combinazioni diverse non portare allo stesso hash.

1

Se un utente malintenzionato crea un giant table of hash values for plaintext passwords, l'uso di un sale gli impedisce di utilizzare la stessa tabella per violare più di una password. L'utente malintenzionato dovrebbe generare una tabella separata per ogni sale. Nota che per farlo funzionare in modo efficace, il tuo sale dovrebbe essere piuttosto lungo. In caso contrario, la tabella precomputa dell'aggressore probabilmente contiene l'hash salt + password.