(Esto no es un duplicado de la pregunta IMHO ya que se trata más de las diferencias entre un salt y una contraseña: ambas variables se utilizan para generar un hash)
Supongamos que un atacante tiene acceso sin conexión a una base de datos en la que las contraseñas están encriptadas con bcrypt (sin adición de pimientos). Los hashes parecen:
$2y$10$H0mRpD2XJZDguAzxTehwzunRkjUR8lB3O4UGrAGLiqJuvnlWjFA7G
En el que la sal es: H0mRpD2XJZDguAzxTehwzu
y el hash es nRkjUR8lB3O4UGrAGLiqJuvnlWjFA7G
.
El atacante no podrá ejecutar una tabla de arco iris para hacer coincidir los hashes, pero podría calcular las contraseñas comunes utilizando la sal incluida, por lo que la ejecución:
bcrypt("abcd1234", 10, "H0mRpD2XJZDguAzxTehwzu")
producirá:
nRkjUR8lB3O4UGrAGLiqJuvnlWjFA7G
Y ahí tienes! Podría pasar por todas las pruebas de la base de datos "abcd1234" y ser capaz de identificar qué usuarios están usando esa contraseña débil en cuestión de segundos / minutos.
Entonces, ¿qué pasa si solo el hash nRkjUR8lB3O4UGrAGLiqJuvnlWjFA7G
se almacena en la base de datos (sin sal)?
Si el atacante tiene la sensación de que el usuario "abcdefg" podría estar usando la contraseña "abcd1234", ¿cómo podría probar su teoría fuera de línea? Ella tendría que adivinar la sal. ¿Cómo pudo hacerlo ella? ¿Hay algún método más fácil que probar cada combinación? Quizás en ese caso específico no haya suficiente motivación para intentarlo. ¿Pero qué sucede si sospecha que el sistema está utilizando el mismo sistema de sal para todas las contraseñas (ya que algunos hash son iguales)? ¿Qué tan difícil sería para ella romperlo?
ACTUALIZAR
La respuesta de Peleo es cercana a lo que esperaba. Intentaré extenderlo (corríjame si me equivoco):
Entropía :
En Bcrypt, una sal es generalmente de 16 bytes aleatorios (128 bits). Si comparamos eso con una contraseña de la misma longitud, entonces un salt tendrá una entropía mayor que una contraseña, ya que las contraseñas generalmente se limitan a lo que el usuario puede escribir con un teclado.
Esos 16 bytes se codifican en HEX (usando Base64) y se convierten en 22 de longitud. Si los comparamos con una contraseña de 22 caracteres, entonces la contraseña contendrá una mayor entropía (ya que puede incluir símbolos y el alfabeto completo).
Longitud :
Las sales de Bcrypt están limitadas a 16 bytes, mientras que las contraseñas pueden estar limitadas a 72 bytes, dependiendo de la implementación.
Colisión :
2 sales diferentes generarán 2 hashes diferentes, y así las contraseñas. Sin embargo, en algún punto, 2 sales diferentes podrían producir el mismo hash usando la misma contraseña y viceversa. ¿Cuál es la probabilidad para cada uno de esos casos? Eso es algo que tal vez debería preguntar en crypto.SE. Pero lo dejo aquí en caso de que alguien tenga la respuesta.
Diseño :
El algoritmo fue diseñado para proteger contraseñas y no sales. Esto significa que las sales no están destinadas a ser seguras por diseño, lo que sugiere que potencialmente podría haber una manera de obtenerlas sin forzarlas de manera brutal.
Caso ficticio :
Estamos acostumbrados al método de contraseña de usuario para proteger el acceso a un sistema. Pero, ¿qué pasa si pasa algo como esto (por favor, cuéntame, es solo un ejemplo) ?:
La compañía CauseWeWantItThatWay
usa microchips para almacenar un valor único de 22 hexes (que se usará como sal). Cada usuario generará un total de 5 contraseñas o números PIN (4 dígitos cada uno, sí, son perezosos) con esa sal única para acceder a 5 sistemas diferentes.
Ahora asumamos que estoy asignado a uno de esos sistemas y conozco uno de esos números PIN, y de alguna manera tengo acceso a la base de datos. Si se incluyera la sal, sería trivial obtener esos números PIN, pero sin la sal, tendría que descifrarla.
Sé lo que estás pensando. La compañía tiene una implementación de seguridad realmente mala (y deberían quemarse en el infierno). También, que podrían haber usado la "sal" como pimienta y dejar la sal al azar. Entonces, mi pregunta era, en ese caso, ¿sería lo mismo agregar un 22-hex-chars como pimienta que usar esos como sal? Según Peleus, es lo mismo (por lo que no existen atajos para obtener la sal).
Después de todo, no todo el mundo sigue las recomendaciones y el algoritmo le permite establecer el salt, lo que hace que este tipo de escenario sea totalmente posible (aunque no es tan probable ni recomendable).