Phil Rogaway ha realizado un análisis formal en 2011, aquí . La Sección 1.6 ofrece un resumen que transcribo aquí, agregando mi propio énfasis en negrita (si eres impaciente, entonces su recomendación es usar el modo CTR, pero te sugiero que leas mis párrafos sobre la integridad del mensaje versus el cifrado a continuación).
Tenga en cuenta que la mayoría de estos requieren que el IV sea aleatorio, lo que significa que no es predecible y, por lo tanto, debe generarse con seguridad criptográfica. Sin embargo, algunos requieren solo un "nonce", que no exige esa propiedad sino que solo requiere que no se reutilice. Por lo tanto, los diseños que dependen de un nonce son menos propensos a errores que los diseños que no lo hacen (y créanme, he visto muchos casos en los que CBC no se implementa con la selección IV adecuada). Entonces verá que he agregado negrita cuando Rogaway dice algo como "no se logra la confidencialidad cuando el IV es un nonce", significa que si elige su IV criptográficamente seguro (impredecible), entonces no hay problema. Pero si no lo hace, está perdiendo las buenas propiedades de seguridad. Nunca reutilice un IV para ninguno de estos modos.
Además, es importante comprender la diferencia entre la integridad del mensaje y el cifrado. El cifrado oculta los datos, pero un atacante podría modificarlos, y su software podría aceptar los resultados si no verifica la integridad del mensaje. Mientras que el desarrollador dirá "pero los datos modificados volverán como basura después del descifrado", un buen ingeniero de seguridad encontrará la probabilidad de que la basura cause un comportamiento adverso en el software, y luego convertirá ese análisis en un ataque real. He visto muchos casos en los que se utilizó el cifrado, pero la integridad del mensaje era realmente más necesaria que el cifrado. Entiende lo que necesitas.
Debo decir que, aunque GCM tiene cifrado e integridad de mensajes, es un diseño muy frágil: si reutilizas un IV, estás jodido: el atacante puede recuperar tu clave. Otros diseños son menos frágiles, por lo que personalmente temo recomendar GCM en función de la cantidad de código de cifrado deficiente que he visto en la práctica.
Si necesita ambos, integridad del mensaje y cifrado, puede combinar dos algoritmos: generalmente vemos CBC con HMAC, pero no hay razón para vincularse a CBC. Lo importante es saber primero cifrar, luego MAC el contenido cifrado , no al revés. Además, el IV debe ser parte del cálculo de MAC.
No estoy al tanto de los problemas de IP.
Ahora a las cosas buenas del profesor Rogaway:
Bloquear modos de cifrado, cifrado pero no integridad del mensaje
BCE : Un blockcipher, el modo cifra mensajes que son múltiplos de n bits cifrando por separado cada pieza de n bits. Las propiedades de seguridad son débiles , el método pierde la igualdad de bloques a través de las posiciones de bloque y el tiempo. De considerable valor heredado, y de valor como bloque de construcción para otros esquemas, pero el modo no logra ningún objetivo de seguridad generalmente deseable por sí mismo y debe usarse con considerable precaución; El BCE no debe considerarse como un modo de confidencialidad de "propósito general" .
CBC : un esquema de cifrado basado en IV, el modo es seguro como un esquema de cifrado probabilístico, logrando indistinguibilidad de bits aleatorios, suponiendo un IV aleatorio. La confidencialidad no se logra si el IV es simplemente un nonce , ni si es un nonce cifrado bajo la misma clave utilizada por el esquema, como sugiere incorrectamente el estándar. Los textos cifrados son altamente maleables. No se ha elegido la seguridad de ataque de texto cifrado (CCA). La confidencialidad se pierde en presencia de un oráculo de relleno correcto para muchos métodos de relleno. Cifrado ineficiente por ser inherentemente serial. Ampliamente utilizado, las propiedades de seguridad solo de privacidad del modo resultan en mal uso frecuente. Se puede utilizar como un bloque de construcción para algoritmos CBC-MAC. No puedo identificar ventajas importantes sobre el modo CTR.
CFB : un esquema de cifrado basado en IV, el modo es seguro como un esquema de cifrado probabilístico, logrando indistinguibilidad de bits aleatorios, suponiendo un IV aleatorio. La confidencialidad no se logra si el IV es predecible , ni si lo hace un nonce cifrado bajo la misma clave utilizada por el esquema, como sugiere incorrectamente el estándar. Los textos cifrados son maleables. Sin seguridad CCA. Cifrado ineficiente por ser inherentemente serial. El esquema depende de un parámetro s, 1 ≤ s ≤ n, típicamente s = 1 o s = 8. Ineficiente para necesitar una llamada blockcipher para procesar solo s bits. El modo logra una propiedad interesante de "auto-sincronización"; La inserción o eliminación de cualquier número de caracteres s-bit en el texto cifrado solo interrumpe temporalmente el descifrado correcto.
OFB : un esquema de cifrado basado en IV, el modo es seguro como un esquema de cifrado probabilístico, logrando la indistinguibilidad de bits aleatorios, suponiendo un IV aleatorio. La confidencialidad no se logra si el IV es un nonce, aunque una secuencia fija de IV (por ejemplo, un contador) funciona bien. Los textos cifrados son altamente maleables. No hay seguridad CCA. El cifrado y el descifrado son ineficientes por ser inherentemente seriales. Encripta de forma nativa cadenas de cualquier longitud de bit (no se necesita relleno). No puedo identificar ventajas importantes sobre el modo CTR.
CTR : un esquema de encriptación basado en IV, el modo logra la indistinguibilidad de bits aleatorios asumiendo un IV distinto. Como un esquema seguro sin base, el modo también se puede usar como un esquema de cifrado probabilístico, con un IV aleatorio. Falla completa de privacidad si un nonce se reutiliza en el cifrado o descifrado. La paralelización del modo a menudo lo hace más rápido, en algunas configuraciones mucho más rápido, que otros modos de confidencialidad. Un bloque de construcción importante para los esquemas de cifrado autenticado. En general, generalmente la mejor y más moderna forma de lograr un cifrado solo de privacidad.
XTS : un esquema de cifrado basado en IV, el modo funciona mediante la aplicación de un blockcipher modificable (seguro como un PRP fuerte) a cada fragmento de n bits. Para mensajes con longitudes no divisibles por n, los dos últimos bloques se tratan especialmente. El único uso permitido del modo es para encriptar datos en un dispositivo de almacenamiento con estructura de bloque. El ancho estrecho del PRP subyacente y el mal tratamiento de los bloques finales fraccionados son problemas. Más eficiente pero menos deseable que lo sería un blockcipher seguro para PRP (bloque ancho).
MAC (integridad del mensaje pero no cifrado)
ALG1–6 : Una colección de MAC, todos ellos basados en el CBC-MAC. Demasiados esquemas. Algunos son demostrablemente seguros como VIL PRF, algunos como FIL PRF y otros no tienen seguridad demostrable. Algunos de los esquemas admiten ataques dañinos. Algunos de los modos están anticuados. La separación de teclas no se atiende adecuadamente para los modos que la tienen. No debe adoptarse en masa, pero es posible elegir selectivamente los "mejores" esquemas. También estaría bien no adoptar ninguno de estos modos, a favor de CMAC. Algunos de los MAC ISO 9797-1 están ampliamente estandarizados y utilizados, especialmente en la banca. Pronto se lanzará una versión revisada de la norma (ISO / IEC FDIS 9797-1: 2010) [93].
CMAC : un MAC basado en el CBC-MAC, el modo es demostrablemente seguro (hasta el cumpleaños) como un PRF (VIL) (suponiendo que el blockcipher subyacente es un buen PRP). Sobrecarga mínima para un esquema basado en CBCMAC. La naturaleza inherentemente en serie es un problema en algunos dominios de aplicación, y el uso con un blockcipher de 64 bits requeriría una nueva modificación ocasional. Más limpio que la colección ISO 9797-1 de MAC.
HMAC : un MAC basado en una función hash criptográfica en lugar de un blockcipher (aunque la mayoría de las funciones hash criptográficas se basan en blockciphers). El mecanismo disfruta de fuertes límites de seguridad comprobables, aunque no de supuestos preferidos. Múltiples variantes estrechamente relacionadas en la literatura complican la comprensión de lo que se conoce. No se han sugerido ataques dañinos. Ampliamente estandarizado y usado.
GMAC : un MAC sin base que es un caso especial de GCM. Hereda muchas de las buenas y malas características de GCM. Pero el requisito de no necesidad es innecesario para un MAC, y aquí compra pocos beneficios. Ataques prácticos si las etiquetas se truncan a ≤ 64 bits y la extensión del descifrado no se supervisa ni se reduce. Fallo completo en la no reutilización. El uso está implícito de todos modos si se adopta GCM. No recomendado para estandarización separada.
cifrado autenticado (cifrado e integridad del mensaje)
CCM : Un esquema AEAD no basado en el que combina el cifrado en modo CTR y el CBC-MAC sin procesar. Inherentemente serial, limitando la velocidad en algunos contextos. Probablemente seguro, con buenos límites, suponiendo que el blockcipher subyacente es un buen PRP. Construcción desgarbada que demostrablemente hace el trabajo. Más simple de implementar que GCM. Se puede usar como un MAC no basado en MAC. Ampliamente estandarizado y usado.
GCM : un esquema AEAD sin base que combina el cifrado en modo CTR y una función hash universal basada en GF (2128). Buenas características de eficiencia para algunos entornos de implementación. Buenos resultados demostrablemente seguros asumiendo un truncamiento mínimo de etiquetas. Ataques y límites de seguridad demostrables deficientes en presencia de truncamiento sustancial de etiquetas. Se puede usar como un MAC no basado en CA, que luego se llama GMAC. Opción cuestionable para permitir nonces que no sean 96 bits. Se recomienda restringir nonces a 96 bits y etiquetas a al menos 96 bits. Ampliamente estandarizado y usado.