BCrypt hash como ID de tabla de base de datos

0

En mi aplicación web, tengo que almacenar valores hash (usando BCrypt) como ID para una tabla de base de datos.
La entrada para cada valor de hash es una cadena única.
Me preocupan las posibles colisiones.
1) ¿Cuál es la posibilidad de tener una colisión (lo que causará una excepción de base de datos, al insertar una nueva fila con el ID colisionado generado)?
2) ¿Cuáles son los medios para prevenirlo?

Por favor, no avise, que los valores de hash no se pueden usar como ID.
Sin embargo, no me limito a BCrypt únicamente (la alternativa es aceptable).
La tarea principal es tener valores hash seguros únicos.

    
pregunta Sabine 24.06.2017 - 18:58
fuente

1 respuesta

0

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.

    
respondido por el Pascal 26.06.2017 - 01:24
fuente

Lea otras preguntas en las etiquetas