Tengo dificultades para entender cómo una sal que se agrega a un hash ayuda a mejorar la seguridad cuando una base de datos de contraseñas u otra información importante se ve comprometida.¿Alguien puede explicar cómo las sales ayudan a almacenar contraseñas hash?
Si la sal es, por ejemplo, "Hola", y se adjunta a la contraseña "contraseña", entonces la sal y la contraseña se almacenan juntos, "hellopassword" y hash para producir:
94e66f94517d606d5ad6d9191b980408952f2ed2 (sha1)
con la sal luego anexada:
hello$94e66f94517d606d5ad6d9191b980408952f2ed2
¿Cómo es esto más seguro? El atacante conoce la sal, por lo que ahora puede calcular las contraseñas con poca dificultad adicional ... ¿verdad? ¿O estoy básicamente malentendiendo algo?
Normalmente no agrega la sal después del sha1, como lo hizo en su ejemplo. En su lugar, agregaría la sal a la contraseña 'salt $ password' y generaría un sha1 a partir de ese '94e66f94517d606d5ad6d9191b980408952f2ed2'. De esta forma, la sal y la contraseña nunca se exponen en ninguna estructura de datos. – tidwall
¿Cómo mantendría la sal en secreto? ¿Lo tendría como un valor secreto codificado en el programa? –
No es necesario mantener la sal en secreto; de hecho, todos los esquemas de hash de contraseñas de Linux que usan sal (que son todos los comunes) añaden la sal al hash tanto como lo has hecho. El trabajo principal de Salt (hacer que las tablas del arco iris sean inviables) se logra independientemente de si el atacante conoce la sal o no, y tenerlo almacenado con la contraseña facilita cambiar la sal a voluntad sin tener que hacer que todos los usuarios restablezcan sus contraseñas. Incluso podría tener una sal diferente para cada contraseña. – cHao