No creo que una sal derivada única sea peor que una sal única aleatoria. El único propósito de un salt es confundir el descubrimiento de las contraseñas cuando se obtiene la tabla de hashes.
Para que una contraseña se descubra a partir de un hash, tiene que ser algo que se pueda adivinar en el sentido de que se encontró en una tabla de arco iris existente, o (por ejemplo) idéntica a otra contraseña en el conjunto de datos.
+--------------------------------------------------+
| password | hash |
+---------------+----------------------------------+
| freaky | 33ca4223307e2fa4fd77c394ceb4e37b |
| freaky | 33ca4223307e2fa4fd77c394ceb4e37b | <- identical to previous
| Freaky Friday | 852d2f614f08a63911f8944df6df40df |
| ...
En vista de eso, permítame reafirmar el propósito con un grano de precisión adicional:
El único propósito de un salt es confundir el descubrimiento de contraseñas fáciles de adivinar cuando se obtiene la tabla de hashes.
Incluso la peor sal posible apoya ese objetivo bastante bien. Digamos, para argumentar, que debía agregar sal a cada fila con los 8 bytes predecibles y bastante obvios " Salted__
" (observando, por favor, no haga esto).
En Crackstation.net hoy ni siquiera encuentro " Salted__123456
", por lo que probablemente el atacante tendría que identificar o crear una tabla de arco iris personalizada antes de poder comenzar el ataque. Pero tenga en cuenta que las contraseñas débiles como " freaky
" seguirían teniendo el mismo hash y, por lo tanto, seguirían siendo un foco inicial para que el atacante intente las "contraseñas de la X superior" o lo que sea. Y una vez que se construyó la tabla del arco iris, el ataque podría continuar durante todo el conjunto de datos.
La siguiente opción de sal más poderosa, por lo tanto, sería única por fila. Eso significaría que el atacante tendría que construir una tabla nueva de arco iris para cada contraseña. Esto significa que si el atacante solo está detrás de uno de sus usuarios, el esfuerzo es el mismo que el sal estático anterior. Pero, si el atacante quiere su mesa completa, la complejidad del tiempo de agrietamiento ha aumentado.
No creo que haga una diferencia si la sal es única y aleatoria; o simplemente único.
Imagina que eres el atacante y tienes los hashes. Sabes que vas a tener que construir una tabla de arco iris para atacar a cada fila. ¿Importa cuáles son los valores de sal? Si ve el valor de sal único en la tabla de hashes; o si sabe que la sal es el customer_id o lo que sea, no cambia la cantidad de trabajo que tiene que hacer.
Luego imagina que eres el atacante y NO tienes los hashes. ¿Qué sucede si se entera de que las contraseñas están incluidas en el ID del cliente? Supongo que esto significa que usted podría calcular previamente todas las tablas del arco iris antes de realizar un robo de hashes, pero esto no disminuye la parte difícil de su carga de trabajo, por lo que diría que es insignificante.