I sali non aiutano a impedire a qualcuno di violare una password particolare. Aiutano a impedire a qualcuno di violare molte password contemporaneamente usando una tabella arcobaleno.
Supponiamo che tu abbia i seguenti utenti sul tuo sito (la password non verrebbe effettivamente archiviata nel database, solo la versione con hash).
USER PASSWORD HASHED PASSWORD
========================================
hamfist god de898928393a893
bttltoad god de898928393a893
woob god de898928393a893
marco-fiset mypass1 1238ffff2342399
dean password2 a44ca77446ff449
Se qualcuno dovesse precalcolare in anticipo gli hash per un sacco di password e archiviarle in memoria (una tabella arcobaleno), sarebbe banale per loro verificare se de898928393a893
esistesse nell'elenco delle password. Saprebbero quindi che è possibile accedere a tutti questi account utenti con la password, god
. In brevissimo tempo, avrebbero accesso agli account di tutti con una semplice password che esiste nella loro tabella arcobaleno (e in qualsiasi altra parte del web quella persona usa la stessa combinazione di email / password).
Ora se aggiungi un salt casuale, tutti con la stessa password finiranno con diversi hash:
USER PASSWORD SALT HASHED PASSWORD
===============================================
hamfist god ae#o abf4388ff343401
bttltoad god cdo@ 29292d919100001
woob god !doe 3902dda99210099
marco-fiset mypass1 12uo aaffff121bcce13
dean password2 TEe9 b44ca7743324234
Ora un tavolo arcobaleno non aiuta davvero. Ad esempio, anziché richiedere l'hash per god
, è necessario calcolare l'hash per god + <all_potential_salts>
. Tipo di limiti che è possibile memorizzare in memoria.
Tuttavia, se qualcuno è fuori per ottenere hamfist
in modo specifico, hanno il sale dal momento che è memorizzato nel database, quindi questo non rallenterà affatto un tentativo di cracking.