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.