En el trabajo tenemos dos teorías que compiten por las sales. Los productos en los que trabajo utilizan algo así como un nombre de usuario o número de teléfono para saltear el hash. Esencialmente, es algo diferente para cada usuario, pero está disponible para nosotros. El otro producto genera al azar una sal para cada usuario y cambia cada vez que el usuario cambia la contraseña. La sal luego se cifra en la base de datos.La necesidad de ocultar la sal para un hash
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é ocurre desde un punto de vista práctico. Ahora mismo para autenticar a un usuario, el salt debe estar desencriptado y aplicado a la información de inicio de sesión.
Después de pensarlo, simplemente no veo una ganancia de seguridad real con este enfoque. Cambiar la sal de la cuenta a la cuenta, hace que sea extremadamente difícil para alguien intentar aplicar la fuerza bruta del algoritmo de hashing incluso si el atacante sabía cómo determinar rápidamente cuál era para cada cuenta. Esto se basa en la suposición de que las contraseñas son suficientemente fuertes. (Obviamente, encontrar el hash correcto para un conjunto de contraseñas donde son dos dígitos es mucho más fácil que encontrar el hash correcto de contraseñas que son 8 dígitos). ¿Soy incorrecto en mi lógica o hay algo que me falta?
EDIT: Bueno, esta es la razón por la cual creo que es realmente imposible encriptar 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 el sal es 5 y todas las contraseñas están compuestas de letras minúsculas (simplemente hace que las matemáticas sean más fáciles).
Tener una sal diferente para cada entrada significa que no puedo usar la misma tabla de arcoiris (en realidad podría hacerlo técnicamente si tuviera una de tamaño suficiente, pero ignorémosla por el momento). Esta es la verdadera clave para la sal de lo que yo entiendo, porque para descifrar cada cuenta 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 aumenta la longitud/complejidad de la frase hash. Así que estaría reduciendo 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é lo que es la sal. Ahora eso lo hace más fácil, pero todavía muy difícil.
Para encriptar la sal. Si sé que la sal está encriptada, no intentaré descifrarla (suponiendo que sé que tiene un nivel suficiente de encriptación) primero. Yo lo ignoraría. En lugar de tratar de descifrar cómo descifrarlo, volviendo al ejemplo anterior, generaría una tabla de arco iris más grande que contiene todas las claves para el 13^26. Sin saber que la sal definitivamente me retrasaría, pero no creo que agregue la tarea monumental de tratar de descifrar la encriptación de sal primero. Es por eso que no creo que valga la pena. ¿Pensamientos?
Aquí hay un enlace que describe cómo las contraseñas largas llevará a cabo en el marco de un ataque de fuerza bruta: http://www.lockdown.co.uk/?pg=combi
Buena pregunta, Kevin, muy oportuna. No puedo comentar sobre la seguridad, pero hay un golpe de rendimiento para todo este cifrado y descifrado, seguro. – DOK
No necesita ignorar la tabla arcoíris de tamaño decente, esa tabla también hace que la sal encriptada no sea discutible, ya que puede descifrar el hash salado y usarse nuevamente para descifrar el hash original. La buena noticia es que la tabla demoraría probablemente siglos en crearse. – tloach
Lo que me atrapa es que no estoy del todo seguro de que una tabla arcoiris de ese tamaño tarde tanto en crearse. Es una idea absurda, tomar una plataforma de computación distribuida como Kraken (realmente es lo que es) para generarla. ¿Cuánto tiempo tomaría entonces? – kemiller2002