AES256, IV repetidas y una carga útil mayormente costosa: ¿qué tan bien / mal es eso?

5

Recientemente encontré una aplicación que hace más o menos esto:

  • comienza desde una clave (supuestamente desconocida para otros)
  • genera un IV aleatorio
  • cifra alguna carga útil pequeña (~ 160 bytes) con la clave y el IV generado utilizando AES256 en modo CBC
  • [> = 60% de la carga útil se compone de dos o tres palabras ASCII, elegidas de una lista supuestamente desconocida pero más o menos fácil de adivinar de una docena de elementos]
  • deriva otra IV solo haciendo algunos cálculos en la clave. Este IV será el mismo para cada paquete, y el código para generarlo a partir de la clave se conoce públicamente.
  • cifra un pequeño encabezado (32 bytes) con la clave y el IV derivado utilizando AES256 en modo CBC
  • [la mayor parte de este encabezado está hecho de datos fijos, como la "versión del protocolo" que debe considerarse públicamente conocido, luego contiene una marca de tiempo de Unix (datos conocidos si se sabe cuándo se ha transmitido el paquete) y el IV al azar utilizado antes para la parte de carga útil]
  • transmite el encabezado cifrado resultante + la carga útil en el cable

La parte receptora conoce la clave (precompartida), regenera el "encabezado IV" a partir de eso, descifra el encabezado, obtiene la carga útil IV desde allí, descifra la carga útil.

Todo el material se repite para cada paquete, y la aplicación típica tendría entre 5 y 50 paquetes por segundo en el cable, y dado que muchos de ellos son solo "información de estado", la única diferencia entre su texto claro sería la la marca de tiempo de Unix y la carga útil (pseudo) generada aleatoriamente IV.

Definitivamente no soy un experto en criptografía pero, por lo que sé, "el IV corregido derivado de la clave utilizada para cifrar 32 bytes, 28 de los cuales son fijos y / o fáciles de adivinar" debería al menos sonar una alarma.

¿Cómo podría considerarse la seguridad de tal enfoque? - "seguridad" se define como mantener la clave y / o el secreto de la carga, incluso si alguien pudiera escuchar los paquetes del cable.

    
pregunta Luke404 15.07.2014 - 07:58
fuente

3 respuestas

4

Las consecuencias de una reutilización IV varían de "grave" a "dramática", según el modo de cifrado. AES, por sí mismo, es un cifrado de bloques : procesa bloques de 128 bits. Al cifrar un mensaje (con una longitud distinta de exactamente 16 bytes), se debe usar un modo de cifrado de bloque de operación . Muchos de estos modos son "secuenciales" de alguna manera, con un estado de ejecución, y el IV es el valor inicial para ese estado.

Si el modo de cifrado es CTR (como es común en muchos modos avanzados modernos como < a href="http://en.wikipedia.org/wiki/Galois/Counter_Mode"> GCM ), la reutilización IV es mortal, porque entonces el cifrado se degrada al infame multimitor pad . Con el modo CBC , la reutilización IV es algo menos crítica, pero seria. En particular, un IV reutilizado también es, por definición, un predecible IV, que puede aprovecharse en ataques de texto plano elegido como el ataque BEAST.

Un comentario más general es que un IV reutilizado es un signo de incompetencia; es poco probable que dicha incompetencia se haya detenido en la reutilización IV. Lo más probable es que otros elementos de todo el protocolo estén igualmente mal diseñados. Las debilidades no viajan solas ...

    
respondido por el Tom Leek 15.07.2014 - 14:55
fuente
1

Lo que ha explicado suena similar al cifrado WEP para 802.11. Tampoco soy un criptólogo, pero he leído la Aircrack-ng varias veces. El uso de esta técnica de cifrado para un conjunto de datos estáticos abre la aplicación a ataques basados en estadísticas como Korek y FMS. Puede encontrar una explicación detallada de cómo se realizan estos ataques en WEP aquí . Y hay muchos más recursos que se pueden encontrar aquí que explica Otros ataques a los protocolos de cifrado 802.11.

    
respondido por el ap288 15.07.2014 - 09:39
fuente
0

Tampoco soy un experto, pero por lo que entiendo, la carga útil real se encripta con un IV aleatorio (supuestamente único) para cada paquete, que es la forma correcta de hacer las cosas. No importa que las cargas útiles sean muy similares.

El encabezado, por el contrario, es muy susceptible a los ataques (consulte esta pregunta para una explicación más completa), pero como de todos modos son datos públicos, no creo que esto sea un problema: la clave AES no puede recuperarse de lo conocido ciphertexts por lo que yo sé.

Mi principal preocupación es que el IV fijo se genere a través de la "matemática" no descrita realizada en la clave. Dependiendo de lo que realmente ocurra aquí, es posible que se filtre cierta información sobre la clave y realmente no quieres eso.

Para resumir, definitivamente esta no es la forma estándar de hacer las cosas, y la forma en que se encripta el encabezado me parece muy insegura. ¿Es lo suficientemente inseguro como para revelar el contenido de la carga útil también? Tal vez, necesitaríamos más información para contar. Sin embargo, el cifrado de la carga útil me parece bien. ¿Qué hay de mantener las cosas simples? Si este encabezado realmente está hecho de datos públicos, no debería estar cifrado y, en cualquier caso, no tiene sentido usar diferentes IV para el encabezado y la carga útil. ¡Use el IV aleatorio para todo el paquete, o no cifre el encabezado (y elimine ese IV corregido)!

    
respondido por el executifs 15.07.2014 - 10:56
fuente

Lea otras preguntas en las etiquetas