Длина зашифрованного сообщения AES-CCM
Объясните мне это пожалуйста:
Я зашифровал 1-байтовый текст AES-CCM с 8-байтовым MAC. Результат длиной 9 байт.
Я думал, что AES - это 16-байтовый блочный шифр, поэтому результат должен быть длиной 24 байта, но это не так.
Это определенно не ошибка в моем коде, потому что примеры в RFC 3610 очень похожи на мой случай (31-байтовые данные + 8-байтовые MAC приводят к выводу 39 байт).
1 ответ
CCM - это режим аутентификации, который объединяет режим CTR для шифрования и CBC-MAC для аутентификации. Поскольку шифрование выполняется с использованием CTR в потоковом режиме, зашифрованный текст будет точно таким же, как и открытый текст.
Одноразовый номер (Вектор инициализации) должен быть уникальным для режима CCM, в противном случае можно потерять конфиденциальность для всех сообщений, которые используют один и тот же одноразовый номер с одним и тем же ключом. Для того чтобы что-то зашифровать, вам нужно либо использовать всемирно известный счетчик сообщений в качестве одноразового номера, либо сгенерировать случайный одноразовый номер и надеяться, что вы не создавали его раньше (очень малый шанс для 128-битных блочных шифров). Одноразовый номер не должен быть секретным, поэтому вы можете добавить его к зашифрованному тексту. Полная длина зашифрованного текста будет:
nonceLength + plaintextLength + tagLength
Другой проблемой режима CCM является использование CBC-MAC, который в настоящее время считается сильно нарушенным.