AES CBC sobre TCP: cuándo se necesita una nueva IV

3

Estoy trabajando en un proyecto en el que dos dispositivos se comunicarán con AES con CBC a través de TCP. Ya tenemos un mecanismo seguro para compartir la clave de cifrado / descifrado. No estoy seguro de si necesitamos tener un IV al azar o no, o con qué frecuencia comenzar un nuevo "mensaje".

Así es como creo que funcionará:

Ambos lados se envían mensajes de saludo entre sí para indicar el inicio del canal. El mensaje de cada lado comenzará con un IV aleatorio. Después de ese punto, cada lado enviará ocasionalmente un pequeño mensaje al otro que se encadenará de los mensajes anteriores. Es probable que esto continúe durante unos minutos, pero podría continuar indefinidamente.

¿Eso funciona? ¿Necesita cada mensaje un nuevo IV? Cada sesión potencial tendrá una nueva clave de cifrado, así que ¿se requieren IVs aleatorios?

    
pregunta hooby3dfx 24.09.2012 - 19:28
fuente

2 respuestas

4

Creo que hay tres puntos:

  1. ¡No cree sus propios protocolos! O, al menos, no crea que el resultado sea seguro. De lo contrario, se adhieren a protocolos bien estudiados, como SSL. Si su objetivo es aprender, entonces continúe.

  2. En CBC, el IV (o el bloqueo anterior) debe ser impredecible para el atacante. Considere SSL, donde los datos se dividen en registros (esos son sus "mensajes"). Cada registro se envía atómicamente. En SSL 3.0 y TLS 1.0, el último bloque de un registro es también el IV para el siguiente registro; esto significa que un atacante que observa la secuencia y puede ingresar algunos datos propios en la secuencia de texto claro puede observar un registro, aprender el IV para el siguiente registro y luego Calcular los datos de texto claro que desea insertar en el siguiente registro. Esa es la base para el BEAST attack que se publicó el año pasado para SSL (en realidad es un ataque anterior, pero NEAST trata de hacerlo plausible en el contexto HTTPS). En resumen, debe elegir un nuevo IV aleatorio (con un generador criptográficamente sólido) cuando esté a punto de cifrar los datos de texto simple que se obtuvieron después de haber enviado por cable el bloque cifrado anterior.

  3. Necesita una verificación de integridad; de lo contrario, un atacante podría modificar sus mensajes, y además del problema obvio de usar datos corruptos, esto también puede poner en peligro su confidencialidad. Hágase un favor y use un modo de cifrado que incluya integridad, por ejemplo. EAX . Esto hace que el problema sea mucho más sencillo:

    • La IV ya no necesita ser impredecible, solo no repetirse. Un simple contador lo hará.
    • Necesitas un nuevo IV cada vez que comiences un nuevo mensaje.
    • Por construcción, el receptor no puede procesar un mensaje sin haberlo recibido completamente (porque no se puede confiar en su contenido hasta que se haya verificado la integridad). Por lo tanto, su incentivo para dividir los datos en mensajes es limitar el uso de RAM en el receptor; y debe cerrar el mensaje actual cada vez que quiera "vaciar" los datos.

    La forma antigua de agregar integridad es usar una construcción MAC independiente (como HMAC) pero combinando simétrica el cifrado y un MAC pueden ser complicados (consulte esta pregunta para detalles) así que es mejor que uses EAX (o algo equivalente como GCM).

respondido por el Thomas Pornin 24.09.2012 - 20:24
fuente
1

Los vectores de inicialización están solo diseñados para proporcionar una manera de hacer que cada conversación sea única, de modo que los bloques idénticos de texto simple no produzcan bloques idénticos de texto cifrado, para la misma clave. Cada nuevo mensaje no necesita un nuevo IV. Simplemente puedes usar un IV por conversación.

Un problema de implementación a tener en cuenta es la transmisión IV. Deberá acordar una clave inicialmente, a través de cualquier mecanismo (DH es una buena), luego debe proporcionar un MAC en la IV para asegurarse de que no se manipule, de manera similar a como WPA2 (TKIP) realiza el intercambio IV.

No tengo conocimiento de ningún ataque en sistemas como el suyo, donde la IV es estática y la clave es diferente, pero me pone nervioso. Sin embargo, no soy criptógrafo, así que no puedo darte ningún razonamiento sólido. Estoy seguro de que alguien como Thomas Pornin estaría encantado de opinar con una respuesta!

    
respondido por el Polynomial 24.09.2012 - 20:16
fuente

Lea otras preguntas en las etiquetas