¿Es más seguro aplicar AES varias veces?

6

La página de ayuda de seguridad de KeePass habla sobre la prevención de ataques de diccionario

  

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 utiliza una clave aleatoria de 256 bits, que se almacena en el archivo de base de datos. Como las transformaciones de AES no son precalculables (la clave es aleatoria), un atacante también tiene que realizar todos los cifrados, de lo contrario, no podrá probar y ver si la clave actual es correcta.

La "seguridad contra ataques de diccionario" aparentemente se encuentra en el tiempo necesario para las N rondas de cifrado. Ahora la pregunta:

¿El tiempo necesario para calcular N iteraciones de AES realmente N veces el tiempo necesario para un solo cifrado AES, o existe un esquema conocido y más eficiente para calcular AES ^ N (texto claro)?

    
pregunta kutschkem 05.12.2013 - 13:07
fuente

3 respuestas

8

No es útil realizar AES varias veces. Romper AES tomaría infinito si usas una clave adecuada. Lo que KeePass está haciendo aquí es hacer que la derivación de la clave sea más lenta, por lo que un ataque de fuerza bruta tomaría mucho tiempo, ya que para cada contraseña se debe volver a calcular la clave (es lo que PBKDF2, Scrypt y Bcrypt intentan resolver).

Si bien esto puede ralentizar los ataques de diccionario, no los evitará. La prevención de ataques de diccionario solo se puede hacer usando contraseñas aleatorias lo suficientemente largas.

Por lo que sé ( podría estar equivocado ya que no soy criptógrafo ), no debería haber una forma más rápida de calcular AES ^ N más eficientemente que N iteraciones de AES. La razón principal por la que utilizan este algoritmo es porque es realmente difícil (imposible) hacer que los cálculos sean más eficientes y, por lo tanto, lo hace menos susceptible a la fuerza bruta.

Espero que Thomas Pornin pueda darte más información sobre este.

    
respondido por el Lucas Kauffman 05.12.2013 - 13:50
fuente
6

No . Sin embargo, su pregunta no está relacionada con el texto que citó. Los datos reales (la base de datos de contraseñas) no se cifran realmente varias veces .

Para cifrar algo con AES-256, necesitas una clave de 256 bits. La contraseña MyPass!sAwesome es patética para ese propósito. La buena noticia es que hay algo llamado KDF (Key Derivation Function) que toma la contraseña y la convierte en una clave gigantesca Necesario para el cifrado. Cuanto más lento sea el KDF, más difícil será para un atacante calcular la clave final al intentar un gran número de contraseñas. Un KDF estándar y ampliamente utilizado es PBKDF2 .

(Por favor, lea ¿Cómo hash seguro de las contraseñas? para que aparezca lo siguiente la analogía tiene más sentido)

Un KDF normalmente toma trabajos con una función criptográfica de hash, sal y un recuento de iteraciones. KeePass eligió escribir su propia lógica KDF y lo están haciendo más lento usando 6000 rondas de AES. Lo que hicieron fue simplemente usar AES como su función criptográfica hash, la clave aleatoria de 256 bits como la sal y la N como el recuento de iteraciones.

La documentación de KeePass que significa "prevención de ataques de diccionario" es realmente una protección contra tablas de arco iris , que se realiza mediante el uso de sales seguras (una clave aleatoria de 256 bits utilizada como sal es bastante segura).

    
respondido por el Adi 05.12.2013 - 14:06
fuente
2

Si entiendo su pregunta correctamente, está preguntando si varias operaciones de cifrado AES tienen una "optimización conocida". La respuesta es no". Si lo hubiera, tendría que trabajar en las rondas internas de AES, y las defensas creadas por esas rondas múltiples se frustrarían rápidamente. Sin embargo, al igual que sabemos que reducir el número de rondas conduce a debilidades, también sabemos que aumentar las rondas lo hace seguro (hoy). La misma lógica se aplica en el ámbito más amplio de los cifrados múltiples.

Dicho de otra manera, si existiera tal optimización, sería una debilidad en el cifrado subyacente. Implicaría que podría aprender más sobre el estado interno simplemente pidiéndole al algoritmo que cifre los datos por segunda vez.

Esto no sería tan seguro si KeePass introdujo los mismos datos en cada iteración de encriptación, pero no lo es, lo único que se alimenta en la ronda n + 1 es la salida de la ronda n.

    
respondido por el John Deters 05.12.2013 - 14:35
fuente

Lea otras preguntas en las etiquetas