El artículo de Coda Hale "Cómo almacenar una contraseña de forma segura" afirma que:
bcrypt tiene sales incorporadas para prevenir ataques de mesa arcoiris.
Cita este documento , que dice que en la implementación de OpenBSD de bcrypt
:
OpenBSD genera la sal bcrypt de 128 bits a partir de una secuencia de claves arcfour (arc4random (3)), sembrada con datos aleatorios que el núcleo recopila de los tiempos del dispositivo.
No entiendo cómo puede funcionar esto. En mi concepción de una sal:
- Debe ser diferente para cada contraseña almacenada, de modo que se deba generar una tabla de arcoíris separada para cada
- Debe almacenarse en algún lugar para que sea repetible: cuando un usuario intenta iniciar sesión, tomamos su intento de contraseña, repetimos el mismo procedimiento de sal y hash que hicimos cuando originalmente almacenamos su contraseña y comparamos
Cuando uso Devise (un administrador de inicio de sesión de Rails) con bcrypt, no hay una columna de sal en la base de datos, así que estoy confundido. Si la sal es aleatoria y no se almacena en ningún lado, ¿cómo podemos repetir de manera confiable el proceso de hash?
En resumen, ¿cómo puede bcrypt tener sales incorporadas ?