Saltar al contenido

Hash de contraseña para aumentar la entropía

Solución:

No, no se aumenta la entropía mediante hash una, dos o diez veces. Considere la entropía como se ve en la entrada, no en la salida. No puede agregar entropía usando un proceso determinista, ya que la entropía del resultado no cuenta.

Incluso si tiene un código como este:

$password = "123456";
$result = md5($password) . sha1($password) . hash('gost', $password);
echo $result;  //   e10adc3949ba59abbe56e057f20f
// 8941b84cdecc9c273927ff6d9cca1ae75945990a2cb1f
// 81e5daab52a987f6d788c372

Y terminas con una cadena de 136 bytes de aspecto aterrador, la contraseña sigue siendo 123456, y cualquier atacante que fuerce brutalmente su contraseña con hash tendrá que intentarlo, en promedio, solo una vez, como 123456 es la peor contraseña en casi todas las listas.

Si una contraseña aleatoria tiene hash con md5, ¿la salida proporcionará una entropía de 128 bits?

No, MD5 es determinista, por lo que si el atacante sabe que la cadena es un hash MD5, la entropía es la entropía de la contraseña aleatoria que proporcionó.

Para hacer que la contraseña sea más segura, use una derivación de clave adecuada (PBKDF2 es una buena), solicite al usuario una contraseña más larga y verifique si el usuario sigue las reglas básicas de contraseña (sin caracteres repetidos en una fila, longitud adecuada, mezcla dígitos y caracteres, mayúsculas y minúsculas, cosas así).

Una función de derivación de claves no aumentará la entropía, pero hace que las cosas sean más seguras. Un KDF tiene las siguientes funciones:

  • Crea una clave de la longitud correcta. Muchos algoritmos de cifrado tienen una longitud de tamaño fija, como 16 bytes. Al utilizar un KDF, puede utilizar una contraseña de cualquier longitud.
  • Distribuye la entropía de la contraseña por toda la clave. Los algoritmos de cifrado están diseñados para funcionar con claves de aspecto aleatorio. Si utiliza 1000000000000000 como clave, esto puede introducir problemas de seguridad en el algoritmo de cifrado. Un KDF codifica la contraseña en una clave de aspecto aleatorio.
  • Toma tiempo. Para ralentizar los ataques de fuerza bruta, la derivación de claves se puede ralentizar de modo que intentar muchas contraseñas lleve una cantidad de tiempo irrazonable.

TL; DR

Aplicar un hash a una contraseña incorrecta antes de enviarla a algún servidor como contraseña requiere más tiempo, es más incómodo y menos seguro que un simple administrador de contraseñas.

La Pregunta parece apuntar a mal uso un algoritmo hash como un administrador de contraseñas muy simple.

Utilice uno real o cualquier administrador de contraseñas real.

Usaré su ejemplo para mostrar por qué será una mala idea:

  • Tienes la contraseña no tan “rica en entropía” 1111111111111
  • tendrá el hash 9DCBF642C78137F656BA7C24381AC25B

Ahora, un atacante obtiene de alguna manera una base de datos donde las contraseñas están en texto sin cifrar (sucedía a menudo en el pasado). ¿Y por qué alguna vez buscará accidentalmente hashes que tengan texto plano (la contraseña no tan “rica en entropía” es una de ellas). Ahora sabe que el usuario con su nombre de usuario / correo electrónico usa “1111111111111” y luego MD5, como contraseña. Entonces, ¿cuál es el beneficio que tiene? Alguien debe dar un paso más, pero en cuanto a seguridad, no hay una diferencia real.

Aquí la diferencia de lo que podría suceder en el mundo real:

A tu manera:

ClearText – MD5 -> HashedClearText – enviado al servidor (HTTP (S)) -> | | – MD5 / SHA * / … -> HashedHashedClearText

Manera normal:

ClearText – enviado al servidor (HTTP (S)) -> | | – MD5 / SHA * / … -> HashedClearText

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *