Este documento propone el concepto de honeywords para detectar si una base de datos de contraseñas se ha comprometido.
Según tengo entendido, funciona así:
Guarda n hashes de contraseña para cada usuario, uno que realmente contiene la contraseña real y n-1 que contiene las llamadas palabras clave (contraseñas falsas). El hash de contraseña correcto se almacena en un índice aleatorio entre esos hashes de palabras clave.
Si ahora se usa una de estas palabras clave en un intento de inicio de sesión en lugar de la contraseña real, el servidor puede prohibir la cuenta, desencadenar una alerta silenciosa o redirigir al atacante a un honeypot de algún tipo. De cualquier manera, el servidor sabrá que la base de datos de contraseñas se ha comprometido.
Para verificar si la contraseña es real, el servidor determina el índice del hash de contraseña dado y contacta con otro servidor "seguro" que confirma si este es el índice correcto para este usuario (o un índice de palabras clave).
¿Este método realmente agrega algún beneficio de seguridad de la vida real?
Este es el escenario de ataque del documento, donde se supone que los honeywords deben ayudar:
Archivos robados de hashes de contraseñas: un adversario puede de alguna manera robar los archivos de hashes de contraseñas y resolver muchas contraseñas usando el cómputo de fuerza bruta sin conexión. En general, es posible que pueda robar los archivos hash de contraseñas en muchos sistemas o en un sistema en diferentes momentos.
En este escenario, el atacante obviamente ya ha obtenido acceso al sistema.
- ¿Realmente necesitaría los datos de la contraseña?
- Si pudo acceder al almacén de contraseñas, ¿no podría también acceder al índice "seguro", lo que identifica las contraseñas reales? La distribución de la autenticación en dos servidores no me parece mucho más segura.
- Si el sistema comprometido puede descubrir cuál es el índice correcto, seguramente el atacante también puede.
Tal vez me esté faltando algo en el concepto, pero ¿no sería más útil asegurarse de que las contraseñas estén bien ocultas y que la primera capa de seguridad mantenga al atacante afuera en primer lugar?
¿Merece la pena considerar las palabras clave para ponerlas en una aplicación web de la vida real?