¿Es seguro usar PBKDF2 para el hash?

10

Me gustaría obtener algunas opiniones sobre si sería seguro o no usar PBKDF2 para generar un hash de una contraseña. Para mis propósitos, me gustaría asumir que el hash se publicará en la página de Twitter de la Casa Blanca (en otras palabras, será público).

¿Estaría mejor usando una cantidad masiva de iteraciones SHA-256 (como reemplazo de mis 100,000 iteraciones PBKDF2)? ¿Hay algún ataque que pueda revertir PBKD2?

Este es el código que estoy usando:

        string salt = Utility.RandString(32);
        // convert to byte[] and store in both forms
        this.Salt = salt;
        this.BSalt = Utility.ToByteArray(salt);
        // generate the password hash
        Rfc2898DeriveBytes preHash = new Rfc2898DeriveBytes(this.Password,  this.BSalt, 100000);
        byte[] byteHash = preHash.GetBytes(32);
        this.Hash = Convert.ToBase64String(byteHash);
    
pregunta Razick 17.12.2013 - 18:47
fuente

2 respuestas

13

La respuesta corta es que PBKDF2 se considera apropiado y seguro para el hashing de contraseñas. No es tan bueno como podría desearse porque se puede implementar de manera eficiente con una GPU; vea esta respuesta para alguna discusión (y esa para más información sobre el tema) .

Hay hay algunos puntos discutibles, en particular que PBKDF2 fue diseñado para ser una Función de derivación clave , que no es el mismo tipo de animal que una función hash; pero también resultó ser bastante útil para el hash de contraseñas, siempre que no hagas nada estúpido con él (es decir, asegúrate de mantener al menos 80 bits de salida y de usar un número de iteraciones suficientemente alto, idealmente tan alto) como puede tolerar en su hardware).

No intentes hacer tu propia función hash; Estas cosas son sorprendentemente difíciles de entender, especialmente porque es casi imposible evaluar si una construcción dada es segura o no. Utilice PBKDF2. Si realmente desea SHA-256 (o SHA-512), use PBKDF2 con SHA-256: PBKDF2 es una construcción configurable, que es tradicionalmente configurada para usar SHA- 1, pero funciona igual de bien con SHA-256 o SHA-512.

    
respondido por el Tom Leek 17.12.2013 - 19:04
fuente
2

Creo que es un buen KDF aunque hay mejores.

La contraseña de entropía en sí es de mayor importancia.

enlace

Si puede recordar su contraseña, se pueden usar técnicas especiales de atajo que disminuyen la fortaleza teórica de la contraseña. Básicamente, piense en las palabras como un solo carácter cuando se trata de calcular la entropía.

Una contraseña de 6 caracteres con un costo muy alto de KDF se seguirá descifrando en poco tiempo.

    
respondido por el Andrew Hoffman 17.12.2013 - 19:02
fuente

Lea otras preguntas en las etiquetas