Si está utilizando bcrypt, además del texto sin formato / contraseña, hash, bcrypt requiere una sal y un factor de trabajo. Supongo que mantienes constante el factor trabajo, pero no dijiste nada sobre la sal.
En general, la probabilidad de colisión de una buena función hash depende del tamaño de la salida del hash. La paradoja de cumpleaños hace que las colisiones sean mucho más frecuentes de lo que permite su intuición. una aproximación (muy aproximada) es tomar la raíz cuadrada del número de salidas posibles (llamar al resultado n ) y suponer que verá una colisión después del hash n entradas.
Entonces, si mantuvieras la sal constante, obtendrías 184 bits de espacio de salida, lo que se traduce en aproximadamente 1 colisión en 2 entradas hash 92 . Si utilizara un sal aleatorio en cada entrada, tendría 128 bits adicionales de espacio de salida, lo que mejoraría aún más la resistencia a la colisión.
Tenga en cuenta que estas son probabilidades , no garantías . Así que podrías producir tu primera colisión mucho antes de lo esperado, aunque sea poco probable. Aún así, probablemente deberías planear colisiones. Si realmente produjo una colisión, puede cambiar la sal y volver a intentarlo hasta que esté libre de colisiones; eso es lo suficientemente simple como para no complicar mucho su código.
Este artículo le proporciona los cálculos para calcular las probabilidades de colisión de hash.