¿El hecho de usar el mismo algoritmo de encriptación varias veces hace una diferencia?

19

En TrueCrypt noté la opción de cifrar un volumen con múltiples algoritmos de cifrado, es decir, AES-Twofish-Serpent. ¿Sería útil cifrar algo con el mismo algoritmo varias veces? Por ejemplo AES-AES-AES. Supongo que si se descubriera una falla o una puerta trasera en el algoritmo, esta defensa sería inútil, pero ¿haría los ataques de fuerza bruta más difíciles?

EDITAR: ¿cómo es diferente la aplicación de múltiples iteraciones?

    
pregunta Celeritas 26.05.2014 - 23:35
fuente

5 respuestas

23

Sí, hace una diferencia. Hace que su sistema sea más riesgoso.

Al responder a esta pregunta, asumiré que estás implementando una cascada AES-AES utilizando un modo de operación sensible (por ejemplo, CBC o GCM) y con claves independientes.

El beneficio que parece estar proponiendo es que podría evitar los ataques de fuerza bruta utilizando múltiples capas. El problema es que, si un adversario tiene alguna posibilidad de romper una clave de 128 bits, entonces tener que romper tres de ellos hace una diferencia casi nula para ellos. Está hablando de la diferencia entre las operaciones 2 128 y 2 129.58 . Teniendo en cuenta que los límites de cómputo ponen los costos involucrados al descifrar una clave de 128 bits en algún lugar de la región de La centésima parte de todo el poder producido por el hombre, ese poco extra apenas importa.

El único beneficio que traería una cascada AES-AES es que muchas clases de ataque contra cifrados en bloque se hacen más difíciles. Por ejemplo, los ataques de texto sin formato elegidos se basan en conseguir que un sistema encripte los textos seleccionados por el atacante, y por lo general implican comparar los textos cifrados resultantes. Sin embargo, con las cascadas AES-AES, no es posible seleccionar la entrada para el segundo cifrado.

Sin embargo, hay un problema. ¿Recuerdas cuando dije que asumiría que habías tomado decisiones sensatas? Ahí es donde las cosas empiezan a desmoronarse. Al aumentar la complejidad de su sistema, aumenta la cantidad de decisiones de seguridad que debe tomar, y aumenta el potencial de fallas de seguridad y errores. ¿Realiza dos transformaciones de bloque AES secuenciales para cada proceso de bloque en CBC, o lo cifra todo con AES-CBC y luego lo cifra todo de nuevo? ¿Has usado dos IVs separados? ¿Está seleccionando IVs independientemente? ¿Está seleccionando teclas de forma independiente? ¿Cómo estás aplicando y comprobando la autenticidad? ¿Cómo va a intercambiar, almacenar o derivar de forma segura las claves e IV de su protocolo? ¿Son todas sus implementaciones fuertes contra ataques de canal lateral como DPA y ataques de temporización? Esas son muchas las preguntas que hay que resolver, y muchas áreas potenciales para el fracaso.

Finalmente, me gustaría recordarle el propósito de las cascadas: garantizar que una debilidad en un cifrado no produzca una pérdida de confidencialidad de los datos. Al implementar correctamente una cascada de, digamos, AES-Serpent, se asegura de que tanto AES como Serpent deben romperse antes de que los datos se vean comprometidos.

    
respondido por el Polynomial 27.05.2014 - 01:07
fuente
2

El uso del mismo algoritmo dos veces no proporciona una seguridad adicional significativa. Serías vulnerable a un reunión en el medio . Usar el mismo algoritmo tres veces le brinda seguridad adicional aproximadamente equivalente a duplicar el tamaño de la clave. Puede usar la misma clave para la primera y la última de las tres encriptaciones. Usar solo dos teclas de esa manera es probablemente tan seguro como usar tres diferentes.

Este enfoque con 2 o 3 teclas se ha utilizado con el algoritmo DES y se conoce como Tripple DES .

Un enfoque más simple y mucho más rápido es aplicar XOR con una constante antes y después de aplicar el cifrado. Este enfoque se ha utilizado con DES y se conoce como DES-X .

Una generalización podría alternar entre XOR con una clave y cifrar con una clave. Comenzando y terminando con XOR. Al configurar las teclas adecuadamente, este enfoque generalizado podría reducirse a Tripple DES o DES-X. Pero este enfoque generalizado no ha tenido mucho análisis.

En el caso de AES, aplicar cualquiera de los enfoques anteriores sería equivalente a utilizar AES con un programa clave diferente. Esto no es generalmente cierto para cada cifrado, es específico de la estructura de AES.

La implicación de esto es que cualquiera de los enfoques anteriores realmente solo ayudaría si el tamaño de la clave de AES fuera demasiado pequeño, o si hubiera alguna debilidad en el programa de claves estandarizado de AES. En otras palabras, la aplicación de AES-128 tres veces con claves diferentes debería proporcionar tanta seguridad como AES-256. Si no hubo debilidad en el calendario clave de AES.

Sin embargo, existen debilidades conocidas en la programación de claves AES, y en particular, se ha demostrado que AES-256 es mucho más débil de lo que cabría esperar de una clave de 256 bits. Por lo tanto, aplicar AES-128 tres veces con claves diferentes es, según mi conocimiento, más seguro que AES-256.

    
respondido por el kasperd 27.05.2014 - 16:38
fuente
2

Respuesta corta:

Desde un punto de vista práctico, es imposible forzar la clave de 128 bits de algo cifrado originalmente con AES. Técnicamente hablando, es posible pero requeriría mil millones de millones de años (1,02 x 10 ^ 18) para computar, probar y agotar el espacio clave, por lo que es prácticamente imposible. Tomando esta lógica hacia adelante, cifrar algo 3 veces sería imposible de descifrar 3 (también conocido como imposible). Y si bien no se obtendría ninguna ventaja con respecto a la confidencialidad de los datos cifrados al cifrarlos 3 veces, esos 2 pases adicionales de encriptación requerirían un 200% más de recursos computacionales que los necesarios para un solo paso de encriptación.

Detalles:

En términos de fuerza bruta, el uso del mismo algoritmo de cifrado y la clave varias veces para cifrar los datos no cambiará el resultado del ataque. Es decir, si el ataque iba a tener éxito contra los datos cifrados solo una vez por un algoritmo / clave, el mismo ataque se usará exitosamente contra los datos cifrados varias veces utilizando el mismo algoritmo / clave. Esto se debe principalmente a que el componente de criptografía sucumbe a la fuerza bruta (sugerencia: no el algoritmo).

La criptografía tiene dos partes fundamentales que pueden ser vulnerables a los ataques: el algoritmo y la clave. Cada una de estas dos partes es vulnerable a diferentes riesgos. Los algoritmos pueden ser vulnerables a puertas traseras y fallas matemáticas, ninguna de las cuales está directamente en riesgo por un ataque de fuerza bruta. Y ninguno de los dos se ha descubierto en AES con una clave de 128 bits, a pesar de que el algoritmo es 100% de código abierto para el mundo. (nota: hay un error en el algoritmo AES cuando se usan claves de 192 y 256 bits que, en última instancia, las hacen más débiles que si se hubiera usado una clave de 128 bits; no se preocupe por esto, ya que 128 es matemáticamente lo suficientemente fuerte (más acerca de esto abajo)). Sin mucho que atacar en el algoritmo, veamos la otra mitad.

A diferencia de los algoritmos, las claves de cifrado son muy susceptibles a los ataques de fuerza bruta, pero esa susceptibilidad solo existe cuando la clave de cifrado se genera a partir de datos no aleatorios (es decir, un usuario que ingresa una "contraseña" de cifrado). En casos como estos, la fuerza del algoritmo de cifrado no se puede maximizar, y el forzamiento brutal es posible. Para las claves de 128 bits de tamaño máximo creadas a partir de datos aleatorios, los ataques de fuerza bruta no funcionan. En realidad funcionan, pero el espacio clave posible es demasiado grande para calcularlo en nuestras vidas, incluso si se utiliza el procesamiento y cálculo distribuidos para la ley de Moore. Los ataques de fuerza bruta contra claves de 128 bits están buscando una clave de entre los 340 espacios de claves posibles (también conocido como 3.4 × 10 ^ 38). Hablando matemáticamente, no es posible forzar una clave de ese espacio en nuestras vidas, ni siquiera en la vida de cualquier generación de descendientes que vendrá después de ti.

Aún así, si la contraseña utilizada para generar la clave es débil (por ejemplo, "P @ ssW0rd1", etc ...), el espacio de la clave no estaba al máximo, y allí es posible la fuerza bruta. La moraleja de la historia: aleatorizar las claves de cifrado y hacer un uso completo del espacio de claves. Esto elimina todo menos los errores de algoritmo y las puertas traseras, ninguno de los cuales debemos preocuparnos por AES, ya que el algoritmo completo es visible por el mundo durante más de una década. Simplemente mantenga la llave segura y usted también estará seguro.

    
respondido por el SecurityAndPrivacyGuru 27.05.2014 - 01:28
fuente
1

Estoy de acuerdo en que los beneficios de la encriptación múltiple son pequeños, hay varias trampas potenciales para hacer correctamente (sin recurrir a la seguridad de la encriptación única), y hay un costo de CPU para hacer la encriptación adicional. Sin embargo, no creo que sea un anti-patrón de seguridad como inventar tu propio cifrado.

Sí, siempre que agregue complejidad a un sistema, puede abrirse inadvertidamente a ataques de canal lateral. Por supuesto, el código de la aplicación para hacer esto no necesita ser difícil de manejar o complejo.

En mi opinión, utilizar un A AES (K 1 , E AES (K 2 , E < sub> AES (K 3 , P)), ya que su cifrado de bloque no le abre más ataques que el uso de E AES (K 1 , P) como su cifrado de bloque.

En la superficie, acabas de cambiar tu cifrado de bloque con una clave de 128 bits a uno con una clave de 384 bits, por lo que uno podría decir que estás mucho más seguro con el nuevo esquema.

Concedido hay advertencias:

  1. Debes tener cuidado de que no sea posible romper las claves de forma secuencial. Si es posible verificar que rompió la primera clave, en lugar de tener una clave de 384 bits, solo tiene 129 bits de seguridad. Debe tratar E (K 1 , E (K 2 , (E (K 3 , P bloque ) )) como su cifrado de bloque y aplique su modo de cifrado de cifrado de bloque (por ejemplo, CBC con relleno) sobre este nuevo cifrado. Un error sería utilizar E CBC (K 1 , E CBC (K 2 , (E CBC (K 3 , P mensaje ))), donde E AES-CBC agrega el relleno según sea necesario de acuerdo con el esquema de relleno PKCS7 y opera en todo su mensaje. Tenga en cuenta el PKCS-7 esquema de relleno agrega un bloque completo (128 bits = 16 bytes para AES) de relleno cuando el texto en claro es un múltiplo exacto del bloque Por lo tanto, para los dos pasos externos de cifrado CBC, agregará bloques de 128 bits al final del mensaje antes de cifrar. Por lo tanto, puede resolver para K 1 y K 2 tratando de cifrar el bloque de relleno con todas las 2 claves 128 hasta que encuentre las dos claves que coincidan con estas dos últimos bloques en el modo de cifrado de bloque.

  2. Si un atacante sabe o puede adivinar un bloque de texto simple que se corresponde con un bloque de texto cifrado, entonces hay un meet-in-the-middle attack que toma espacio O (2 128 ) y lleva tiempo O (2 256 ). El encuentro en el ataque central es la razón por la que el triple DES es tres rondas de cifrado en lugar de solo el doble DES. Muy a menudo es posible que un atacante pueda adivinar razonablemente un bloque, por lo que es más exacto decir que en la práctica este esquema de triple AES solo brindaría seguridad de 256 bits.

  3. En realidad no es cierto que el cifrado de 256 bits (el tiempo para la fuerza bruta es 2 256 ) sea más seguro que el cifrado de 128 bits (el tiempo de fuerza bruta 2 128 ). Ambos están bien fuera de los límites de los atacantes. 2 128 = 340 282 366 920 938 463 463 374 607 431 768 211 456 (340 mil millones de billones de billones). Se trata de mil millones de personas en la tierra que operan un millón de computadoras y cada computadora prueba mil millones de teclas por segundo durante un millón de años antes de tener un 10% de posibilidades de forzar la clave. Por lo tanto, la fuerza bruta está fuera de discusión en 2 128 , por lo que la discusión de tales ataques es irrelevante para fines prácticos, a menos que haya avances importantes en nuestras capacidades computacionales. Otros ataques deben usarse como keyloggers, robar claves de RAM, llave de $ 5 , fallas en el cifrado de bloque. Entonces, aunque 2 256 es mucho más grande (2 128 en realidad más grande) que 2 128 , es en gran medida irrelevante. Algo así como comparar su capacidad para viajar a Alpha Centauri (a 4.3 años luz de distancia) en comparación con su capacidad para viajar a la galaxia de Andrómeda (2.5 millón de años luz). (Para referencia, la Luna está a solo 0,000 000 04 años luz de distancia). Sí, la galaxia de Andrómeda está mucho más lejos, pero no está claro si viajar en realidad es más difícil en la práctica, ya que ambos son actualmente imposibles. Claro, parece que si la humanidad alguna vez viaja a otras estrellas, probablemente podamos viajar primero a Alpha Centauri, pero no se sabe si alguna vez viajaremos a otras estrellas y si es así, requiere un avance increíble que posiblemente pueda lograr. Es posible viajar a otras galaxias con bastante facilidad, poniendo ambas tareas al alcance.

respondido por el dr jimbob 27.05.2014 - 23:52
fuente
1

Usar el mismo algoritmo varias veces no necesariamente le brinda tanta seguridad adicional como podría esperar: la razón es que permite " se encuentra en los ataques medios ". Permítanme citar una parte del enlace de referencia:

  

"Al tratar de mejorar la seguridad de un cifrado de bloque, es tentador   La idea es simplemente usar varias claves independientes para cifrar los datos.   Varias veces utilizando una secuencia de funciones (encriptaciones). Entonces uno   podría pensar que esto duplica o incluso n-tuples la seguridad de la   esquema de encriptación múltiple, dependiendo del número de encriptaciones que   Los datos deben pasar.

     

El ataque Meet-in-the-Middle intenta encontrar   un valor que utiliza tanto el rango (texto cifrado) como el dominio (texto plano) de   la composición de varias funciones (o cifrados de bloque) de modo que la   mapeo hacia adelante a través de las primeras funciones es el mismo que el   Mapeo hacia atrás (imagen inversa) a través de las últimas funciones, bastante   Literalmente reuniéndose en medio de la función compuesta ".

El antiguo algoritmo TripleDES lo hizo de la siguiente manera:

  

texto cifrado = EK3 (DK2 (EK1 (texto plano))), texto simple = DK1 (EK2 (DK3 (texto cifrado)))

donde K1, K2, K3 son claves independientes, E es el cifrado y D la función de descifrado.

Pero probablemente estés buscando cascadas para fortalecer el algoritmo de cifrado. TrueCrypt proporciona esto al implementar las siguientes cascadas:

  • AES-Twofish
  • AES-Twofish-Serpent
  • Serpiente-AES
  • Serpiente-Twofish-AES
  • Twofish-Serpiente

La idea subyacente es que si se descubren algunas debilidades en el futuro, sus datos aún están protegidos por un segundo (o tercer) algoritmo de cifrado independiente.

Otra técnica es proteger la clave aleatoria en el encabezado utilizando una SALT y aumentando el número de iteraciones a > 1000 (SALT protege contra los ataques de la tabla del arco iris al aumentar el número de combinaciones posibles que tienes que probar en un ataque de fuerza bruta, mientras que al aumentar el número de iteraciones te protege al "reducir la velocidad" del algoritmo: debes recorrer todas las iteraciones en Para descifrar el encabezado: ralentizarlo significa que tiene menos "intentos" por segundo y que la fuerza bruta es más larga).

Actualización: (Sobre la pregunta: "¿En qué se diferencian las iteraciones de la aplicación de AES varias veces?")

Cifras de bloque como AES repiten sus transformaciones varias veces según el tamaño de la clave (los llamados ciclos o iteraciones) para aumentar la entropía del cifrado (10 ciclos para claves de 128 bits, 14 ciclos o iteraciones para claves de 256 bits). Esto no es lo mismo que aplicar AES varias veces, porque los ciclos son parte del algoritmo en sí. Si implementa el algoritmo, puede aumentar el número de ciclos, pero tenga en cuenta que, si lo hace, cambia la implementación estándar. Una función de derivación clave como PBKDF2 se define de la siguiente manera:

  

DK = PBKDF2 (PRF, Contraseña, Salt, c, dkLen)

Uno de los parámetros es c, y especifica el número de ciclos (iteraciones), que se utiliza para fortalecer el algoritmo, porque se necesita una cantidad de tiempo de cálculo arbitrariamente grande si se elige el parámetro c lo suficientemente grande. Pero tenga en cuenta que en el mismo artículo de Wikipedia se observa que una de las debilidades de PBKDF2 es que los ataques ASIC y GPU pueden usarse para romperlo. Esto significa que aumentar el número de iteraciones no garantiza que la resistencia aumente automáticamente.

Actualización: Reemplazó la antigua URL truecrypt.org por la nueva que se encuentra en Suiza porque los desarrolladores originales no continúan con su trabajo.

    
respondido por el Matt 27.05.2014 - 14:01
fuente

Lea otras preguntas en las etiquetas