Use una clave privada protegida por frase de contraseña para validar las contraseñas de los usuarios

0

Tengo curiosidad por validar las contraseñas de los usuarios (para inicios de sesión y demás). Veo que es común usar un hash con sal para almacenar (de forma segura) las contraseñas de los usuarios con la intención de validar los inicios de sesión de los usuarios.

Mi pregunta:

¿Utilizar claves privadas protegidas con frase de contraseña sería un método seguro para hacerlo?

Posible implementación:

Cuando un usuario crea una cuenta en su plataforma, le darán la contraseña que pretenden usar. El servidor tomaría la contraseña y generaría una nueva clave privada (según su elección de entropía) y usaría la contraseña del usuario como frase de contraseña para "proteger" la clave privada. Luego, almacenará la clave privada protegida por contraseña combinada con el nombre de usuario para que cuando alguien intente iniciar sesión con un nombre de usuario dado (registrado), pueda buscar la clave privada e intentar desbloquearla con la contraseña proporcionada.

    
pregunta MichaelMitchell 02.02.2018 - 09:56
fuente

2 respuestas

2

Bien, veamos qué implica ambos casos.

  1. Estándar hash salado

    En la creación de la contraseña, el usuario da la contraseña de texto sin cifrar Se rellena con un algoritmo salado seguro y solo se almacena el hash

    En más inicios de sesión, el usuario proporciona la contraseña de texto sin cifrar. La sal se extrae del almacén de contraseñas y el hash se compara

    La seguridad se basa en gran medida en la calidad del algoritmo de hash, pero es un punto muy bien documentado y en la calidad intrínseca de la contraseña: lea la entropía de la generación de contraseñas

  2. La contraseña se utiliza como la contraseña para una clave privada

    Es básicamente el mismo proceso, la única diferencia es que el algoritmo de hash se reemplaza con un intento de desbloquear una clave protegida por contraseña. Ahora depende del algoritmo de cifrado utilizado para cifrar la clave privada. Ese es también un punto fuertemente documentado.

Eso significa que solo has cambiado un algoritmo de hashing con uno cifrado. Por cierto, el algoritmo de hashing original utilizado en el antiguo sistema Unix se basaba en el cifrado de una cadena de bytes de cero bits con la contraseña de usuario con DES (*), no muy lejos de su propuesta.

TL / DR: solo dependerá del algoritmo de hash y del algoritmo de cifrado utilizado para cifrar la clave privada

(*) De hecho, es un poco más complejo porque la operación de cifrado se repitió 25 veces y se perturbó con sal ( ref. ) - créditos a @RoyceWilliams por la precisión.

    
respondido por el Serge Ballesta 02.02.2018 - 10:57
fuente
2

Por favor, no hagas esto.

Los dos grandes inconvenientes de cifrar las contraseñas en lugar de incluirlas son velocidad para el atacante y dificultad para que el desarrollador ejecute de forma segura .

Primero, los algoritmos de hashing de contraseñas verdaderos están diseñados para ser muy lentos . Con su método propuesto de una única ronda de cifrado, los atacantes con acceso a los datos pueden probar miles de millones de contraseñas por segundo , y probablemente la fuerza bruta las contraseñas de la mayoría de su base de usuarios.

En segundo lugar, en cuanto intentes rodar el cifrado, es mucho más fácil cometer un error que puede ser explotado por un atacante.

Es mucho más seguro usar un algoritmo de hashing moderno bien definido (tradicionalmente pbkdf2 o bcrypt, y más recientemente scrypt o Argon2) con factores de trabajo altos.

Pornin responde esta pregunta bien aquí .

    
respondido por el Royce Williams 02.02.2018 - 17:05
fuente

Lea otras preguntas en las etiquetas