¿Cómo aumenta la seguridad la derivación de la clave maestra KeePass?

8

No entiendo cómo la derivación de clave KeePass aumenta la seguridad de la contraseña db en absoluto. Primero, intentaré explicar lo que entendí de la derivación clave que se describe aquí . Usaré un pseudo código:

const WORKFACTOR = 6000;

var userKey = UserEnteresPassword();
var userKeyHash = SHA256(userKey);

var randomKey = GetStoredSecureRandomKey();

var tmpKey = userKeyHash;
for(i = 0; i < WORKFACTOR; i++)
{
    tmpKey = AES(tmpKey, randomKey);
}

var finalKey = SHA256(tmpKey);

Luego usa el finalKey final para cifrar la base de datos de contraseñas. Esto se almacena en el disco duro.

Si ahora quiero descifrar la base de datos de contraseñas, ¿por qué tendría que usar esta función de derivación de claves? Simplemente podría adivinar directamente el finalKey en lugar de adivinar userKey y hacer que se ejecute a través de esta función. Por lo tanto, ahorraría todo el tiempo que de otro modo necesitaría para esta función de derivación de claves.

Soy consciente de que, si simplemente adivino finalKey , no podré obtener userKey , pero no lo necesitaré ya que ya tengo finalKey , simplemente puedo descifrar la contraseña db con. No estoy interesado en userKey en absoluto.

¿O es esto completamente acerca de los ataques de diccionario para evitar que un ataque use palabras / contraseñas conocidas y simplemente vea si la db se descifra?

    
pregunta GameScripting 05.09.2012 - 19:42
fuente

3 respuestas

5

La derivación de la clave es tomar la contraseña de los usuarios y convertirla en una clave de 256 bits para usar la longitud que sea y, con suerte, de forma segura.

Si ejecuta una fuerza bruta pura, sí, uno podría adivinar directamente la clave haciendo un ciclo a través de todos los patrones posibles que son de 256 bits, ya que esta quiere estar segura de que la derivación de la clave no puede limitar el espacio de la clave posible, por lo que todos los 256 bits teclas largas son todavía posibilidades.

Uno podría intentar ejecutar un ataque de diccionario y pasar todas las palabras del diccionario a través de la función de derivación de claves para generar claves para probar que uno de los puntos de la derivación de claves es hacer que esto sea lo suficientemente lento como para que no sea razonable en un hardware determinado.

Ahora hay algunos fallos en el pseudocódigo que dio dependiendo de un par de funciones (CreateSecureRandomKey () tendría que proporcionar los mismos datos cada vez que uno abre la base de datos para obtener la misma clave de uso). No estoy seguro, ya que tendría que analizar la derivación de claves en KeePass.

    
respondido por el ewanm89 05.09.2012 - 20:18
fuente
2

Mira lo difícil que es la clave final de fuerza bruta:

2 256 = 2 64 4

2 64 ~ = 4 * 10 9

Podrías tener cuatro matrices cúbicas de procesadores de 1000x1000x1000, que funcionen a 4 giga-guesses / sec cada una, durante 125 años, y tus posibilidades de adivinar serían cien veces más bajas que ganar la lotería.

El uso de una contraseña sin formato casi seguramente facilitará la fuerza bruta. Pocas personas usan algo así como una cadena de 64 dígitos hexadecimales (64 = 256/4) generados aleatoriamente para una contraseña KeePass regular.

    
respondido por el sourcejedi 10.09.2012 - 00:36
fuente
1

Esto se llama estiramiento clave. Puede leer todo sobre esto en el artículo de Wikipedia .

    
respondido por el David Wachtfogel 06.09.2012 - 14:27
fuente

Lea otras preguntas en las etiquetas