“Conocimiento Problema>contraseñas

Cuando un usuario inicia sesión en el sistema, ¿cómo verifica que se suministró correctamente la contraseña?

2012/5/19
El proceso de verificación de la contraseña de un usuario implica varios pasos, centrándose en las mejores prácticas de seguridad en lugar de almacenar la contraseña en texto plano. Aquí hay un desglose de cómo funciona típicamente:

1. Almacenamiento de contraseña (la forma correcta):

* Hashing: En lugar de almacenar la contraseña del usuario directamente, el sistema almacena un * hash * criptográfico de la contraseña. Un hash es una función unidireccional; Es fácil calcular el hash de la contraseña, pero prácticamente imposible de obtener la contraseña original del hash.

* Salting: Para mejorar aún más la seguridad, se agrega una * sal * aleatoria a la contraseña antes del hash. La sal es una cadena de caracteres única y generada al azar. Esto hace que sea mucho más difícil para los atacantes usar tablas de hash precomputadas (tablas de arco iris) para descifrar las contraseñas, incluso si obtienen acceso a la base de datos.

* La 'Salt' se almacena típicamente junto con la contraseña `Hash` en el registro del usuario.

* Algoritmos de hashing fuerte: Los sistemas modernos utilizan algoritmos de hash sólidos como:

* bcrypt: Algoritmo de hashing adaptativo que es lento y computacionalmente costoso, por lo que es muy resistente a los ataques de fuerza bruta. Incluye la generación de sal y el almacenamiento dentro del hash.

* argon2: Un algoritmo de hashing más moderno y de memoria, a menudo considerado el sucesor de Bcrypt.

* Scrypt: Otra función de derivación clave que está diseñada para ser computacionalmente intensiva, lo que hace que sea más difícil descifrar las contraseñas.

2. Proceso de inicio de sesión/autenticación:

1. Entrada del usuario: El usuario ingresa su nombre de usuario y contraseña en el formulario de inicio de sesión.

2. Recuperar sal: El sistema recupera el * sal * asociado con el nombre de usuario ingresado desde la base de datos del usuario.

3. Hashing con sal: El sistema toma la contraseña ingresada del usuario y la *sal *recuperada *, las combina y luego aplica el mismo algoritmo de hashing que se usó cuando la contraseña se almacenó originalmente.

4. Comparación: El hash resultante del paso 3 se compara con el hash de contraseña almacenada para ese usuario en la base de datos.

5. Verificación:

* Si los dos hashes coinciden: Es muy probable que el usuario ingresó la contraseña correcta. El usuario se autentica y se establece una sesión.

* Si los hashes no coinciden: La contraseña ingresada es incorrecta. Se le niega el acceso al usuario y generalmente recibe un mensaje de error.

Por qué esto es seguro:

* Sin contraseñas de texto sin formato: El sistema * nunca * almacena la contraseña real en texto sin formato, por lo que incluso si la base de datos se ve comprometida, los atacantes no tendrán acceso directo a las contraseñas.

* La sal previene los ataques de mesa del arco iris: La sal única para cada usuario hace que las tablas de arco iris (tablas de hash precomputadas) sean ineficaces. Un atacante necesitaría generar una mesa de arco iris para * cada * sal, que es computacionalmente prohibitiva.

* El hashing lento evita los ataques de fuerza bruta: Los algoritmos de hash modernos (como Bcrypt, Argon2 y Scrypt) están diseñados deliberadamente para ser lentos. Esto significa que un atacante no puede probar una gran cantidad de conjeturas de contraseña rápidamente.

Ejemplo de código (conceptual - python con bcrypt):

`` `Python

importar bcrypt

Def hash_password (contraseña):

"" "Hashes una contraseña usando bcrypt con una sal generada al azar". ""

# Generar una sal

sal =bcrypt.gensalt ()

# Hash la contraseña usando la sal

Hashed_password =bcrypt.hashpw (contraseña.encode ('utf-8'), sal)

return hashed_password, sal #return tanto el hash como la sal para que la sal se pueda almacenar con el hash

Def verify_password (Entered_password, Stored_hash, Stored_salt):

"" "Verifica si la contraseña ingresada coincide con el hash almacenado". ""

# Hash la contraseña ingresada con la sal almacenada

hashed_entered_password =bcrypt.hashpw (Entered_password.encode ('UTF-8'), Stored_salt)

# Compare el hash generado con el hash almacenado

return hashed_entered_password ==stored_hash

Uso de ejemplo (al crear un nuevo usuario):

contraseña ="mySecretPassword123"

hashed_password, sal =hash_password (contraseña)

Almacene el hashed_password y la sal en la base de datos (asociada con el usuario)

Uso de ejemplo (durante el inicio de sesión):

Entered_password ="mySecretPassword123" #User proporciona durante el inicio de sesión

Obtenga el almacenado_hash y almacenado_salt de la base de datos basada en el nombre de usuario

stored_hash =b '$ 2b $ 12 $ ek11we0gqj8dk9j7cqh9yoc9/s8/6rxlg13n/l604qg1v14k6ydna' # Ejemplo - almacenado de arriba

stored_salt =b '$ 2b $ 12 $ ek11we0gqj8dk9j7cqh9yo' # Ejemplo - almacenado desde arriba

Si verify_password (Entered_password, Stored_hash, Stored_salt):

Imprima ("Contraseña verificada! Iniciar sesión exitoso")

demás:

Imprimir ("Contraseña incorrecta. Iniciar sesión Fallado")

`` `` ``

Consideraciones importantes:

* Complejidad de contraseña: Haga cumplir las reglas de complejidad de la contraseña (longitud mínima, caracteres requeridos) para hacer que las contraseñas sean más difíciles de adivinar.

* Limitando la velocidad: Implementar la limitación de la tasa en los intentos de inicio de sesión para prevenir los ataques de fuerza bruta. Bloquear cuentas después de un cierto número de intentos fallidos.

* Autenticación de dos factores (2fa): Use 2FA para una capa adicional de seguridad. Incluso si la contraseña se ve comprometida, un atacante aún necesitará un segundo factor (por ejemplo, un código de una aplicación móvil).

* Auditorías de seguridad regulares: Realice auditorías de seguridad regulares para identificar y abordar las posibles vulnerabilidades.

* Mantenga las bibliotecas actualizadas: Mantenga las bibliotecas y dependencias de Hashing actualizadas para beneficiarse de los últimos parches de seguridad.

* Mecanismos de restablecimiento de contraseña: Implemente mecanismos de restablecimiento de contraseña segura utilizando preguntas de verificación por correo electrónico o seguridad.

Al usar estos principios, los sistemas pueden verificar efectivamente las contraseñas mientras protegen los datos del usuario del compromiso. Es un aspecto crucial de la seguridad general.

contraseñas
Cómo cambiar la contraseña del administrador en la consola de recuperación
¿Qué es lo que olvida su contraseña de correo de voz desde Verizon?
Cómo hacer un disco de recuperación de contraseña
¿Cómo reinicio mi contraseña para iniciar sesión en Packard Bell Computer Computer ex novio y me temo que accederá de forma remota a que abriera archivos personales?
¿Qué comandos de Linux se pueden usar para establecer una fecha de vencimiento para una contraseña?
¿Cómo desgaste su bloqueo de cartas?
Cómo restablecer la contraseña de encendido para el HP DC5700
¿Por qué la autenticación requería aparecer?
Conocimiento de la computadora © http://www.ordenador.online