Ho letto questo articolo sull'hash della password utilizzando bcrypt come metodo consigliato . Il consiglio è simile a quello che sta dicendo sulle notizie degli hacker che non usano qualcosa come SHA2 + salt . Ci sono altre risposte su infosec StackExchange sul perché non dovremmo usa qualcosa come SHA-256. La conoscenza generalmente accettata è:
SHA2 is fast, which is bad (bcrypt is purposefully slow so that we can get around Moore's law)
Come sapete, se usiamo bcrypt, per eseguire l'hash di qualcosa con un sale crittografico casuale, potremmo ottenere questa stringa: $2a$13$ZyprE5MRw2Q3WpNOGZWGbeG7ADUre1Q8QO.uUUtcbqloU0yvzavOm
, e il sale è contenuto in quella stringa.
La mia domanda è un po 'sfaccettata:
-
Se un utente malintenzionato accede al database con accesso in scrittura, potrebbe semplicemente riscrivere la password di qualcuno nella tabella con il proprio hash e accedere all'account dell'utente, giusto? A meno che non sia il loro obiettivo specifico (ad esempio, forse non vogliono che nessuno sappia che hanno accesso al database). O se hanno accesso in sola lettura, immagino sia una storia diversa.
-
A parte il fatto che bcrypt è volutamente lento, c'è un altro vantaggio nell'archiviazione del sale nello stesso hash della password anziché avere
user.hash
euser.salt
in un record se non ho usato bcrypt? O in tal caso è generalmente consigliabile archiviare hash e sali in tabelle / database separati (quindi presentare lo svantaggio di più ricerche tabella / database come menzionato in uno dei commenti)?
Abbiamo anche il problema che bcrypt presenta problemi di prestazioni minori (sì, all'interno dei millisecondi) (volutamente) quando si eseguono ricerche, il che è trascurabile nella maggior parte dei casi, ma sembra l'unica protezione che realmente ottenere da bcrypt rende difficile l'elaborazione in batch di un'intera tabella utente e accedere di nascosto agli account degli utenti (o vendere le loro informazioni, o qualsiasi altra cosa). Perché non usare solo qualcosa come SHA2 + salt allora?