it-swarm-es.com

Obligado a usar un IV estático (AES)

Hemos tenido que extender nuestro sitio web para comunicar las credenciales de los usuarios al sitio web de un proveedor (en la cadena de consulta) usando AES con una clave de 256 bits, sin embargo, están usando un IV estático al descifrar la información.

Aconsejé que el IV no debería ser estático y que no está en nuestros estándares hacer eso, pero si lo cambian su fin, incurriríamos en los costos [grandes], por lo que hemos acordado aceptar esto como un riesgo de seguridad y uso el mismo IV (para mi frustración extrema).

Lo que quería saber es, ¿qué tan amenazante es la seguridad? Necesito poder comunicar esto de manera efectiva a la gerencia para que sepan exactamente lo que están aceptando.

También estamos usando la misma CLAVE en todo momento.

Gracias

30
Mantorok

Depende del modo de encadenamiento. AES es un cifrado de bloque, se aplica en bloques de 16 bytes (exactamente). El modo de encadenamiento define cómo los datos de entrada se convierten en varios de esos bloques, y cómo se agrupan los bloques de salida. La mayoría de los modos de encadenamiento necesitan trabajar con algún tipo de "valor inicial", que no es secreto pero que debería cambiar para cada mensaje: ese es el IV.

Reutilizar el mismo IV es mortal si usa el modo de encadenamiento CTR. En el modo CTR, AES se usa en una secuencia de valores de contador sucesivos (comenzando con el IV), y la secuencia resultante de bloques cifrados se combina (por XOR a nivel de bits) con los datos para cifrar (o descifrar). Si usa el mismo IV, obtiene la misma secuencia, que es la infame "almohadilla de dos tiempos". Básicamente, al XORing dos cadenas cifradas juntas, obtienes el XOR de los dos datos de texto en claro. Esto se abre a una gran cantidad de ataques, y básicamente todo se rompe.

Las cosas son menos graves si usas CBC. En CBC, los datos en sí se dividen en bloques de 16 bytes. Cuando se debe cifrar un bloque, primero se XOR con el bloque cifrado anterior. El IV tiene el papel del bloque "-1" (el bloque cifrado anterior para el primer bloque). La principal consecuencia de reutilizar el IV es que si dos mensajes comienzan con la misma secuencia de bytes, los mensajes cifrados también serán idénticos durante algunos bloques. Esto filtra datos y abre la posibilidad de algunos ataques.

En resumen, no hagas eso. Usar el mismo IV con la misma clave siempre derrota todo el propósito del IV, la razón por la cual se usó un modo de encadenamiento con IV en primer lugar.

39
Thomas Pornin

Usar el mismo IV para todos los datos es equivalente a no usar un IV en absoluto: el primer bloque de texto cifrado será idéntico para texto plano idéntico. Me interesaría saber por qué su proveedor quiere usar un IV constante, pero eso no viene al caso. El punto es que el sistema es susceptible de esta manera: si un atacante puede establecer sus propias credenciales y observar el texto cifrado que se genera, puede compararlo con otras credenciales cifradas para obtener información sobre la clave.

8
user185

No soy un tipo de criptografía, pero entiendo que si el IV no cambia y el mismo valor se vuelve a cifrar, la salida sería la misma. Por lo tanto, sería posible inferir el contenido buscando valores repetidos, como una credencial que se pasa con cada solicitud.

Sin embargo, una vez más, no soy un tipo de criptografía, así que podría estar equivocado.

2
Steve