2010-12-14 16 views
76

Quale sarebbe un fattore di lavoro di bcrypt ideale per l'hashing della password.Ottimale fattore di lavoro bcrypt

Se utilizzo un fattore 10, il mio laptop impiega circa 1 su una password hash. Se finiamo con un sito molto impegnato, questo si traduce in una grande mole di lavoro semplicemente controllando le password delle persone.

Forse sarebbe meglio utilizzare un fattore di lavoro pari a 7, riducendo il totale degli hash delle password fino a circa .01 secondi per accesso al laptop?

Come si decide il compromesso tra sicurezza della forza bruta e costi operativi?

+7

Il costo ostacola gli attacchi offline. Quando "online" è possibile utilizzare un ritardo minimo tra i tentativi (ad esempio 5 secondi) per impedire un attacco denial of service. –

+3

Duplicate on InformationSecurity: [Numero di round consigliati per bcrypt] (http://security.stackexchange.com/q/17207/46416) –

+1

Per chiunque fosse interessato, ho appena scritto un piccolo strumento CLI Java per testare le prestazioni di bcrypt sui server (che è ovviamente importante per bilanciare sicurezza, carico del server e tempi di risposta): https://github.com/cdraeger/hash-performance – Blacklight

risposta

96

Ricordare che il valore è memorizzato nella password: $2a$(2 chars work)$(22 chars salt)(31 chars hash). Non è un valore fisso.

Se si trova che il carico è troppo alto, è sufficiente farlo in modo che la prossima volta che effettuano l'accesso, si cripta a qualcosa di più veloce da calcolare. Allo stesso modo, man mano che il tempo passa e ottieni server migliori, se il carico non è un problema, puoi aggiornare la forza del loro hash quando effettuano l'accesso.

Il trucco è di mantenerla impiegando all'incirca lo stesso tempo per sempre nel futuro insieme alla legge di Moore. Il numero è log2, quindi ogni volta che i computer raddoppieranno in velocità, aggiungere 1 al numero predefinito.

Decidi per quanto tempo desideri che la password dell'utente venga forzata. Ad esempio, per alcune parole comuni del dizionario, la creazione del tuo account probabilmente li avvisava che la loro password era debole. Se è una delle 1000 parole comuni, per esempio, e ci vuole un 0.1 attaccante per testare ciascuna, che le acquista 100s (beh, alcune parole sono più comuni ...). Se un utente sceglie "common dictionary word" + 2 numeri, sono oltre due ore. Se il tuo database delle password è compromesso e l'hacker può ottenere solo poche centinaia di password al giorno, hai acquistato la maggior parte dei tuoi utenti ore o giorni per cambiare in sicurezza le password. È questione di comprarli.

http://www.postgresql.org/docs/8.3/static/pgcrypto.html ha alcune volte per cracking password da prendere in considerazione. Naturalmente, le password che elencano sono lettere casuali. Le parole del dizionario ... In pratica non è possibile salvare il tizio la cui password è 12345.

+6

Questa è davvero una risposta eccellente. Non avevo nemmeno considerato la re-crypt sull'idea di login. Grazie mille! – Chris

+1

Come funziona la riattivazione? Dovresti conservare il vecchio costo di lavoro di bcrypt da qualche parte in modo da poterlo utilizzare per collegarli e dopo aver convalidato la loro password, avresti aggiornato l'hash e il costo nel database? –

+4

@JerrySaravia La bellezza di bcrypt è che il costo è memorizzato all'interno dell'hash stesso, quindi non è necessario memorizzare _qualcosa_ extra. Semplicemente autenticarsi con l'attuale hash, quindi ricreare immediatamente l'hash con un costo diverso. Semplice! –