La necesidad de esconder la sal para un hachís.
En el trabajo tenemos dos teorías que compiten por las sales. Los productos en los que trabajo utilizan algo como un nombre de usuario o un número de teléfono para agregar el hash. Esencialmente, algo que es diferente para cada usuario pero 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. La sal se encripta en la base de datos.
Mi pregunta es si el segundo enfoque es realmente necesario? Desde una perspectiva puramente teórica, puedo entender que es más seguro que el primer enfoque, pero desde un punto de vista práctico. Ahora mismo para autenticar a un usuario, el salt debe estar sin encriptar y aplicarse a la información de inicio de sesión.
Después de pensarlo, no veo un beneficio real de seguridad con este enfoque. Cambiar la sal de una cuenta a otra, todavía hace que sea extremadamente difícil para alguien intentar forzar el algoritmo de hash, incluso si el atacante era consciente de cómo determinar rápidamente qué era para cada cuenta. Esto se da por supuesto que las contraseñas son lo suficientemente fuertes. (Obviamente, encontrar el hash correcto para un conjunto de contraseñas donde están todos los dos dígitos es mucho más fácil que encontrar el hash correcto de las contraseñas que tienen 8 dígitos). ¿Soy incorrecto en mi lógica, o hay algo que me estoy perdiendo?
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 siempre tienen 8 caracteres y la sal es 5 y que todas las contraseñas están compuestas por letras en minúsculas (lo que facilita las matemáticas).
Tener una sal diferente para cada entrada significa que no puedo usar la misma tabla de arco iris (en realidad, técnicamente podría si tuviera una de tamaño suficiente, pero ignoremos eso por el momento). Esta es la verdadera clave de la sal de lo que entiendo, porque para descifrar todas las cuentas tengo que reinventar la rueda por así decirlo para cada una. Ahora, si sé cómo aplicar el salt correcto a una contraseña para generar el hash, lo haría porque un salt realmente solo extiende la longitud / complejidad de la frase hash. Por lo tanto, reduciría el número de combinaciones posibles que necesitaría generar para "saber". 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 muy difícil.
Así que en el cifrado de la sal. Si sé que la sal está encriptada, no intentaría descifrarla (asumiendo que sé que tiene un nivel de encriptación suficiente) primero. Yo lo ignoraría. En lugar de tratar de averiguar cómo descifrarlo, volviendo al ejemplo anterior, solo generaría una tabla arco iris más grande que contiene todas las claves para el 13 ^ 26. No saber que la sal definitivamente me ralentizaría, pero no creo que agregue la tarea monumental de tratar de descifrar el cifrado de sal primero. Por eso no creo que valga la pena. ¿Pensamientos?
Aquí hay un enlace que describe cuánto tiempo durarán las contraseñas bajo un ataque de fuerza bruta:http://www.lockdown.co.uk/?pg=combi