¿Ninguna función hash devuelve el mismo valor para la misma entrada?

Casi todas las funciones principales de hash están sujetas a “colisiones” como no lo hizo anteriormente: la creación de un valor de hash idéntico para dos entradas diferentes.

Sin embargo, la probabilidad estadística de que esto suceda es bastante remota – 1/2 ^ 218 – en otras palabras,

1 en 340,282,366,920,938,463,463,374,607,431,768,211,456 basado en una posibilidad aleatoria completa.

Ahora, eso cambia considerablemente si mantiene todos los hashes, y no solo compara dos hashes generados aleatoriamente entre sí. Entonces, necesitaría generar 2 ^ 64 hashes antes de alcanzar un 50% de probabilidad de colisión. Eso es 18,446,744,073,709,551,616 hashes.

Entonces … sí, es posible, pero también es bastante remoto.

Nota: estos números no son míos: ¿cuántos elementos aleatorios antes de MD5 producen colisiones?

Además, para evitar el tipo de colisión que le preocupa aquí (mismos valores = mismo hash), la mayoría de los sitios usan algo conocido como hash “salado”, que combina algún valor pseudoaleatorio con el valor estático para crear el hash . Por lo tanto, pueden tomar el valor UNIX de fecha / hora de su registro (o el último cambio de contraseña) y agregarlo a su contraseña antes de cifrarla. Esto garantiza que el valor hash de mi contraseña no sea el mismo que el valor hash de su contraseña, incluso si el contenido es idéntico. Y, suponiendo que almacenen el valor pseudoaleatorio en algún lugar, pueden compararlo limpiamente al iniciar sesión.