Aumento del costo de cálculo del hash [duplicado]

7

¿Es esta una forma segura de aumentar el costo de cálculo de md5 o sha1?

public static byte[] increaseHashComplexityMd5(byte[] hash, int loops)
{
    for(int loop = 1; loop <= loops; loop++)
    {
        hash = md5(encryptAes(hash, reverseBits(hash)));
    }
    return hash;
}

public static byte[] increaseHashComplexitySha1(byte[] hash, int loops)
{
    for(int loop = 1; loop <= loops; loop++)
    {
        hash = sha1(encryptAes(hash, reverseBits(hash)));
    }
    return hash;
}
  • reverseBits invierte cada bit de cada byte, por lo que 12345678 90111213 se convierte en 31211109 87654321.
  • encryptAes encripta el hash mediante el hash con bits invertidos, dará como resultado un resultado de 16 bloques de bloques.
  • md5 / sha1 hash los bytes dados.

Mi objetivo es hacer que sea más difícil para los hashes de fuerza bruta. En ambas plataformas (C ++ y Java), ya tengo las funciones hash, aes y reverseBits, por lo que algo como esto sería ideal. ¿Esto lo hará, o esto es inseguro?

    
pregunta Zwarmapapa 11.03.2016 - 14:58
fuente

1 respuesta

15

No, no es una forma "segura". Es una construcción hecha en casa que simplemente combina funciones hash y cifrado simétrico con la esperanza de que la mezcla resultante sea fuerte de alguna manera.

La verdad es que, en el caso específico del hashing de contraseñas (a diferencia del hashing simple, que es una actividad muy diferente), tal bofetada de algoritmos juntos tiende a funcionar. Pero todavía te las arreglaste para equivocarte en varias cosas. A saber:

  1. Su sistema no tiene sal, por lo que cuando un atacante debe descifrar varias contraseñas, puede optimizar las cosas con paralelismo y tablas precomputadas.

  2. El punto de usar muchas iteraciones es hacer que cada contraseña sea costosa, pero el atacante tiene el recurso para usar hardware dedicado que será más eficiente que el suyo. En este caso, tanto el MD5 como el AES pueden acelerarse considerablemente en una GPU comercial (para AES, usando técnicas de corte de bits, como en Implementación de Käsper-Schwabe , lo que le permite al atacante usar más contraseñas por dólar que usted.

Lea esta respuesta para obtener más información sobre lo que se necesita para el buen hashing de contraseñas. El breve resumen es: use bcrypt, con una de las bibliotecas ya disponibles. Será más fuerte que tus creaciones y más fácil de implementar, ya que está ya hecho .

    
respondido por el Tom Leek 11.03.2016 - 15:09
fuente

Lea otras preguntas en las etiquetas