Risposta breve: se confronti le velocità su x86, il costo massimo in PHP di 31 (2 ^ 31 iterazioni) sarebbe abbastanza sicuro per una password strong (casuale a 8 caratteri) . Non che sia utilizzabile, un hash richiederebbe circa 200 ore per generare su un desktop.
Risposta lunga:
(ampio margine di errore a causa della mancanza di precisi dati sulle prestazioni hash, nessuna specificità sulla forza della password e approssimazione approssimativa.)
Il costo della forza bruta grezza può variare con un fattore di miliardi tra una password di 6 lettere e una password di lunghezza 10 con numeri e caratteri speciali. (26 ^ 6 = 3.0E + 8 per lettere minuscole, 94 ^ 10 = 5.3e + 19 per mixalpha-num-all) Le velocità di hash possono variare con l'implementazione.
Quindi, se l'utente sceglie una delle 1000 password più comunemente utilizzate, è valida come un numero di pin di 3 cifre, rendendo la domanda praticamente irrilevante.
A tal fine, la risposta è "il più possibile, non possiamo salvare tutti da soli"
Ma facciamo un calcolo del back-of-the-napkin per avere un'idea. Supponiamo che il database imponga un requisito minimo strong di "8 caratteri casuali"
Con un set di caratteri di tutti i caratteri ASCII maiuscoli e minuscoli, tutte le cifre e i caratteri speciali che verrebbero alle combinazioni 6161234432565770
Ora facciamo un'idea delle prestazioni degli hash. L'unico confronto side-by side che ho trovato è stato il seguente:
link
Si afferma che il fattore di lavoro predefinito di 10 è circa pari a 80.000 cicli di SHA512crypt
.
Ora SHA 512 costa solo circa il 120% delle volte che richiede 256
Quindi ciò rende bcrypt con costo (10) approssimativamente uguale a 100.000 round di SHA256.
Il costo di BCrypt è definito in questo modo:
The two digit cost parameter is the base-2 logarithm of the iteration
count for the underlying Blowfish-based hashing algorithm and must be
in range 04-31, values outside this range will cause crypt() to fail
costo (10) = 2 ^ 10 = 1024 iterazioni. l'algoritmo di bitcoin SHA256 è circa 100 volte più veloce per iterazione.
Supponendo che la rete BitCoins possa fare 2.14E + 18 SHA256 / secondo, verrebbe giù a 2.14E + 16 iterazioni di BCrypt / secondo.
Lo spazio chiave della lunghezza-8 password casuale in charset mixalpha-numeric-all è circa 6.16E + 16
- Quindi a 1 iterazione, potrebbe aggiungere una password simile a < 3s. il minimo per PHP è un costo di 4, quindi 16 iterazioni.
- Al costo predefinito di 10, ci vorrebbe quasi un'ora.
-
Al costo massimo di 31 aumenterebbe un altro 2 ^ 21 = 2097152.
Sarebbe arrivato a > 200 anni. (2097152 ore è un po 'meno di 240 anni. )
Questa è una forza bruta abbastanza irrealizzabile, e per il momento potrebbe essere considerata sicura.
La quantità massima di "costo" in BCrypt sarebbe sufficiente per l'intera rete BitCoin corrente se la password è moderatamente strong.
Tuttavia, il confronto tra BCrypt e SHA512 menziona il costo (20) richiede già > 3 minuti su una workstation, per cui costi così grandi non sono fattibili per ora.
estrapolando 2 ^ 12 * 3.12 / 60 = ~ 213 ore