Длина зашифрованного сообщения 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, который в настоящее время считается сильно нарушенным.

Другие вопросы по тегам