"hash doble" con 2 funciones hash diferentes

8

Está haciendo algo como esto

sha256(sha512(password+salt))

Menos seguro que simplemente haciendo

sha256(password+salt)

He oído que aumentará las posibilidades de colisión.

Puedo pensar en 3 razones para hacer esto

  1. Es menos probable que un hacker tenga una tabla de arco iris para ella
  2. sha256 devuelve una cadena más corta y luego sha512 (ahorrar espacio en la base de datos)
  3. Tomará más tiempo calcular el hash
pregunta James T 14.02.2012 - 00:45
fuente

6 respuestas

7

Esto se siente como reinventar la rueda, y dudo que logre algún aumento tangible de seguridad. Los diseñadores de esas funciones realmente consideraron todos esos aspectos al crear esas funciones hash seguras.

  1. La adición de sal ayuda a luchar contra la mesa del arco iris. Usar dos funciones hash en lugar de una es inútil, ya que todavía permite el cálculo de una tabla de arco iris. Solo una buena sal aleatoria impide que un atacante lo haga.
  2. Si sha256 produce la longitud correcta para ti, entonces úsala. No estás ganando mucho usando sha512 de antemano. Su espacio de búsqueda / entropía depende principalmente de la contraseña de todos modos.
  3. Esto también es despreciable. Si desea aumentar la computación, tendría que usar una función hash como bcrypt que agrega una carga de trabajo computacional. Las funciones de hash son generalmente muy rápidas.
respondido por el Yoav Aner 14.02.2012 - 00:53
fuente
5

Las colisiones no son relevantes para el hashing de contraseñas. Olvídate de las colisiones. La seguridad aquí se basa en la resistencia a preimágenes , no en colisiones.

Sobre tus "tres razones":

  1. Es menos probable que el atacante tenga una tabla de arco iris: debido a que está utilizando sales, el atacante no tiene tablas de arco iris, ni ningún otro tipo de tabla precomputada. Ese es el punto central de la sal: para vencer los ataques basados en tablas.

  2. El acortamiento de la salida de SHA-256: si tiene poco espacio, también puede truncar la salida de SHA-512 a la longitud que le convenga. La resistencia de preimagen será adecuada si mantienes al menos 12 bytes más o menos (eso es 16 caracteres si codificas la salida con Base64).

  3. Sobre la velocidad de cálculo: eso es un atisbo de la verdad. Hacer el proceso de hash más lento es una buena idea; Pero, en realidad, tienes que hacerlo mucho más lento que eso. No hagas dos invocaciones de función hash; haga dos millions.

Por supuesto, en lugar de reinventar la rueda, es mucho mejor usar los buenos algoritmos que se han diseñado para resolver el problema del hashing de contraseñas; esto significa bcrypt o PBKDF2 . Estos algoritmos han sostenido años de análisis por criptógrafos enfurecidos, que no encontraron nada mortal en ellos. Un plan casero no puede presumir como tal.

    
respondido por el Thomas Pornin 20.01.2013 - 23:59
fuente
1

Creo que estarás bien solo con la sal. Sin embargo, esta publicación lo detalla mucho más exhaustivamente de lo que tengo tiempo:

enlace

    
respondido por el Julio 13.02.2012 - 23:54
fuente
1

Como señaló Yoav, este esquema es básicamente inútil para sus intentos y, en el peor de los casos, perjudica su seguridad al reducir la entropía de la contraseña dada.

La única forma en que puedo crear imágenes para mejorar la seguridad al utilizar más de una función hash es almacenar todos los resultados de hash por separado y compararlos todos al autenticar. Se prefieren diferentes algoritmos como sha, md5 y bcrypt.

hash1 = sha512 (contraseña + salt1)

hash2 = md5 (contraseña + salt2)

hash3 = bcrypt (contraseña + salt3)

De esta manera, las posibilidades de encontrar una colisión con éxito son muy bajas.

    
respondido por el OliverS 14.02.2012 - 10:56
fuente
0

Overkill en mi opinión. SHA256 usa 64 iteraciones de funciones sobre una matriz de 8 columnas. SHA512 con 80 iteraciones sobre una matriz de 5 columnas. No hay necesidad de hacer doble hash porque nadie ha sido capaz de fuerza bruta ninguno de estos todavía. Las tablas de arco iris no serán útiles para un atacante mientras haya sal.

Suponiendo una entrada de 32 bytes (que es razonable para su caso - 20 bytes de sal + 12 bytes de contraseña) mi máquina toma ~ 0,22s (~ 2 ^ -2s) para 65536 (= 2 ^ 16) cálculos. Por lo tanto, 2 ^ 256 cálculos se realizarían en 2 ^ 240 * 2 ^ 16 cálculos que se realizarían

2^240 * 2^-2 = 2^238 ~ 10^72s ~ 3,17 * 10^64 years

enlace

Para protegerse realmente, todo lo que tiene que hacer es aumentar el tamaño total de la cadena, como 32 bytes, y ni siquiera tendrá que preocuparse por eso.

Comprueba esto para comprender cuán locas son las funciones de la serie SHA:

enlace

    
respondido por el Dan Kanze 13.02.2012 - 23:54
fuente
0
  

Puedo pensar en 3 razones para hacer esto
  1. Es menos probable que un hacker tenga una tabla de arco iris para él

Eso no es una buena defensa, aún pueden construir una tabla aplicable a cada usuario en su sistema. Una mejor defensa es usar sales (que suena como si estuvieras).

  

2. sha256 devuelve una cadena más corta y luego sha512

¿Por qué es un plus?

  

3. Tomará más tiempo calcular el hash

Esa es una buena razón, pero no es necesario usar dos hashes separados, y dos iteraciones no son suficientes. Mejor sería algo en la línea de hashing cientos / miles de veces, o usar un hash que fue diseñado para ser lento .

    
respondido por el BlueRaja - Danny Pflughoeft 14.02.2012 - 00:19
fuente

Lea otras preguntas en las etiquetas