ACTUALIZACIÓN: Recientemente aprendí de esta pregunta que en toda la discusión a continuación, yo (y estoy seguro de que otros también lo hicieron) fue un poco confuso: lo que sigo llamando una tabla de arco iris, de hecho se llama una tabla hash. Las tablas de arco iris son criaturas más complejas y en realidad son una variante de Hellman Hash Chains. Aunque creo que la respuesta sigue siendo la misma (ya que no se reduce al criptoanálisis), parte de la discusión puede estar un poco sesgada.
La pregunta: " ¿Qué son las tablas arcoíris y cómo se usan? "
Por lo general, siempre recomiendo usar un valor aleatorio criptográficamente fuerte como salt, para usarlo con funciones hash (por ejemplo, para contraseñas), como para protegerse contra ataques de Rainbow Table.
Pero, ¿es realmente criptográficamente necesario que la sal sea aleatoria? ¿Sería suficiente algún valor único (único por usuario, por ejemplo, userId) a este respecto? De hecho, evitaría el uso de una sola Tabla Rainbow para descifrar todas (o la mayoría) de las contraseñas del sistema ...
Pero, ¿la falta de entropía realmente debilita la fuerza criptográfica de las funciones hash?
Tenga en cuenta que no estoy preguntando por qué usar sal, cómo protegerla (no es necesario), usar un solo hash constante (no hacerlo) o qué tipo de función hash usar.
Si la sal necesita entropía o no.
Gracias a todos por las respuestas hasta ahora, pero me gustaría centrarme en las áreas con las que estoy (un poco) menos familiarizado. Principalmente implicaciones para el criptoanálisis: lo agradecería más si alguien tuviera alguna información del punto de vista cripto-matemático.
Además, si hay vectores adicionales que no se han considerado, también es una gran entrada (ver el punto de @Dave Sherohman en múltiples sistemas).
Más allá de eso, si tiene alguna teoría, idea o mejor práctica, respalde esto con pruebas, escenarios de ataque o evidencia empírica. O incluso consideraciones válidas para compensaciones aceptables ... Estoy familiarizado con las Mejores Prácticas (B mayúscula P) sobre el tema, me gustaría demostrar qué valor proporciona realmente.
EDITAR: Algunas respuestas realmente buenas aquí, pero creo que, como dice @Dave, se reduce a Rainbow Tables para nombres de usuarios comunes ... y posibles nombres menos comunes también. Sin embargo, ¿qué pasa si mis nombres de usuario son únicos a nivel mundial? No es necesariamente único para mi sistema, sino para cada usuario, por ejemplo, dirección de correo electrónico.
No habría ningún incentivo para construir un RT para un solo usuario (como enfatizó @Dave, la sal no se mantiene en secreto), y esto aún evitaría la agrupación en clústeres. El único problema sería que podría tener el mismo correo electrónico y contraseña en un sitio diferente, pero la sal no lo evitaría de todos modos.
Entonces, todo se reduce al criptoanálisis: ¿ES la entropía necesaria o no? (Mi pensamiento actual es que no es necesario desde el punto de vista del criptoanálisis, sino por otras razones prácticas).