В криптографии, код проверки подлинности сообщения цепочки блоков шифрования (CBC-MAC ) - это метод построения кода аутентификации сообщения из блочного шифра . Сообщение шифруется некоторым алгоритмом блочного шифрования в режиме CBC для создания цепочки блоков, так что каждый блок зависит от надлежащего шифрования предыдущего блока. Эта взаимозависимость гарантирует, что изменение любого из битов открытого текста приведет к изменению окончательного зашифрованного блока таким образом, который невозможно предсказать или противодействовать, не зная ключа к блочному шифру.
Чтобы вычислить CBC-MAC сообщения m, шифруют m в режиме CBC с нулевым вектором инициализации и сохраняют последний блок. На следующем рисунке показано вычисление CBC-MAC сообщения, содержащего блоки с использованием секретного ключа k и блочного шифра E:
Если используемый блочный шифр является безопасным (что означает, что это псевдослучайная перестановка ), то CBC -MAC безопасен для сообщений фиксированной длины. Однако сам по себе он небезопасен для сообщений переменной длины. Таким образом, любой единственный ключ должен использоваться только для сообщений фиксированной и известной длины. Это связано с тем, что злоумышленник, который знает правильные пары сообщение-тег (т.е. CBC-MAC) для двух сообщений и может генерировать третье сообщение , CBC-MAC которого также будет . Это просто выполняется путем XOR первого блока с t, а затем конкатенации m с этим измененным ; т.е., сделав . При вычислении MAC для сообщения следует, что мы вычисляем MAC для m обычным способом, как t, но когда это значение связывается с этап вычисления мы выполним операция исключающее ИЛИ со значением, полученным для MAC первого сообщения. Наличие этого тега в новом сообщении означает, что оно будет отменено, не оставив никакого вклада в MAC от блоков открытого текста в первом сообщении m: и, следовательно, тег для равен .
Эту проблему нельзя решить добавив в конец блок размера сообщения. Существует три основных способа модификации CBC-MAC, чтобы он был безопасным для сообщений переменной длины: 1) Разделение ключей входной длины; 2) добавление длины; 3) Зашифровать последний блок. В таком случае также может быть рекомендовано использовать другой режим работы, например, CMAC или HMAC, для защиты целостности сообщений переменной длины.
Одно из решений - включить длину сообщения в первый блок; Фактически, CBC-MAC оказался безопасным до тех пор, пока не использовались два сообщения, которые являются префиксами друг друга, а добавление длины в начале является частным случаем этого. Это может быть проблематично, если длина сообщения может быть неизвестна в начале обработки.
Encrypt-last-block CBC-MAC (ECBC-MAC) определяется как CBC-MAC-ELB (m, (k1, k2)) = E(k2, CBC-MAC (k1, m)). По сравнению с другими обсуждаемыми методами расширения CBC-MAC до сообщений переменной длины, encrypt-last-block имеет то преимущество, что не нужно знать длину сообщения до конца вычислений.
Вычисление CBC-MAC Encrypt-last-block.Как и во многих криптографических схемах, наивное использование шифров и других протоколов может привести к возможности атак, снижая эффективность криптографическая защита (или даже отказ от нее). Мы представляем атаки, которые возможны из-за неправильного использования CBC-MAC.
Распространенной ошибкой является повторное использование одного и того же ключа k для шифрования CBC и CBC -MAC. Хотя повторное использование ключа для различных целей в целом является плохой практикой, в данном конкретном случае ошибка приводит к эффектной атаке:
Предположим, Алиса отправила Бобу блоки зашифрованного текста . В процессе передачи Ева может подделать любой из cipher- текстовые блоки и отрегулируйте любые биты в них по своему усмотрению, при условии, что последний блок, , останется прежним. Мы предполагаем, для целей этого примера и без потери общности, что вектор инициализации, используемый для процесса шифрования, является вектором нулей.
Когда Боб получает сообщение, он сначала расшифровывает сообщение, обращая процесс шифрования, примененный Алисой, с использованием блоков зашифрованного текста. . Подделанное сообщение, доставленное Бобу вместо оригинала Алисы, имеет вид .
Боб сначала расшифровывает полученное сообщение, используя общий секретный ключ K, чтобы получить соответствующий простой текст. Обратите внимание, что весь создаваемый простой текст будет отличаться от того, который изначально послала Алиса, потому что Ева изменила все, кроме последнего блока зашифрованного текста. В частности, окончательный простой текст, , отличается от исходного, , которое прислала Алиса; хотя то же самое, , поэтому другой простой текст создается при связывании предыдущего блока зашифрованного текста в исключающее ИЛИ после расшифровки : .
Отсюда следует, что Боб теперь будет вычислять тег аутентификации, используя CBC-MAC, по всем значениям открытого текста, которые он расшифровано. Тег для нового сообщения, , задается следующим образом:
Обратите внимание, что это выражение равно
что в точности равно :
и, следовательно, .
Таким образом, Ева смогла изменить зашифрованный текст в пути (не обязательно зная, какому простому тексту оно соответствует), так что было создано совершенно другое сообщение, , но тег для этого сообщения совпал с тегом оригинала, а Боб не известно, что содержимое было изменено во время транспортировки. По определению, код аутентификации сообщения нарушается, если мы можем найти другое сообщение (последовательность пар простого текста ), которое создает тот же тег, что и предыдущее. сообщение, P, с . Отсюда следует, что протокол аутентификации сообщения в этом сценарии использования был нарушен, и Боб был обманут, поверив, что Алиса отправила ему сообщение, которое она не создавала.
Если вместо этого мы используем разные ключи для этапов шифрования и аутентификации, скажем и , соответственно, эта атака предотвращена. Расшифровка измененных блоков зашифрованного текста дает некоторую текстовую строку . Однако из-за того, что MAC использует другой ключ , мы не можем «отменить» процесс дешифрования на прямом этапе вычисления аутентификации сообщения. код, чтобы создать тот же тег; каждый измененный теперь будет зашифрован с помощью в CBC -MAC для некоторого значения .
Этот пример также показывает, что CBC-MAC не может быть используется как устойчивая к коллизиям односторонняя функция: с учетом ключа тривиально создать другое сообщение, которое "хеширует" тот же тег.
При шифровании данных с использованием блочного шифра в режиме цепочки блоков шифра (или другом) обычно вводят вектор инициализации на первую стадию процесса шифрования. Обычно требуется, чтобы этот вектор выбирался случайным образом (nonce ) и чтобы он не повторялся для любого заданного секретного ключа, под которым работает блочный шифр. Это обеспечивает семантическую безопасность, гарантируя, что один и тот же простой текст не будет зашифрован в один и тот же зашифрованный текст, что позволяет злоумышленнику сделать вывод о существовании связи.
При вычислении кода аутентификации сообщения, например, с помощью CBC-MAC, использование вектора инициализации является возможным вектором атаки.
При операции шифрования цепочки блоков зашифрованного текста первый блок простого текста смешивается с вектором инициализации с использованием исключающего ИЛИ (). Результатом этой операции является вход в блочный шифр для шифрования.
Однако при выполнении шифрования и дешифрования мы должны отправлять вектор инициализации в виде обычного текста - обычно в виде блока, непосредственно предшествующего первому блоку зашифрованного текста, - чтобы можно было расшифровать первый блок простого текста. и успешно восстановился. При вычислении MAC нам также потребуется передать вектор инициализации другой стороне в виде обычного текста, чтобы они могли проверить, совпадает ли тег в сообщении с вычисленным ими значением.
Если мы позволяем произвольно выбирать вектор инициализации, из этого следует, что первый блок простого текста потенциально может быть изменен (передан другое сообщение) при создании того же тега сообщения.
Рассмотрим сообщение . В частности, при вычислении тега сообщения для CBC-MAC предположим, что мы выбираем вектор инициализации так, что вычисление MAC начинается с . Это создает пару (сообщение, тег) .
Теперь создайте сообщение . Для каждого бита, измененного в , переверните соответствующий бит в векторе инициализации, чтобы получить вектор инициализации . Отсюда следует, что для вычисления MAC для этого сообщения мы начинаем вычисление с . Поскольку биты как в простом тексте, так и в векторе инициализации были перевернуты в одних и тех же местах, модификация отменяется на этом первом этапе, что означает, что ввод в блочный шифр идентичен вводу для . Если в обычный текст не вносятся дальнейшие изменения, будет получен тот же тег, несмотря на то, что передается другое сообщение.
Если свобода выбора вектора инициализации удалена и все реализации CBC-MAC фиксируются на определенном векторе инициализации (часто вектор нулей, но теоретически это может быть что угодно, если все реализации согласны), эта атака не может продолжаться.
Итак, если злоумышленник может установить IV, который будет использоваться для проверки MAC, он может выполнить произвольную модификацию первого блока данных без аннулирования MAC.
Иногда IV используется в качестве счетчика для предотвращения атак повторного воспроизведения сообщений. Однако, если злоумышленник может предсказать, какой IV будет использоваться для проверки MAC, он или она может воспроизвести ранее наблюдаемое сообщение, изменив первый блок данных, чтобы компенсировать изменение IV, которое будет использоваться для проверки. Например, если злоумышленник заметил сообщение с и знает , он может произвести , который пройдет проверку MAC с помощью .
Простейшая контрмера - зашифровать IV перед его использованием (то есть добавить IV к данным). В качестве альтернативы можно использовать MAC в режиме CFB, потому что в режиме CFB IV зашифровывается до того, как он подвергнется операции XOR с данными.
Другое решение (в случае, если защита от атак повторного воспроизведения сообщений не требуется) - всегда использовать нулевой вектор IV. Обратите внимание, что приведенная выше формула для становится . Итак, поскольку и по определению являются одним и тем же сообщением у них будет одинаковый тег. Это не подделка, а предполагаемое использование CBC-MAC.
FIPS PUB 113 Аутентификация компьютерных данных (теперь устаревшая) США государственный стандарт, который определяет алгоритм CBC-MAC с использованием DES в качестве блочного шифра.
Алгоритм CBC-MAC эквивалентен ISO / IEC 9797-1 MAC-алгоритм 1.