Hashing vs “cifrado unidireccional”

9

Al trabajar en una aplicación de sitio web, un amigo y yo preguntamos a un experto en seguridad (trabaja en IBM) cómo manejar el almacenamiento de contraseñas. Después de horas de búsquedas en Google (lo que resultó en horas de exploración de security.stackexchange.com), determiné que tener una base de datos de usuarios con la sal en la base de datos es seguro, siempre que sea una sal por usuario y un algoritmo de hashing lento. / p>

El experto en seguridad dijo que si el DB estaba comprometido, todo estaba comprometido, lo cual es cierto. Sugirió "una forma de cifrado", que ... Realmente no entiendo. ¿El hash no es, por definición, una forma, mientras que el cifrado, por definición, no lo es?

Si alguien pudiera aclarar esto, sería genial.

    
pregunta Awesomolocity 02.02.2015 - 03:44
fuente

3 respuestas

11

Estás en lo correcto. El hash no es invertible y el cifrado es. El experto en seguridad está hablando a través de su sombrero.

El "pimiento" del que habla cpast es la clave de un hash con clave. En ese caso, hay tres componentes en la entrada al algoritmo hash: la contraseña, el salt y la clave. Si la base de datos está comprometida, la sal está comprometida, pero la clave no lo está. Si la clave es de una longitud no trivial, como 128 bits, probablemente no sea posible recuperar la contraseña del hash y del salt solo. (Estrictamente hablando, es un problema "intratable". Uno sabe cómo hacerlo, pruebe todos los valores clave posibles, uno no puede hacerlo en un tiempo razonable).

    
respondido por el Bob Brown 02.02.2015 - 05:00
fuente
4

Supongo que el término "cifrado unidireccional" se remonta a los días en que no estaba disponible la función criptográfica hash, así que para obtener un hash de contraseña en los sistemas Unix, por ejemplo, se usó una función de cifrado (DES ). Sin embargo, en lugar de proporcionar una clave fija para cifrar la contraseña (uso normal de este algoritmo, pero que permitiría descifrar la contraseña usando esta misma clave), la contraseña se usó como clave y como datos para cifrar.

De esta manera, se logró un cifrado de una sola vía ya que no había manera de descifrar la contraseña sin saberlo.

Luego, pasó el tiempo, muchas personas, incluidos matemáticos altamente calificados e ingenieros de seguridad de alto perfil, trabajaron en el tema y nos brindaron mejores herramientas para cada necesidad (aquí: funciones de hashing de contraseñas). Por lo tanto, hoy en día, nadie debería intentar jugar con los algoritmos existentes para usarlos de manera inapropiada (se utiliza un cifrado para cifrar texto y no para producir un hash).

    
respondido por el WhiteWinterWolf 15.04.2015 - 11:04
fuente
3

En la conversación técnica estándar, "cifrado unidireccional" significa hash. Si bien el hash técnico es una operación distinta del cifrado, ambos son "primitivos criptográficos" y es común (aunque técnicamente incorrecto) referirse a todo cifrado como cifrado. Ser pedante con tu colega sobre este punto es poco probable que te gane algún amigo. Cuando hablo con personas que no son especialistas en seguridad, por lo general utilizo la frase "cifrado unidireccional" como se entiende más ampliamente.

Además, es posible convertir cualquier operación de hash de bloque en un cifrado simétrico, y cualquier cifrado simétrico en una operación de hash de bloque. Hay algo de información sobre Wikipedia y Bruce Schneier lo analiza con más detalle en su libro "Applied Cryptography".

    
respondido por el paj28 04.02.2015 - 17:10
fuente

Lea otras preguntas en las etiquetas