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).