tryb CCM
Tryb CCM ( licznik z kodem uwierzytelniającym wiadomość łączącą bloki szyfrów ; licznik z CBC-MAC ) to tryb działania blokowych szyfrów kryptograficznych . Jest to uwierzytelniony algorytm szyfrowania zaprojektowany w celu zapewnienia zarówno uwierzytelnienia , jak i poufności . Tryb CCM jest zdefiniowany tylko dla szyfrów blokowych o długości bloku 128 bitów.
Wartość nonce CCM musi być starannie dobrana, aby nigdy nie była używana więcej niż raz dla danego klucza . Dzieje się tak, ponieważ CCM jest pochodną trybu licznika (CTR) , a ten ostatni jest faktycznie szyfrem strumieniowym .
Szyfrowanie i uwierzytelnianie
Jak sama nazwa wskazuje, tryb CCM łączy tryb licznika (CTR) w celu zachowania poufności z kodem uwierzytelniającym wiadomości (CBC-MAC) w celu uwierzytelnienia. Te dwa prymitywy są stosowane w sposób „uwierzytelnij, a następnie zaszyfruj”: CBC-MAC jest najpierw obliczany na wiadomości w celu uzyskania kodu uwierzytelniającego wiadomość (MAC) , następnie wiadomość i MAC są szyfrowane przy użyciu trybu licznika. Głównym spostrzeżeniem jest to, że ten sam klucz szyfrowania może być użyty do obu, pod warunkiem, że wartości liczników używane w szyfrowaniu nie kolidują z wektorem (wstępnej) inicjalizacji używanym w uwierzytelnianiu. Dla tej kombinacji istnieje dowód bezpieczeństwa oparty na bezpieczeństwie podstawowego szyfru blokowego. Dowód dotyczy również uogólnienia CCM dla dowolnego rozmiaru bloku i dla dowolnego rozmiaru silnej kryptograficznie funkcji pseudolosowej (ponieważ zarówno w trybie licznika, jak i CBC-MAC, szyfr blokowy jest zawsze używany tylko w jednym kierunku).
Tryb CCM został zaprojektowany przez Russa Housleya, Douga Whitinga i Nielsa Fergusona . W czasie opracowywania trybu CCM Russ Housley był zatrudniony przez RSA Laboratories .
Niewielka odmiana CCM, zwana CCM*, jest używana w standardzie Zigbee . CCM* zawiera wszystkie funkcje CCM, a dodatkowo oferuje tylko funkcje szyfrowania.
Wydajność
CCM wymaga dwóch operacji szyfrowania blokowego na każdym bloku zaszyfrowanej i uwierzytelnionej wiadomości oraz jednego szyfrowania na każdym bloku powiązanych uwierzytelnionych danych.
Według testów porównawczych Crypto++ AES CCM wymaga 28,6 cykli na bajt na procesorze Intel Core 2 w trybie 32-bitowym.
Godne uwagi nieefektywności:
- CCM nie jest uwierzytelnionym szyfrowaniem „on-line” z powiązanymi danymi (AEAD) , ponieważ długość wiadomości (i powiązanych danych) musi być znana z góry.
- W konstrukcji MAC długość powiązanych danych ma kodowanie o zmiennej długości, które może być krótsze niż rozmiar słowa maszynowego. Może to powodować pesymistyczną wydajność MAC, jeśli powiązane dane są długie (co jest rzadkością).
- Powiązane dane są przetwarzane po danych wiadomości, więc nie jest możliwe wstępne obliczenie stanu dla statycznych danych powiązanych.
Patenty
Katalizatorem rozwoju trybu CCM było zgłoszenie trybu offsetowej książki kodowej (OCB) do włączenia do standardu IEEE 802.11i . Wyrażono sprzeciw wobec włączenia trybu OCB z powodu oczekującego patentowego dotyczącego algorytmu . Włączenie opatentowanego algorytmu oznaczało znaczne komplikacje licencyjne dla wdrażających standard.
Chociaż włączenie trybu OCB było kwestionowane w oparciu o te kwestie własności intelektualnej , uzgodniono, że pożądane jest uproszczenie zapewniane przez uwierzytelniony system szyfrowania. Dlatego Housley i in. opracował tryb CCM jako potencjalną alternatywę nieobciążoną patentami.
Chociaż tryb CCM jest mniej wydajny niż tryb OCB, rozwiązanie wolne od patentów było lepsze od rozwiązania skomplikowanego przez kwestie związane z licencjami patentowymi. Dlatego tryb CCM stał się obowiązkowym składnikiem standardu IEEE 802.11i, a tryb OCB został zdegradowany do statusu składnika opcjonalnego, zanim ostatecznie został całkowicie usunięty.
Używać
Tryb CCM jest używany w IEEE 802.11i (jako CCMP , protokół szyfrowania CCM dla WPA2 ), IPsec i TLS 1.2, a także Bluetooth Low Energy (od wersji Bluetooth 4.0 ). Jest dostępny dla TLS 1.3, ale nie jest domyślnie włączony w OpenSSL .