¿Cómo sabe el sistema de autenticación si estoy reutilizando una contraseña? ¿Cómo es esto seguro?

0

Mi pregunta es ¿cómo es posible saber si estoy reutilizando una contraseña? ¿También están almacenando mi contraseña anterior [en texto sin formato]?

Si un administrador tuviera acceso al servidor, ¿no tendrían acceso a todas mis contraseñas?

¿Cuál es el punto de tanta seguridad?

    
pregunta DHL17 03.01.2018 - 08:19
fuente

1 respuesta

2

En un sistema de diseño de pozo, su contraseña real nunca se almacena. En su lugar, se utiliza una función unidireccional, llamada hash. Las funciones de hash están diseñadas matemáticamente para que no haya una relación unidireccional que le permita hacer la función a la inversa y recuperar la entrada original. Puede obtener un entendimiento básico de este artículo .

En el backend, solo se almacena el hash. En la lógica de aplicación normal, cuando se recibe la contraseña del usuario al iniciar sesión, se revisa de la misma manera que cuando se creó la contraseña. El valor de hash almacenado y el hash de la contraseña escrita al iniciar sesión pueden compararse.

Usando este diseño, comparamos estos sustitutos de contraseña y nunca almacenamos la contraseña. Como resultado, si alguien encuentra el hash en el backend, no tendrá su contraseña. No pueden abusar del flujo de inicio de sesión normal con solo el hash porque no pueden revertirlo. Si el administrador de TI o un pirata informático solo tuvieran acceso a los hashes de contraseña, no sería suficiente hacer nada directamente.

* Nota: los hashes de contraseña no se pueden revertir, pero puede calcular valores para las contraseñas de entrada dadas y ver si coinciden. Salting y otras técnicas pueden ayudar a hacer esto más difícil. Lea el artículo al que he vinculado anteriormente para obtener una introducción al concepto

En cuanto al historial de contraseñas, no es necesario que almacene las contraseñas, pero también puede almacenar todos los hashes. Cuando se le solicite que ingrese una nueva contraseña, dicha contraseña se borrará y luego ese hash se comparará con todos los hashes en la lista de historial. Esto significa que no es necesario almacenar directamente las contraseñas antiguas para que nadie pueda acceder a ellas.

También es posible utilizar el historial de hash para probar las contraseñas que son similares a las usadas en el pasado sin saber el texto en claro:

Por ejemplo, si ingresó una contraseña de "DogFood", también podría generar muchas variaciones usando algún algoritmo para obtener algo como {"dogfood", "DOGFOOD", "dOGfOOd", etc.}. El algoritmo puede probar todo tipo de modificaciones, como reemplazos de caracteres, teclas de una sola vez, verificar los números que aumentan (por ejemplo, si hace "contraseña1" agregará "contraseña2", "contraseña3", etc.). Entonces para cada variación también calculas el hash. Si el hash de la contraseña original o cualquiera de las posibles variaciones coincide con un hash que ya se encuentra en su historial, es una coincidencia demasiado estrecha y no se permitirá.

El punto clave es que las comparaciones nunca son con el valor real, sino con los hashes calculados.

Una última cosa, es posible que un sistema "encripte" en lugar de "hashing" las contraseñas. En este caso, existe una mayor probabilidad de que la contraseña real esté expuesta. Sin embargo, el hash se utiliza el 99.9% del tiempo y el cifrado de contraseña solo se usa para necesidades específicas o por una mala elección de diseño de software.

    
respondido por el Eric G 06.01.2018 - 04:16
fuente

Lea otras preguntas en las etiquetas