So già che avrò hash la password dell'utente n volte in sha512 o n * x in sha1 prima che venga inviata al server. Una volta sul server, userò bcrypt set per usare ~ 1/100 di secondo Prima di andare avanti, seguendo il mio ragionamento sull'uso di sha512 invece di sha1, vorrei precisare alcune cose: in primo luogo, so che la sicurezza lato client è uno scherzo. un attacco Man-in-the-middle potrebbe spogliare il javascript della pagina della funzione hash. Infine, mi rendo conto che questo significherà che le persone non potranno accedere senza che javascript sia abilitato.
Attualmente sto usando il set sha512 per usare ~ 1s in ie8 [2], è configurato come tale.
- Utilizza la password e il nome utente dell'utente.
- Aggiungi un statico-nonce (per allungarlo davvero e nient'altro).
- Hash tramite la funzione di hashing, in questo caso sha512.
- Prendi quell'hash, esegui l'hash tramite sha512 con il numero del loop corrente racchiuso in un singolo byte.
- ripeti il passaggio 4 volte.
- Al termine, prendi quel valore e inseriscilo nel campo della password.
- consente infine al sistema di inviare POST al server.
Ora, qual è il vantaggio di fare n * x hash di sha1 rispetto ai n volte di sha512. L'intero punto dietro l'utilizzo di questo sistema è che, in caso di perdita di un database, l'utente malintenzionato dovrà aumentare la quantità di tempo trascorso cercando di trovare la password entro l'ora z. Inoltre, eseguendo l'hashing prima che raggiunga anche il server (insieme all'utilizzo di TLS), lo fa, in modo che, in caso di qualche strano bug, la password non venga mai vista come testo normale.
Credo che sha512 sia una scelta migliore dato che c'è già un'interruzione di sha1 e quindi la sicurezza non vale la pena, ma dall'altra parte. La libreria javascript più veloce che ho trovato per sha512 [1] [] è ~ 50 volte più lenta del codice nativo, ma la libreria sha1 più veloce che ho trovato è solo ~ 17 volte più lenta del codice nativo.
Quindi è una questione di come lo sha1 rotto possa causare una perdita maggiore nella sicurezza generale e quindi il rallentamento di un hacker piuttosto che fare meno iterazioni di sha512 che a tutt'oggi nessuno della famiglia di sha2 è in remoto. Qualcun altro ha già affrontato questo problema in precedenza?
[1]: che via fuzzing risulta nello stesso hash dell'implementazione c / php si ottiene lo stesso hash per ~ 300 input.
[2]: un anno dopo l'uscita di ie10, vorrei rilasciare il supporto per ie8 in modo da poter aumentare il numero di hash a qualcosa di più ragionevole.