El modo CCM ( contador con código de autenticación de mensajes de encadenamiento de bloques de cifrado ; contador con CBC-MAC ) es un modo de funcionamiento para cifrados de bloques criptográficos . Es un algoritmo de cifrado autenticado diseñado para proporcionar tanto autenticación como confidencialidad . El modo CCM solo está definido para cifrados de bloques con una longitud de bloque de 128 bits. [1] [2]
El nonce de CCM debe elegirse con cuidado para que nunca se utilice más de una vez para una clave determinada . Esto se debe a que CCM es una derivación del modo contador (CTR) y este último es efectivamente un cifrado de flujo . [3]
Como sugiere el nombre, el modo CCM combina el modo contador (CTR) para la confidencialidad con el código de autenticación de mensajes de encadenamiento de bloques cifrados (CBC-MAC) para la autenticación. Estas dos primitivas se aplican de una manera "autenticar-luego-encriptar": primero se calcula CBC-MAC en el mensaje para obtener un código de autenticación de mensajes (MAC) , luego el mensaje y el MAC se encriptan utilizando el modo contador. La idea principal es que se puede utilizar la misma clave de encriptación para ambos, siempre que los valores del contador utilizados en el cifrado no colisionen con el vector de (pre)inicialización utilizado en la autenticación. Existe una prueba de seguridad [4] para esta combinación, basada en la seguridad del cifrado de bloque subyacente. La prueba también se aplica a una generalización de CCM para cualquier tamaño de bloque , y para cualquier tamaño de función pseudoaleatoria criptográficamente fuerte (ya que tanto en el modo contador como en CBC-MAC, el cifrado de bloque solo se utiliza en una dirección).
El modo CCM fue diseñado por Russ Housley, Doug Whiting y Niels Ferguson . En el momento en que se desarrolló el modo CCM, Russ Housley trabajaba para RSA Laboratories .
En el estándar Zigbee se utiliza una variante menor de CCM, denominada CCM* . CCM* incluye todas las características de CCM. Permite elegir entre longitudes de MAC hasta 0 (que deshabilita la autenticación y pasa a ser solo de cifrado). [5]
CCM requiere dos operaciones de cifrado de bloques en cada bloque de un mensaje cifrado y autenticado, y un cifrado en cada bloque de datos autenticados asociados.
Según los puntos de referencia de Crypto++ , AES CCM requiere 28,6 ciclos por byte en un procesador Intel Core 2 en modo de 32 bits. [6]
Ineficiencias notables:
El catalizador para el desarrollo del modo CCM fue la presentación del modo de libro de códigos de desplazamiento (OCB) para su inclusión en el estándar IEEE 802.11i . Se expresó oposición a la inclusión del modo OCB debido a una solicitud de patente pendiente sobre el algoritmo . La inclusión de un algoritmo patentado significó importantes complicaciones de licencia para los implementadores del estándar.
Si bien la inclusión del modo OCB fue motivo de controversia debido a estas cuestiones de propiedad intelectual , se acordó que la simplificación que brinda un sistema de cifrado autenticado era deseable. Por lo tanto, Housley y otros desarrollaron el modo CCM como una alternativa potencial que no estaba gravada por patentes.
Aunque el modo CCM es menos eficiente que el modo OCB, una solución sin patentes era preferible a una que se complicara por problemas de licencias de patentes. Por lo tanto, el modo CCM pasó a convertirse en un componente obligatorio del estándar IEEE 802.11i, y el modo OCB quedó relegado a la condición de componente opcional, antes de eliminarse por completo.
El modo CCM se utiliza en IEEE 802.11i (como CCMP , el protocolo de cifrado CCM para WPA2 ), IPsec , [7] y TLS 1.2, [8] así como Bluetooth Low Energy (a partir de Bluetooth 4.0 ). [9] Está disponible para TLS 1.3, pero no está habilitado de forma predeterminada en OpenSSL . [10]
AES CCM emplea el modo contador para el cifrado. Como sucede con cualquier cifrado de flujo, la reutilización del mismo valor IV con la misma clave es catastrófica.