En el trabajo tenemos dos teorías en competencia sobre las sales. Los productos en los que trabajo usan algo como un nombre de usuario o un número de teléfono para agregar sal al hash. Esencialmente algo que es diferente para cada usuario pero que está disponible para nosotros. El otro producto genera aleatoriamente una sal para cada usuario y cambia cada vez que el usuario cambia la contraseña. Luego, la sal se cifra en la base de datos.
Mi pregunta es si el segundo enfoque es realmente necesario. Puedo entender desde una perspectiva puramente teórica que es más seguro que el primer enfoque, pero ¿qué pasa desde un punto de vista práctico? En este momento, para autenticar a un usuario, la sal debe estar desencriptada y aplicada a la información de inicio de sesión.
Después de pensarlo, simplemente no veo una ganancia de seguridad real de este enfoque. Cambiar la sal de una cuenta a otra, todavía hace que sea extremadamente difícil para alguien intentar forzar el algoritmo hash, incluso si el atacante sabía cómo determinar rápidamente qué era para cada cuenta. Esto se basa en la suposición de que las contraseñas son lo suficientemente seguras. (Obviamente, encontrar el hash correcto para un conjunto de contraseñas donde todas son de dos dígitos es significativamente más fácil que encontrar el hash correcto de las contraseñas que son de 8 dígitos). ¿Soy incorrecto en mi lógica o hay algo que me falta?
EDITAR: Bien, aquí está la razón por la que creo que es realmente discutible cifrar la sal. (déjame saber si estoy en el camino correcto).
Para la siguiente explicación, asumiremos que las contraseñas son siempre de 8 caracteres y la sal es 5 y que todas las contraseñas están compuestas por letras minúsculas (solo facilita las matemáticas).
Tener una sal diferente para cada entrada significa que no puedo usar la misma tabla de arco iris (de hecho, técnicamente podría hacerlo si tuviera una de tamaño suficiente, pero ignorémoslo por el momento). Esta es la verdadera clave de la sal por lo que entiendo, porque para romper todas las cuentas tengo que reinventar la rueda, por así decirlo, para cada una. Ahora, si sé cómo aplicar la sal correcta a una contraseña para generar el hash, lo haría porque una sal realmente solo extiende la longitud / complejidad de la frase hash. Así que estaría recortando el número de combinaciones posibles que necesitaría generar para "saber" que tengo la contraseña + sal de 13 ^ 26 a 8 ^ 26 porque sé qué es la sal. Ahora eso lo hace más fácil, pero sigue siendo realmente difícil.
Entonces, encriptar la sal. Si sé que la sal está cifrada, no intentaría descifrarla (suponiendo que sepa que tiene un nivel suficiente de cifrado) primero. Lo ignoraría. En lugar de tratar de descubrir cómo descifrarlo, volviendo al ejemplo anterior, solo generaría una tabla de arco iris más grande que contenga todas las claves para 13 ^ 26. Sin saber que la sal definitivamente me ralentizaría, pero no creo que agregue la monumental tarea de intentar descifrar el cifrado de la sal primero. Por eso no creo que valga la pena. Pensamientos
Aquí hay un enlace que describe cuánto tiempo se mantendrán las contraseñas bajo un ataque de fuerza bruta: http://www.lockdown.co.uk/?pg=combi