Estrategia de protección contra ataques del diccionario Keepass

5

Aunque estoy bastante interesado, soy todo menos un experto en seguridad de la información, reenvíeme a cualquier recurso útil si mi pregunta es estúpida o corríjame si mis suposiciones son erróneas.
Al leer la página de seguridad de Keepass , me pareció que el flujo de trabajo de generar la contraseña que realmente se usa para cifrar el archivo kdbx de la contraseña ingresada por el usuario (asumiendo que no se usan archivos de claves o cuenta de usuario de Windows) es como sigue:

  1. Tome la contraseña ingresada por el usuario y córtela (SHA-256)
  2. Genere una contraseña aleatoria / recupérela del archivo kdbx
  3. Cifre el hash de 1 N veces usando la clave de 2
  4. Hash la salida de 3 usando SHA-256 de nuevo

Entonces, la salida de 4 es la clave que se utilizará realmente para cifrar la base de datos.
Lo que me pregunto es: ¿por qué la molestia con la clave almacenada en formato simple y encriptado? ¿Por qué no simplemente omite los pasos 2 y 3 y el hash de la contraseña ingresada por el usuario N (o tal vez C*N , siendo C la relación de tiempo entre el cifrado AES y el hash SHA-256) veces? Estoy bastante seguro de que estoy pasando por alto algo importante aquí y te agradecería que me iluminaras.

    
pregunta TheWolf 19.04.2014 - 23:45
fuente

2 respuestas

4

[Divulgación: trabajo para AgileBits, los creadores de 1Password]

Puede que mi historial esté equivocado aquí, pero creo que KeePass está diseñado para funcionar con bases de datos de PasswordSafe y que PasswordSafe se diseñó antes de la adopción general de PBKDF2. Entonces, lo que estamos viendo aquí es un enfoque "casero" para hacer el trabajo para el cual PBKDF2 fue diseñado. (Y, por supuesto, PBKDF2 no es ideal, por lo que el mundo está buscando un sucesor).

La elección de AES (en KeePass) sobre HMAC (como se usa típicamente en PBKDF2) como PRF para cada ronda no es realmente una gran diferencia, ya que ambas son PRF. De hecho, el PBKDF2 podría usarse en ese modo (aunque solo lo he visto con HMAC).

Es interesante observar que ambos esquemas sufren el problema de usar una clave / sal constante para el PRF. Esto ahora se reconoce como un problema (pequeño) (entre uno más grande) con PBKDF2.

Tan fuera de mi mente y basado únicamente en su descripción anterior, no veo que el esquema sea peor (aunque también un poco mejor) que PBKDF2. No es tan general como PBKDF2 en términos de flexibilidad en el tamaño de las claves derivadas, pero probablemente sea algo bueno. Aparte de eso, parece (nuevamente, solo por una mirada casual) ser muy parecido a PBKDF2-HMAC en sus fortalezas y debilidades.

A lo largo de los años, he pasado de describir el PBKDF2 como "La mantequilla de maní también mantiene a los perros amigables" a "La alimentación de dingos de la dieta de los bebés de la gente". A pesar de esto, todavía lo usamos (con cuidado) en 1Password, pero estamos esperando con impaciencia a un sucesor de PBKDF2, scrypt y bcrypt .

    
respondido por el Jeffrey Goldberg 20.04.2014 - 20:06
fuente
3

Lo que hace KeePass parece ser un hash de contraseña personalizado, utilizando el cifrado AES como parte del proceso. La clave AES aquí desempeña el papel de un salt . La sal es un parámetro no secreto que selecciona la función real utilizada para procesar la contraseña de entrada (es decir, no hay una función hash, sino toda una familia, y la sal le dice cuál es la que debe ser usado). Las sales evitan las tablas precomputadas y, más generalmente, evitan el costo compartido entre las instancias de ataque: un atacante no puede reutilizar el trabajo empleado en descifrar una contraseña con hash con otra contraseña con hash, porque la otra contraseña con hash utiliza un salt diferente.

Más teoría y práctica sobre las funciones de hash de contraseñas está disponible existe .

La función KeePass parece ser un diseño personalizado, que (en general) es algo malo. Además, se basa en AES, por lo que un atacante puede acelerar el ataque utilizando una PC que incluye los opcodes AES-NI , es decir, una PC básica.

    
respondido por el Thomas Pornin 20.04.2014 - 13:29
fuente

Lea otras preguntas en las etiquetas