L'aggiunta di un sale di .htpasswd?
-
09-10-2019 - |
Domanda
E 'possibile aggiungere un sale alle password nei file .hpasswd? Io non assumo in quanto il server avrebbe bisogno il sale per ogni utente, al fine di verificare la password e non riesco a pensare a come sarebbe farli, ma per il resto se la lista doveva essere ottenuto sarebbe piuttosto vulnerabile. C'è una soluzione?
Molte grazie per il vostro aiuto, Ben
Soluzione
Per impostazione predefinita htpasswd utilizza lo standard cripta funzione e, quindi, le password sono già salati - Nota in questo esempio che entrambi gli utenti hanno la stessa password ancora gli hash sono diverse:
simon@diablo:~$ htpasswd -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ htpasswd -b htpasswd simon2 abcd Adding password for user simon2 simon@diablo:~$ cat htpasswd simon:NWvm/LCCxQ64E simon2:2I.LBzsRqULN6
(nota: la bandiera -b
è normalmente sconsigliato poiché gli altri utenti possono vedere i tuoi argomenti della riga di comando e quindi la password)
I primi due caratteri del hash sono il sale; le password sono verificati chiamando di nuovo crypt()
. L'immissione della password sbagliata produce una stringa che è disuguale per l'hash della password:
>>> from crypt import crypt
>>> crypt("wrongpass", "NWvm/LCCxQ64E")
'NWbxQgX1unvso'
, mentre la password corretta produce l'hash previsto:
>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'
htpasswd -m
utilizza un algoritmo diverso che è basata su MD5 e utilizza un sale di più:
simon@diablo:~$ htpasswd -m -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ cat htpasswd simon:$apr1$mfvnBVmG$iIHIHOaH9vcImG5G.8eVa/
Qui, il sale è 8 caratteri tra il secondo e il terzo $
.
negozi htpasswd -s
un digest SHA-1 senza sale; Questo sembra essere per la compatibilità con Netscape / LDIF:
simon@diablo:~$ htpasswd -s -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ htpasswd -s -b htpasswd simon2 abcd Adding password for user simon2 simon@diablo:~$ cat htpasswd simon:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8= simon2:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=
Questi possono essere facilmente invertiti - convertito in un esagono digerire:
>>> "".join("%02x" % ord(c)
... for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'
Altri suggerimenti
L'utilità htpasswd
già fa uso di sali nella maggior parte dei casi:
La cripta () e formati MD5 permutare i rappresentazione anteponendo una stringa casuale di sale, per fare del dizionario attacchi contro le password più difficile.
E questo è (o quasi) al fine di sali nel file di password. Mentre sali devono essere inclusi nel file di .htpasswd
del server per il server sia in grado di controllare le password, è le numerose possibilità diverse di ciò che un sale potrebbe essere che difende contro tali tecniche di attacco come rainbow tables .
Tuttavia, se gli utenti scelgono password deboli o comuni, cracking delle password è un problema in ogni modo, dal momento che l'attaccante (presunta di avere accesso al file delle password) cercherà quelli prima, molto rapidamente in effetti (non limitato dalla velocità di il server e connessione internet), cercando di indovinare in modo normale. Il miglior consiglio che posso dare è che gli utenti dovrebbero sempre scegliere password complesse.