Pregunta

¿Es posible añadir una sal de contraseñas en archivos .hpasswd? No asumo desde el servidor necesitaría la sal para cada usuario con el fin de verificar la contraseña y no puedo pensar en cómo iba a conseguir, pero por lo demás si la lista debía ser obtenida sería bastante vulnerable. ¿Existe una solución?

Muchas gracias por su ayuda, Ben

¿Fue útil?

Solución

Por defecto htpasswd utiliza el estándar cripta función y por lo tanto las contraseñas ya se salan - nota en este ejemplo que ambos usuarios tienen la misma contraseña sin embargo, los valores hash son diferentes:

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 bandera -b normalmente se desaconseja debido a que otros usuarios puedan ver sus argumentos de línea de comandos y por lo tanto la contraseña)

Los dos primeros caracteres del hash son la sal; contraseñas se verifican llamando crypt() nuevo. Introducción de una contraseña incorrecta produce una cadena que es desigual a la contraseña con algoritmo hash:

>>> from crypt import crypt
>>> crypt("wrongpass", "NWvm/LCCxQ64E")
'NWbxQgX1unvso'

mientras que la contraseña correcta produce el hash espera:

>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'

htpasswd -m utiliza un algoritmo diferente que se basa-MD5 y utiliza una sal más larga:

simon@diablo:~$ htpasswd -m -b -c htpasswd simon abcd
Adding password for user simon
simon@diablo:~$ cat htpasswd
simon:$apr1$mfvnBVmG$iIHIHOaH9vcImG5G.8eVa/

Aquí, la sal es los 8 caracteres entre el segundo y tercero $.

tiendas htpasswd -s un SHA-1 digerir sin sal; Esto parece ser para la compatibilidad 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=

Estas pueden ser fácilmente revertidos - convertir en un hexágono digerir:

>>> "".join("%02x" % ord(c)
...      for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'

a continuación, utilizar un línea de base de datos de hash .

Otros consejos

La utilidad htpasswd ya hace sales uso en la mayoría de los casos:

La cripta () y formatos MD5 permutan la representación anteponiendo una cadena semilla aleatoria, para hacer de diccionario ataques contra las contraseñas más difícil.

Y eso es (más o menos) con el propósito de sales en los archivos de contraseñas. Mientras que las sales tienen que ser incluidos en el archivo .htpasswd del servidor para el servidor para poder comprobar contraseñas, son las numerosas posibilidades diferentes de lo que es una sal podría ser que defiende contra técnicas de ataque como tablas de arco iris .

Sin embargo, si los usuarios elegir contraseñas débiles o comunes, descifrado de contraseñas es un problema de todos modos, ya que el atacante (que se supone tener acceso al archivo de contraseñas) tratará los primeros, muy rápidamente, de hecho (no limitado por la velocidad de el servidor y conexión a Internet), adivinando en la forma normal. El mejor consejo que puedo dar es que los usuarios siempre deben elegir contraseñas seguras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top