A estas alturas, todos deberíamos saber utilizar bcrypt o scrypt para almacenar hashes de contraseña con sal con un número suficiente de rondas. (Ver, por ejemplo, enlace ) La lección: asuma que su base de datos de autenticación estará comprometida en algún momento.
También debemos saber cómo diseñar cookies de autenticación de usuarios que cumplan con el nivel de seguridad y confidencialidad que nuestra aplicación requiere para usar HMAC con claves por usuario. El artículo más citado que he visto es enlace .
Sin embargo, cada documento y propuesta que he leído que aborda la autenticación segura de los usuarios aborda un conjunto de inquietudes diferentes y superpuestas (por ejemplo, escuchas ilegales, manipulación y ataques de repetición) y, a menudo, tienen como objetivo el almacenamiento de elementos opacos. datos de usuario también.
No puedo encontrar ninguna que aborde cómo hacer que las cookies de autenticación de usuarios del lado del cliente sean resistentes a los ataques, incluso después de que la base de datos de autenticación del servidor haya sido comprometida.
El documento anterior, por ejemplo, solo se basa en el secreto de la clave del servidor. Muchas implementaciones que he visto también generan un token por usuario que se utiliza en el HMAC y se almacena en el servidor. En cualquier caso, una vez que se comprometa el secreto del servidor, es trivial falsificar las credenciales de cualquier usuario.
¿Existen referencias o implementaciones conocidas que cubran este escenario para aplicaciones web típicas (es decir, fuera de los entornos corporativos y bancarios)?