¿Es seguro el método de KeePass para la obtención de claves?

10

Estoy familiarizado con la forma en que se pueden usar las funciones de derivación de claves para ralentizar los ataques de fuerza bruta contra las contraseñas al requerir recursos computacionales y / o de memoria significativos para calcular la clave final.

Los KDF comunes que conozco son bcrypt, PBKDF2 y scrypt, pero KeePass parece usar un algoritmo completamente diferente con el que no estoy familiarizado. Según el centro de ayuda de KeePass :

  

Para generar la clave final de 256 bits que se usa para el cifrado de bloque, KeePass primero escribe la contraseña del usuario usando SHA-256, cifra el resultado N veces usando el algoritmo del Estándar de cifrado avanzado (AES) (llamado transformación de clave desde ahora), y luego lo vuelve a hacer hash usando SHA-256. Para AES, se usa una clave aleatoria de 256 bits, que se almacena en el archivo de base de datos.

     

[...]

     

De forma predeterminada, KeePass establece N a 6000 rondas de cifrado (significan cifrados completos; N no tiene nada que ver con las rondas de cifrado internas de AES). Se ha elegido este número para proporcionar compatibilidad con las versiones de dispositivos portátiles (los procesadores PocketPC son más lentos, por lo que el cálculo de la clave lleva más tiempo).

¿Es seguro este uso de AES como KDF? ¿Hay fallas serias con este enfoque? ¿Son 6000 iteraciones suficientes para ralentizar significativamente a un atacante determinado?

Esa línea sobre "procesadores PocketPC" es un poco preocupante, ya que me implica que esta decisión sobre qué KDF usar se tomó hace bastante tiempo, antes de que existieran los teléfonos con procesadores más potentes (y, por extensión, en un cuando los procesadores de escritorio no eran tan poderosos).

    
pregunta Ajedi32 30.09.2015 - 17:56
fuente

2 respuestas

9

Basado en un tweet de 2014 de Malik Mesellem , quien creó un software de craqueo de clave maestra KeePass llamado KeeCracker, estaba obteniendo un poco más de 1,000 contraseñas de contraseña por segundo con su herramienta en una CPU Intel i7.

En una respuesta a esta pregunta similar sobre KeePass a partir del almacenamiento de claves en 2011, Tom Leek analiza la posibilidad de 32,000 intentos de contraseña por segundo con una CPU de cuatro núcleos. Tal vez haya sido una mejor estimación de casos que se ha degradado aún más debido a las ineficiencias en el software de craqueo que administra esas operaciones AES, como vemos con la figura de KeeCracker.

Cualquiera de las estimaciones es bastante lenta en lo que respecta al descifrado de contraseñas, donde se ven regularmente cientos de millones o billones de hashes por segundo en una sola GPU con una mala selección de algoritmos como MD5. La implementación de KeePass es un poco más rápida que una implementación moderna "típica" de bcrypt o scrypt, pero probablemente no tanto como para considerarlos como parte de una clase completamente diferente.

No estoy al tanto de ninguna crítica sobre su elección de algoritmos o implementación, y no estoy realmente calificado para evaluarlos por mí mismo, pero parece que no se considera una mala elección. Creo que es justo cuestionar si 6000 rondas son suficientes si desea un archivo de contraseña "con prueba de futuro", pero no parece que este sea necesariamente un número irresponsable para usar hoy.

Por lo tanto, la mayor preocupación de los usuarios de KeePass debería ser elegir una frase de contraseña maestra (por ejemplo, no una contraseña) que resista los intentos de craqueo más simples. No use frases conocidas, no lo haga demasiado corto, no lo haga predecible basándose en el conocimiento personal que tenga de usted, etc. Si evita estas cosas correctamente, es poco probable que su frase de contraseña se descubra a través del diccionario, híbrido , o ataques de craqueo de fuerza bruta.

    
respondido por el PwdRsch 30.09.2015 - 20:18
fuente
4

Con respecto a su última pregunta: tiene razón en preocuparse por la compatibilidad con los procesadores PocketPC, como 6000 rounds es una configuración insegura . Debe establecer este valor alrededor de 5000000 o menos. El inconveniente es que el cifrado / descifrado del archivo de contraseñas lleva más tiempo, por lo que debe intentar encontrar el valor más alto que cause un retraso con el que se sienta cómodo.

    
respondido por el dr01 01.10.2015 - 14:26
fuente

Lea otras preguntas en las etiquetas