¿Peligro la seguridad si almaceno los primeros tres caracteres (hash) en una tabla separada?

0

Para que un representante de servicio al cliente identifique a un cliente, le gustaría pedirle al cliente los tres primeros caracteres de su contraseña.

La longitud mínima de la contraseña es actualmente de ocho caracteres, se utiliza un "big" salt y la solución de hashing es BCrypt.

La idea es hacer hash y almacenar los primeros tres caracteres por separado.

    
pregunta Martin R-L 06.09.2017 - 08:44
fuente

1 respuesta

9

Si un atacante obtiene acceso a los hashes almacenados y sabe que cada uno de estos solo codifica un único personaje, puede forzar a este personaje con muy pocas conjeturas. La sal no protege contra esto, ya que forma parte del hash de la contraseña almacenada y, por lo tanto, el atacante la conoce. La desaceleración realizada por bcrypt tampoco ayuda, ya que solo hay que adivinar unos pocos caracteres.

Lo que es peor, una vez que el atacante tuvo acceso a los primeros 3 caracteres de la contraseña, esta manera fácil de forzar los caracteres restantes es mucho menos esfuerzo, como si la contraseña tuviera que ser forzada por completo.

Si no hay un hash separado para cada uno de los primeros 3 caracteres pero solo un hash sobre los tres juntos, no es tan inseguro como con las tres contraseñas de una letra, pero sigue siendo totalmente inseguro.

Para hacer más claro el problema de almacenar uno o pocos en lugar de todos los caracteres de una contraseña en un hash separado, muestre las matemáticas involucradas, considere el siguiente ejemplo:

  • Suponiendo que una contraseña consta de 100 dígitos aleatorios.
  • Cuando se fuerza esta contraseña de forma bruta a la vez, el atacante debería verificar como máximo todas las permutaciones de 2 ^ 100 y, en promedio, la mitad, que todavía es demasiado para ataques prácticos.
  • Pero, si todos estos dígitos se almacenan en hashes separados y, por lo tanto, el atacante obtiene una respuesta positiva después de descifrar el dígito para una posición específica, solo necesita como máximo 10 intentos para cada posición y, por lo tanto, 10 * 100 intentos en total. Esto hace que la contraseña sea fácil de descifrar en poco tiempo, incluso si cada intento tomara un segundo completo. Y ninguna sal protegerá contra esto.
  • Si no hash un solo dígito sino solo combinaciones de 3 dígitos, se pone un poco mejor, pero aún está lejos de ser seguro. En este caso, cada uno de estos hashes para 3 dígitos necesitaría un máximo de 1000 intentos. Con 33 de tales hashes (y uno para un solo dígito) o almacenar la contraseña original de 100 dígitos, un atacante necesitaría a lo sumo 33 * 1000 + 10 intentos, es decir, sigue siendo absurdamente inseguro.
respondido por el Steffen Ullrich 06.09.2017 - 08:53
fuente

Lea otras preguntas en las etiquetas