Esto debería estar bien.
Voy a dividir tu pregunta en dos partes:
1. ¿Cómo funciona bcrypt en términos de uso de sal & almacenamiento?
Las sales se utilizan por varios motivos, principalmente para evitar ataques a la tabla del arco iris y hacer hashes únicos para contraseñas no únicas.
Las tablas de arco iris son enormes diccionarios de hashes y su texto plano. La idea es buscar el hash y buscar el texto plano asociado. Para dificultar esto, cada contraseña tiene un valor único, lo que garantiza que cada contraseña se debe descifrar por separado.
Si dos usuarios tienen la misma contraseña, sin sal, los hashes serán los mismos. Esto nos abre a los ataques casuales. Si dos usuarios tienen la misma contraseña, pero diferentes sales, los hashes serán diferentes.
Lo que pasa con las sales es que puede almacenarlas en texto sin formato , porque no es necesario que estén Más secreto que tus hashes de contraseña fuerte. Como tal, bcrypt simplemente almacena la sal en texto sin formato dentro del hash:
$2a$05$TwentyTwoCharsForASalt$e2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
Esto se divide en los siguientes tokens:
- El prefijo
2a
para identificar el hash como una cripta pez globo (es decir, bcrypt)
- Un factor de trabajo de dos dígitos (generalmente limitado de 04 a 31)
- Un valor de sal de 22 caracteres, de los valores
a-z A-Z 0-9 . /
- El valor de hash.
Como tales, los parámetros necesarios para verificar el hash (incluida la sal) se almacenan dentro de la propia cadena de hash. Cuando se llama a la función de verificación, valida el prefijo, extrae el factor de trabajo y la sal, calcula el hash de la contraseña dada (utilizando el factor de trabajo y la sal) y compara el resultado con el hash almacenado en la cadena de hash dada.
2. ¿Puedo hacer esto en un escenario de equilibrio de carga?
Sí. No hay problemas aquí en absoluto. Simplemente calcule el hash en una máquina e insértelo en la base de datos. No tiene sentido tratar de distribuir una sola operación de hash en múltiples máquinas utilizando voodoo en la nube. Solo modifique su factor de trabajo para que se ajuste a sus requisitos de rendimiento y seguridad, y termine con él. Si sus servidores no pueden soportarlo, elimine el factor de trabajo en su código de creación de hash. Dado que se almacena en el hash, los nuevos hash utilizarán automáticamente el valor más bajo y los hashes antiguos no se verán afectados.
Si realmente realmente necesita hacerlo en varios servidores, configure un sistema de distribución de trabajo para que cada hash se calcule en una casilla disponible. Sin embargo, en ese punto yo diría que tienes problemas más grandes que solo las contraseñas de hash.
Los problemas de concurrencia en su sistema de base de datos no están relacionados con la función hash que está usando, por lo que si tiene problemas con eso, le sugiero que publique una pregunta en Administradores de bases de datos .