172 votos

¿Dónde se almacenan las cadenas de sal?

Yo siempre he usado una adecuada por la entrada de la sal de la cadena cuando el hashing de contraseñas para la base de datos de almacenamiento. Para mis necesidades, el almacenamiento de la sal en la base de datos junto a la contraseña con algoritmo hash siempre ha funcionado bien.

Sin embargo, algunas personas recomiendan que la sal se almacena por separado de la base de datos. Su argumento es que si la base de datos está comprometido, un atacante puede construir un arco iris de mesa tomando un particular sal cadena en cuenta, para poder romper una cuenta en un momento. Si esta cuenta tiene privilegios de administrador, entonces él puede incluso no es necesario crackear cualquier otros.

Desde una perspectiva de seguridad, vale la pena que sales de la tienda en un lugar diferente? Considere la posibilidad de una aplicación web con el código del servidor y base de datos en la misma máquina. Si las sales se almacenan en un archivo plano en el equipo, es probable que si la base de datos se ve comprometida, las sales de archivo va a ser demasiado.

Hay soluciones recomendadas esto?

189voto

Amber Puntos 159296

El punto de las tablas rainbow es que están creadas de antemano y distribuido masivamente para ahorrar tiempo de cálculo para los demás, lleva el mismo tiempo, para generar tablas de arco iris sobre la marcha a medida que se iba a romper la contraseña+sal combinación directamente (ya que efectivamente lo que se le hace a la hora de generar las tablas rainbow, es pre-ejecución de los cálculos de fuerza bruta el valor de hash), por lo tanto el argumento de que por el conocimiento de la sal, alguien podría "generar una rainbow table" es espuria.

En realidad no hay punto en el almacenamiento de sales en un archivo separado, siempre y cuando estén en función de cada usuario - el punto de la sal es simplemente hacer que una rainbow table no se puede romper todos contraseña en la base de datos.

19voto

Andrew Medico Puntos 11338

A menudo, se antepone el hash y almacenados en el mismo campo.

No hay necesidad de almacenarlos por separado - el punto es el uso de un azar de sal por cada contraseña, de modo que un único arco iris de la tabla no puede ser utilizado en contra de su conjunto de valores hash de las contraseñas. Con random sales, un atacante debe de fuerza bruta cada hash por separado (o calcular un arco iris de mesa para todas las posibles sales - mucho más trabajo).

Si usted tuvo una más seguro de la ubicación de almacenamiento, tendría sentido sólo almacena el hash de allí.

18voto

Ibraheem Puntos 497

Voy a dar un poco diferente sobre esto.

Yo siempre almacén de la sal se mezcla con la salada-valor hash de la contraseña.

Por ejemplo, voy a poner la primera mitad de la sal antes de la salada-hash de la contraseña, y la última mitad de la sal después de la salada-hash de la contraseña. La aplicación es consciente de este diseño por lo que puede recuperar estos datos, y obtener la sal y salado-valor hash de la contraseña.

Mi razón de este planteamiento:

Si la contraseña/hash de los datos se ve comprometida y cae en manos de un atacante, el atacante no sabe lo que la sal es a partir de la observación de los datos. De esta manera, un atacante no puede, prácticamente, realizar un ataque de fuerza bruta para obtener una contraseña que coincide con el hash, ya que él no sabe el hash, para empezar y no tiene manera de saber qué partes de los datos son las partes de la sal, o partes de el salado-valor hash de la contraseña (a menos que él no conocía a la aplicación de la lógica de autenticación).

Si el salado-valor hash de la contraseña se almacena como-es, entonces, un ataque de fuerza bruta se puede realizar para obtener un password que cuando salado y hash produce los mismos datos como el salado-valor hash de la contraseña.

Sin embargo, por ejemplo, incluso si el salado-valor hash de la contraseña se almacena como-es, pero pre-pendiente con una aleatorio simple byte, mientras que el atacante es consciente de que este primer byte para ser desechados, esto también podría aumentar la dificultad del ataque. Su aplicación iba a conocer a descartar el primer byte de los datos cuando se utiliza para autenticar el usuario.

La conclusión de este..

1) no almacenar los datos que su aplicación de autenticación utiliza en su forma exacta.

2) Si es posible, mantenga su lógica de autenticación secreto para una mayor seguridad.

Ir un paso más allá..

Si usted no puede mantener la aplicación de la lógica de autenticación secreto - hay mucha gente que sabe de que sus datos se almacenan en la base de datos. Y supongamos que usted ha decidido para almacenar la salada-hash de contraseña mezclados junto con la sal con un poco de sal anteponiendo el salado-valor hash de la contraseña, y el resto de la sal de anexarlo.

A la hora de generar el azar de la sal, también se podría decidir al azar ¿cuál es la proporción de la sal que usted va a la tienda antes de/después de la salada-valor hash de la contraseña.

Por ejemplo, se genera un random de sal de 512 bytes. Agregar la sal a la contraseña, y obtener el SHA-512 hash de su salado-contraseña. Usted también genera un entero aleatorio 200. A continuación, almacene los 200 primeros bytes de la sal, seguido por el salado-valor hash de la contraseña, seguido por el resto de la sal.

Cuando la autenticación de la contraseña de un usuario de entrada, su solicitud pasará por encima de la cadena, y suponer que la primera 1 byte de los datos es el primer byte 1 de la sal, seguido por el salado-hash. Este paso va a fallar. La aplicación seguirá usando los 2 primeros bytes de los datos como los 2 primeros bytes de la sal, y repetir hasta que un resultado positivo se encuentra después de usar los primeros 200 bytes como los primeros 200 bytes de la sal. Si la contraseña es incorrecta, la aplicación seguirá para tratar todas las permutaciones hasta que no se encuentra nada.

Las ventajas de este enfoque:

Aumento de la seguridad - incluso si su lógica de autenticación es sabido, la lógica exacta es desconocida en tiempo de compilación. Es prácticamente imposible realizar un ataque de fuerza bruta, incluso con el conocimiento de la lógica exacta. El aumento de las longitudes de sal aumentará la seguridad más allá.

Las desventajas de este enfoque:

Desde el exacto lógica se infiere en tiempo de ejecución, este enfoque es muy intensivo de la CPU. La más larga es la longitud de la sal, el más intensivo de la CPU, este enfoque se convierte.

La autenticación de contraseñas incorrectas implicará el más alto costo de CPU. Esto puede ser contraproducente para los pedidos legítimos, pero aumenta la seguridad contra los atacantes.

Este enfoque puede ser implementada de diversas maneras, y puede ser aún más segura mediante el uso de ancho variable de sales y/o salados-los hash de las contraseñas.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X