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

È stato utile?

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'

on-line di database di hash .

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top