Las colisiones de la función de hash no son relevantes para el hashing de contraseñas. Todo el hashing de contraseñas funciona en la resistencia de preimagen, no en las colisiones. Puede olvidarse de todas las colisiones cuando se habla de hash de contraseñas.
Salt las "colisiones" pueden importar pero se llaman mejor "reutilización de sal". Evita la reutilización de la sal utilizando sales aleatorias suficientemente grandes (16 bytes son suficientes; GUID son buenas sales).
No puedes cambiar el salt sin tener acceso a la contraseña. Si pudieras hacerlo, entonces el atacante también podría hacerlo, y anular los beneficios de las sales. Esto sería una seria debilidad de la función hash.
No tiene sentido cambiar la sal. El valor agregado de la sal único es en qué se diferencia de otros valores de sal. No hay ganancia en reemplazar un valor de sal con otro valor; puede haber una pérdida neta si el nuevo valor es igual a otro valor de sal, lo que lleva a la reutilización de sal.
Es decir, cuando utiliza sales aleatorias, está asegurando la ausencia de reutilización de sal heurísticamente: si alguna vez genera sales de s , en un espacio de tamaño n (por ejemplo, < em> n = 2 128 para sales de 16 bytes aleatorias), entonces el riesgo de reutilización de sal permanece bajo siempre que s 2 es pequeño con respecto a n . Básicamente, con sales de 16 bytes, elegidas al azar de un buen PRNG , tiene espacio para aproximadamente 2 64 instancias de generación de sal. Si cambia las sales con regularidad, más a menudo de lo estrictamente requerido, entonces está incrementando s , es decir, disminuyendo su espacio para respirar. Afortunadamente, 264 es un número enorme, por lo que suponiendo que haga todo lo demás correctamente, luego reemplace las sales cada semana (cuando el usuario inicia sesión, porque no puede hacerlo sin la propia contraseña) no implicará un riesgo adicional significativo. Será inútil, pero inofensivo.
Si, a partir de varios valores hash con varias sales y la misma contraseña, el atacante puede calcular la propia contraseña o reducir su espacio clave (con mayor éxito que el simple riesgo de reutilización de sal explicado anteriormente), entonces esto es un criptográfico. debilidad de la función de hashing de contraseña. No se conoce tal debilidad por las funciones de hash de contraseña habituales (bcrypt, PBKDF2 ...).