Код аутентификации сообщения
Код аутентификации сообщения (MAC, от англ. Message Authentication Code) — это фиксированный блок данных, который вычисляется на основе исходного сообщения и секретного ключа и служит для проверки подлинности сообщения и его целостности. В отличие от цифровой подписи, MAC использует один и тот же секретный ключ как для генерации кода, так и для его проверки, что делает его симметричным механизмом аутентификации. Основная цель MAC — гарантировать получателю, что сообщение не было изменено в процессе передачи (целостность) и что оно было отправлено именно тем отправителем, который обладает соответствующим секретным ключом (аутентификация источника данных).
Принцип работы
Процесс аутентификации с помощью MAC состоит из двух этапов: генерация кода и его верификация. На стороне отправителя алгоритм MAC принимает на вход сообщение произвольной длины M и секретный ключ K, известный обеим сторонам. На выходе получается код аутентификации C = MAC(K, M). Этот код, как правило, имеет фиксированную длину, например, 128 или 256 бит. Отправитель передаёт получателю пару (M, C). Получатель, используя тот же ключ K и тот же алгоритм, вычисляет ожидаемый код C' = MAC(K, M). Если C' совпадает с полученным C, сообщение считается аутентичным. Любое расхождение свидетельствует либо о модификации сообщения, либо о том, что оно было отправлено не тем лицом, которому известен ключ.
Классификация
Коды аутентификации сообщения делятся на несколько типов в зависимости от способа построения и используемых криптографических примитивов.
MAC на основе блочных шифров
Наиболее распространённые методы построения MAC основаны на блочных шифрах, таких как AES (Advanced Encryption Standard). Алгоритм CBC-MAC (Cipher Block Chaining MAC) является классическим примером. Сообщение разбивается на блоки, каждый блок шифруется в режиме сцепления (CBC), и последний зашифрованный блок или его часть используется в качестве MAC. Однако простой CBC-MAC уязвим для атак на сообщения переменной длины, поэтому на практике применяются его модификации, такие как CMAC (Cipher-based MAC), который использует три ключа, полученные из основного ключа, для защиты от таких атак. Другой стандарт, OMAC (One-key CBC-MAC), является упрощённой версией CMAC, требующей только одного ключа.
MAC на основе хеш-функций
Конструкция HMAC (Hash-based Message Authentication Code) является стандартом де-факто для аутентификации сообщений в интернет-протоколах, таких как TLS, IPsec и SSH. HMAC использует криптографическую хеш-функцию (например, SHA-256) и секретный ключ. Алгоритм HMAC(K, M) = H((K' ⊕ opad) || H((K' ⊕ ipad) || M)), где H — хеш-функция, K' — ключ, дополненный до длины блока хеш-функции, opad и ipad — фиксированные константы (внешняя и внутренняя подкладки). Такая конструкция устойчива к атакам на хеш-функции, включая атаки на коллизии, и обеспечивает безопасность при условии, что хеш-функция является криптостойкой.
MAC на основе универсального хеширования
Этот подход использует семейство хеш-функций, называемых универсальными, которые обеспечивают низкую вероятность коллизий при случайном выборе функции из семейства. Примером является UMAC (Universal MAC) и его вариант VMAC (Very fast MAC). Эти алгоритмы чрезвычайно быстры на современных процессорах, так как используют простые операции, такие как умножение и сложение. Они часто применяются в высокопроизводительных сетевых протоколах, где скорость обработки критична.
Требования к безопасности
Для того чтобы MAC считался криптостойким, он должен удовлетворять следующим условиям:
- Устойчивость к подделке (existential unforgeability): Злоумышленник, не знающий ключа, не должен иметь возможности создать допустимую пару (M, C) для любого нового сообщения M, даже если он может запрашивать MAC для произвольного набора других сообщений (атака с выбором сообщения).
- Устойчивость к коллизиям: Для фиксированного ключа вероятность того, что два разных сообщения дадут один и тот же MAC, должна быть пренебрежимо мала.
- Стойкость к атакам на ключ: Алгоритм не должен раскрывать информацию о ключе, даже если злоумышленник знает большое количество пар (M, C).
Отличие от цифровой подписи
Хотя и MAC, и цифровая подпись решают задачу аутентификации и целостности, между ними есть принципиальные различия. Цифровая подпись использует асимметричную криптографию: закрытый ключ для подписания и открытый ключ для проверки. Это позволяет любому, у кого есть открытый ключ, проверить подпись, что делает цифровую подпись пригодной для публичной верификации. MAC же требует, чтобы ключ был известен только отправителю и получателю, и не может быть проверен третьей стороной. Кроме того, цифровая подпись обеспечивает неотказуемость (non-repudiation): отправитель не может отрицать, что подписал сообщение, так как только он обладает закрытым ключом. MAC такой гарантии не даёт, так как обе стороны имеют доступ к одному и тому же ключу.
Применение
Коды аутентификации сообщения широко используются в различных областях информационной безопасности.
- Сетевые протоколы: Протоколы TLS (Transport Layer Security) и IPsec используют HMAC для аутентификации записей и пакетов. В протоколе SSH (Secure Shell) HMAC применяется для защиты от подмены данных в сессии.
- Аутентификация в банковских системах: В финансовых транзакциях, например, в протоколах EMV (Europay, Mastercard, Visa) для чиповых карт, MAC используется для подтверждения подлинности сообщений между картой и терминалом.
- Защита целостности в облачных хранилищах: При загрузке данных в облако может вычисляться MAC, который затем проверяется при скачивании, чтобы убедиться, что данные не были повреждены или изменены.
- Аутентификация встроенных систем: В системах «Интернета вещей» (IoT) MAC часто применяется для аутентификации команд и данных, передаваемых между устройствами, из-за низкой вычислительной сложности некоторых алгоритмов (например, CMAC на основе AES).
Уязвимости и атаки
Несмотря на криптостойкость, MAC могут быть подвержены атакам, если алгоритм выбран или реализован неправильно.
- Атака повторного воспроизведения (replay attack): Злоумышленник может перехватить пару (M, C) и отправить её повторно. Для защиты от таких атак в сообщение обычно включают временную метку или уникальный номер (nonce).
- Атака на ключ: Если ключ скомпрометирован, все MAC, созданные с его использованием, становятся недействительными. Поэтому ключи должны генерироваться безопасным образом и храниться в защищённом окружении.
- Атака на длину сообщения: Некоторые реализации CBC-MAC уязвимы, если не используется дополнение (padding) или если длина сообщения не фиксирована. Это привело к разработке более безопасных конструкций, таких как CMAC.
- Атака по сторонним каналам (side-channel attack): Время выполнения, потребление энергии или электромагнитное излучение при вычислении MAC могут быть использованы для извлечения информации о ключе. Защита требует использования алгоритмов с постоянным временем выполнения.
Стандартизация
Наиболее распространённые алгоритмы MAC стандартизированы международными и национальными организациями. HMAC определён в RFC 2104 (1997 год) и ANSI X9.71. CMAC описан в NIST SP 800-38B и RFC 4493. UMAC и VMAC стандартизированы в RFC 4418 и RFC 6687 соответственно. В России для целей аутентификации сообщений могут использоваться алгоритмы, основанные на ГОСТ Р 34.11-2012 (Стрибог) и ГОСТ Р 34.13-2015, которые определяют режимы выработки имитовставки (аналога MAC) на основе блочных шифров.
Источники
- Menezes, A. J., van Oorschot, P. C., Vanstone, S. A. (1996). Handbook of Applied Cryptography. CRC Press.
- Stallings, W. (2017). Cryptography and Network Security: Principles and Practice (7th ed.). Pearson.
- RFC 2104: HMAC: Keyed-Hashing for Message Authentication.
- NIST SP 800-38B: Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication.
- ГОСТ Р 34.13-2015: Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →