Imagine que necesita autenticar a los usuarios en un sitio web utilizando una contraseña. La solución más obvia es almacenar la contraseña sin procesar en un archivo y compararla con la contraseña que ingresaron. Esto tiene el problema de que cualquier violación del archivo de contraseña revela las contraseñas reales del usuario. Estos pueden usarse para entrar en las cuentas del usuario en otros sitios y eleva la gravedad del problema de un problema local a uno mucho más grave.
Para resolver este problema, podemos “hash” la contraseña, utilizando una función unidireccional que convierte la contraseña de texto sin formato en un nuevo valor. Luego es posible comparar el hash de la entrada del usuario con el hash almacenado, pero es difícil tomar un hash en particular y descubrir qué contraseña se usó para generarlo.
Sin embargo, hay un problema: un atacante podría calcular previamente una tabla de, por ejemplo, los valores hash de cada contraseña de 10 caracteres, o los valores hash de cada palabra común, y usar eso para descubrir qué contraseña se utilizó para generar el hash. Para resolver este problema, la sal (una cadena aleatoria pero conocida) se agrega a la contraseña antes del hash. Esto no es necesariamente un secreto, pero obliga a un atacante a volver a calcular todos los hashes de contraseñas posibles para cada usuario.
- Cómo saber que algunos de los administradores de contraseñas comercializados normalmente en un modelo freemium no están recolectando contraseñas para que la CIA / NSA las use
- ¿Existe alguna referencia para las leyes de importación / exportación criptográfica por país?
- ¿Cuál es la percepción del sistema operativo Qubes entre los expertos en seguridad?
- ¿Cuáles son los inconvenientes de nessus como herramienta de seguridad de red?
- Cómo comenzar una carrera en seguridad de la información
Incluso esto no es una protección perfecta: un atacante dedicado podría forzar de forma bruta los valores hash para la contraseña de un usuario en particular. Es por eso que es importante también exigir contraseñas complejas (aumentar el espacio de búsqueda) y utilizar un mecanismo costoso de hash (aumentar el costo de búsqueda).
PKCS # 5, Sección 4 (Estándar de criptografía basado en contraseña) tiene una discusión más completa de estos temas: http://www.rsa.com/rsalabs/node….