Le password unix / linux sha256 / sha512 in / etc / shadow sono rinforzate con la chiave?
Sì. Usano una procedura di crypt che esegue un default di 5000 cicli di hashing. La procedura sha256-crypt / sha512-crypt è descritta qui
e in java
Posso modificare il numero di round?
Sì. Modifica semplicemente /etc/pam.d/passwd
o /etc/pam.d/common-password
(o equivalente solare) e aggiungi "rounds = 73500" alla fine della riga che assomiglia a:
password [success=2 default=ignore] pam_unix.so obscure sha512 rounds=73500
e poi cambia la password usando passwd. Perché 73500? Bene, crypt timing con round = 5000, stavo ottenendo circa 3,4 ms per password. (5000 * 50 / 3,4 ~ 73500). Puoi controllare se una password nei tuoi file / etc / shadow è stata eseguita con un numero anomalo di round se sembra inizia con yourusername:$6$rounds=73500$RFzXZTGB$
dove $6$
indica la procedura di crypt utilizzata (sha256-crypt è $ 5 $, sha512-crypt $ 6 $ ) seguito dal numero di giri e poi dal sale.
Ma voglio bcrypt; Posso passare a questo:
Controlla /etc/pam.d/ e (1) cambia tutti i riferimenti di pam_unix.so
a pam_unix2.so
(controlla che il file sia lì) e (2) poi modifica sha512
a blowfish
in / etc /pam.d/common-password
link
Una differenza notevole tra bcrypt e sha512-crypt; è che il fattore di lavoro bcrypt scala in modo esponenziale; ad esempio, un fattore di lavoro di 12, dovrebbe durare il doppio di un fattore di lavoro di 11, mentre gli arrotondamenti di crypt di sha512 si ridimensionano linearmente (ad esempio, rounds=10000
dovrebbe richiedere il doppio del tempo di rounds=5000
). Questo è semplicemente perché bcrypt dice di fare 2 round fattore di lavoro . Come un rapido punto di riferimento sulla mia macchina, un bcrypt round è più costoso di un round di crypt sha512; con un'equivalenza approssimativa di ~ 4 ms con rounds=5000
o work-factor=6
(2 6 = 64 bcrypt-rounds). Ma poiché entrambi possono essere scalati, questo non dovrebbe costituire un problema fino a quando il numero di cicli non supera ilint
di 32 bit / 64 bit senza segno (quando round = 4 miliardi o 10 19 rispettivamente).
Stima dei tempi di Python con sha512-crypt
Puoi controllare crypt tramite python (in linux questo è veloce come la versione C poichè è solo un sottile involucro per la libreria crypt scritta in C)
>>> import crypt
>>> crypt.crypt('testtest', '$6$6LzxTFam$')
In python sulla mia macchina con il modulo cripta ci vogliono circa 3,4 ms per password sha512-crypt a 5000 giri e ~ 50 ms con 73500 round.
>>> import timeit
>>> timer = timeit.Timer("crypt.crypt('testtest', '$6$6LzxTFam$')", setup="import crypt")
>>> timer.timeit(1000)
3.4215329647064209
# with 73500 rounds:
>>> timeit.Timer("crypt.crypt('testtest', '$6$rounds=73500$RFzXTGB$')", 'import crypt').timeit(1000)
50.738550186157227