¿Re-hashing una parte del hash de la contraseña aumenta la seguridad?

0

No soy un experto en seguridad, pero estoy tratando de entender las mejores prácticas actuales para adoptar una política de seguridad para un sitio web que contendrá información confidencial.

En lo que respecta a alguien que intenta acceder a las cuentas de usuario a través de la pantalla de inicio / inicio de sesión, estoy contento de estar familiarizado con la información suficiente para hacer de este un ejercicio inútil.

Sin embargo, también quiero protegerme contra la posibilidad de que la base de datos pueda ser hackeada y que un tercero esté en posesión de todas las contraseñas cifradas.

Es en este punto que no puedo ver ninguna ventaja real con el uso de cualquiera de los métodos de encriptación A5 de MD5, MD5 + Salt, AES en los casos en que la base de datos está pirateada y todas las claves necesarias para probar una contraseña contra cualquier contraseña almacenada. el hash se conserva en la base de datos.

¿No estaría más seguro si tomara un método de cifrado como MD5 y lo usara para cifrar la contraseña del usuario, y luego tomara la cadena cifrada y, a través del código, seleccione los primeros n caracteres del hash y pase eso? a través del cifrado MD5 y el almacenamiento de hash en la base de datos?

es decir, tomar la contraseña "contraseña"

El hash generado MD5 sería 5f4dcc3b5aa765d61d8327deb882cf99

Tomo, por ejemplo, los primeros 14 caracteres 5f4dcc3b5aa765 y los ejecuto a través del cifrado MD5 para obtener un nuevo hash 316e881b8519579949391d6f8424decb que almaceno en la base de datos.

Solo el código sabría cuántos caracteres se estaban utilizando para volver a cifrar el primer código hash. Cualquier pirata informático que no esté en posesión de los datos de la base de datos y del código fuente no podrá comparar los códigos hash utilizando un conjunto de reglas de diccionario, aunque puede haber identificado correctamente que se está utilizando el cifrado MD5.

Todos los métodos de encriptación que he investigado hasta ahora parecen almacenar las claves de encriptación en la base de datos que no parecen brindar mucha protección contra un pirateo de volcado de base de datos.

Es bastante posible que sea ingenuo aquí y no entiendo lo primero acerca de la seguridad, pero cualquier orientación de personas que lo hagan sería apreciada.

    
pregunta Martin C 10.08.2016 - 13:35
fuente

3 respuestas

16
  

Solo el código sabría cuántos caracteres se estaban utilizando para volver a cifrar el primer código hash.

Y aquí es donde está el problema. Justo al principio, solo uno con acceso al código lo sabe. ¿Pero por cuánto tiempo puedes mantener esto en secreto?
Sin darse cuenta, puede publicar su código en GitHub, o hablarlo con amigos y ser escuchado ... tan pronto como el secreto salga, el valor adicional desaparecerá. Y necesita usar un método diferente, lo que implica tener que pedir a todos los usuarios que vuelvan a ingresar su contraseña.

Se llama Principio de Kerckhoff :

  

Un criptosistema debe ser seguro, incluso si todo sobre el sistema, excepto la clave, es de conocimiento público.

Las únicas cosas que deberían ser secretas, son las cosas que puedes cambiar rápidamente. Para que puedas responder adecuadamente cuando se filtre el secreto.

Dicho esto, MD5 está desactualizado; considera usar bcrypt para el hashing en su lugar.

    
respondido por el S.L. Barth 10.08.2016 - 13:41
fuente
6

Tenga en cuenta que los algoritmos que se utilizan para la validación de la contraseña almacenada con una contraseña escrita deben ser algoritmos de hash, no algoritmos de cifrado.

El primero es de una manera.

es decir, foo -> acbd18db4cc2f85cedef654fccc4a4d8 no se puede revertir, ya que es posible que acbd18db4cc2f85cedef654fccc4a4d8 sea el hash de otros valores también.

Este último es bidireccional.

foo -password-> cC0rVBKPXwDeUuXjyrZjLQ== -password-> foo

Solo hay un texto sin formato, siempre que se use la misma clave.

Ahora volvamos al hash ...

El punto de un hash de contraseña es no ocultar la contraseña. El objetivo de un hash de contraseña es realizar búsquedas de una manera, sin embargo, esto lo hace vulnerable a la búsqueda de contraseñas. Es decir, un atacante podría probar la contraseña foo fuera de línea a través del mismo algoritmo para averiguar si hash a acbd18db4cc2f85cedef654fccc4a4d8 . Si es así, pueden intentar un inicio de sesión en línea.

Debido a que un atacante puede hacer esto razonablemente rápido, usa bcrypt para que demore 10.000 veces más en probar cada uno adivina la contraseña.

Esto es lo que detiene a un atacante, no seguridad a través de la oscuridad al ofuscar el cálculo de hash. Lo más probable es que un atacante experto pueda obtener el algoritmo de contraseña de alguna manera, ya sea ingresando a su base de código o descubriendo si se ha filtrado en algún lugar (por ejemplo, en un sistema de código abierto, no tiene ninguna posibilidad). En el peor de los casos, un atacante podría registrarse para múltiples cuentas en su sistema y observar cómo hash su contraseña. Tarde o temprano lo descubrirán, y es probable que esto sea mucho antes de que puedan ejecutar sus conjeturas de contraseña a través de un algoritmo seguro como bcrypt.

    
respondido por el SilverlightFox 10.08.2016 - 15:32
fuente
3

El uso de los métodos estándar de decir CrypticHash (contraseña, sal, rondas / costo) es un enfoque mucho más seguro por muchas razones, incluso si su código fuente y su base de datos se filtraron.

En tu enfoque sería bastante fácil atacar. Todo lo que tendría que hacer, una vez que su código / base de datos se filtró, es la fuerza bruta sobre un conjunto de caracteres hexadecimales (16 caracteres), con una longitud de 14 hasta que encuentre "5f4dcc3b5aa765" como una coincidencia, lo que podría llevar algún tiempo, pero Usted, md5 sería bastante rápido para hacer esto posible. Luego, todo lo que tengo que hacer es encontrar CUALQUIER hash md5 que comience con "5f4dcc3b5aa765xxxxxxxxxxxxxxxx" y esto sería aún más fácil de encontrar con tablas de arco iris.

    
respondido por el James 10.08.2016 - 15:02
fuente

Lea otras preguntas en las etiquetas