# Mode CCM

El mode CCM (comptador amb codi d'autenticació de missatges encadenats de blocs de xifrat; comptador amb CBC-MAC) és un mode d'operació per a xifrats de blocs criptogràfics. És un algorisme de xifratge autenticat dissenyat per proporcionar autenticació i confidencialitat. El mode CCM només es defineix per a xifratge de blocs amb una longitud de bloc de 128 bits.
El noce de CCM s'ha de triar amb cura perquè mai s'utilitzi més d'una vegada per a una clau determinada. Això es deu al fet que CCM és una manera de derivació de comptador (CTR) i aquest últim és efectivament un xifrat de flux.

## Xifratge i autenticació

Com el seu nom indica, el mode CCM combina el mode de comptador (CTR) per a la confidencialitat amb el codi d'autenticació de missatges en cadena de blocs de xifratge (CBC-MAC) per a l'autenticació. Aquestes dues primitives s'apliquen de manera "autenticar i després xifrar": primer es calcula CBC-MAC al missatge per obtenir un codi d'autenticació del missatge (MAC), després el missatge i el MAC es xifren mitjançant el mode comptador. La idea principal és que es pot utilitzar la mateixa clau de xifratge per a tots dos, sempre que els valors del comptador utilitzats en el xifratge no xoquin amb el vector d'inicialització (pre) utilitzat en l'autenticació. Existeix una prova de seguretat per a aquesta combinació, basada en la seguretat del xifratge de blocs subjacent. La prova també s'aplica a una generalització de CCM per a qualsevol mida de bloc i per a qualsevol mida de funció pseudoaleatòria criptogràficament forta (ja que tant en mode comptador com en CBC-MAC, el xifrat de bloc només s'utilitza en una direcció).
El mode CCM va ser dissenyat per Russ Housley, Doug Whiting i Niels Ferguson. En el moment en què es va desenvolupar el mode CCM, Russ Housley estava emprat per RSA Laboratories.
A l'estàndard Zigbee s'utilitza una variació menor de CCM, anomenada CCM*. CCM* inclou totes les característiques de CCM. Permet escollir longituds MAC fins a 0 (que desactiva l'autenticació i es converteix en només xifratge).

## Rendiment

CCM requereix dues operacions de xifratge de xifratge de blocs a cada bloc d'un missatge xifrat i autenticat i un xifratge a cada bloc de dades autenticades associades.
Segons els punts de referència de Crypto++, AES CCM requereix 28,6 cicles per byte en un processador Intel Core 2 en mode de 32 bits.
Ineficiències notables:
* CCM no és un xifratge autenticat "en línia" amb dades associades (AEAD), ja que la longitud del missatge (i les dades associades) s'ha de conèixer per endavant.
* En la construcció MAC, la longitud de les dades associades té una codificació de longitud variable, que pot ser més curta que la mida de la paraula màquina. Això pot provocar un rendiment MAC pessimista si les dades associades són llargues (cosa poc freqüent).
* Les dades associades es processen després de les dades del missatge, de manera que no és possible calcular prèviament l'estat de les dades estàtiques associades.

## Ús

El mode CCM s'utilitza a IEEE 802.11i (com a CCMP, el protocol de xifratge CCM per a WPA2), IPsec, i TLS 1.2, així com a Bluetooth Low Energy (a partir de Bluetooth 4.0). Està disponible per a TLS 1.3, però no està activat per defecte a OpenSSL.

## Referències

* ↑ Housley, Russ IETF, December 2005, pàg. 3. «AES CCM employs counter mode for encryption. As with any stream cipher, reuse of the same IV value with the same key is catastrophic.»
* ↑ «Annex B: CCM* mode of operation». A: IEEE Standard for Local and metropolitan area networks--Part 15.4: Low-Rate Wireless Personal Area Networks (LR-WPANs) (en anglès). IEEE Standards, 2011-09-05, p. 229.
* ↑ «Crypto++ 5.6.0 Benchmarks» (en anglès). Crypto++. Arxivat de l'original el 15 d’octubre 2008. [Consulta: 6 setembre 2015].
* ↑ «Bluetooth Low Energy Security». Arxivat de l'original el 2016-04-02. [Consulta: 20 abril 2017].
* ↑ Caswell, Matt. «Using TLS1.3 With OpenSSL» (en anglès). OpenSSL blog, 04-05-2017. [Consulta: 29 desembre 2018].