Al lavoro abbiamo due teorie concorrenti per i sali. I prodotti su cui lavoro usano qualcosa come un nome utente o un numero di telefono per salare l'hash. Essenzialmente qualcosa che è diverso per ogni utente ma è prontamente disponibile per noi. L'altro prodotto genera in modo casuale un salt per ogni utente e cambia ogni volta che l'utente cambia la password. Il sale viene quindi crittografato nel database.
La mia domanda è se il secondo approccio è davvero necessario? Posso capire da un punto di vista puramente teorico che è più sicuro del primo approccio, ma che dire da un punto di vista pratico. In questo momento per autenticare un utente, il sale deve essere non crittografato e applicato alle informazioni di accesso.
Dopo averci pensato, non vedo un reale vantaggio in termini di sicurezza da questo approccio. Cambiare il sale da un account all'altro rende ancora estremamente difficile per qualcuno tentare di forzare l'algoritmo di hashing anche se l'aggressore era a conoscenza di come determinare rapidamente cosa fosse per ogni account. Questo presuppone che le password siano sufficientemente forti. (Ovviamente trovare l'hash corretto per un set di password in cui sono tutte due cifre è significativamente più facile che trovare l'hash corretto delle password che sono 8 cifre). Sono sbagliato nella mia logica o c'è qualcosa che mi manca?
EDIT: Ok, ecco il motivo per cui penso che sia davvero discutibile crittografare il sale. (fammi sapere se sono sulla strada giusta).
Per la seguente spiegazione, supponiamo che le password siano sempre 8 caratteri e il salt sia 5 e tutte le password siano composte da lettere minuscole (semplifica la matematica).
Avere un sale diverso per ogni voce significa che non posso usare la stessa tabella arcobaleno (in realtà tecnicamente potrei se ne avessi una di dimensioni sufficienti, ma ignoriamolo per il momento). Questa è la vera chiave del sale da quello che ho capito, perché per rompere ogni account devo reinventare la ruota per così dire per ognuno. Ora, se so come applicare il salt corretto a una password per generare l'hash, lo farei perché un salt estende in realtà solo la lunghezza / complessità della frase con hash. Quindi taglierei il numero di combinazioni possibili che dovrei generare per "sapere" che ho la password + sale da 13 ^ 26 a 8 ^ 26 perché so cos'è il sale. Ora questo lo rende più facile, ma ancora molto difficile.
Quindi sulla crittografia del sale. Se so che il sale è crittografato, non proverei a decrittografarlo (supponendo di sapere che ha un livello sufficiente di crittografia) prima. Lo ignorerei. Invece di cercare di capire come decrittografarlo, tornando all'esempio precedente, genererei semplicemente una tabella arcobaleno più grande contenente tutte le chiavi per 13 ^ 26. Non conoscere il sale mi rallenterebbe sicuramente, ma non credo che aggiungerebbe il compito monumentale di provare prima a decifrare la crittografia del sale. Ecco perché non credo ne valga la pena. Pensieri?
Ecco un collegamento che descrive per quanto tempo le password resisteranno a un attacco di forza bruta: http://www.lockdown.co.uk/?pg=combi