Код аутентичности сообщения
Код аутентичности сообщения (MAC, от англ. Message Authentication Code) — это симметричный криптографический механизм, предназначенный для проверки подлинности и целостности данных. MAC представляет собой короткий блок информации (тег), который вычисляется на основе самого сообщения и секретного ключа, известного только отправителю и получателю. В отличие от электронной подписи, код аутентичности не использует асимметричные алгоритмы и не обеспечивает неотказуемость (доказательство авторства для третьей стороны), но обладает гораздо более высокой скоростью вычислений.
История
Концепция кода аутентичности сообщения была впервые формально предложена в 1983 году американскими криптографами Уитфилдом Диффи и Мартином Хеллманом в контексте развития симметричной криптографии. Однако практические реализации появились раньше: в 1970-х годах в банковских системах использовались простые контрольные суммы, дополненные секретным ключом. Первым стандартизированным алгоритмом MAC стал DES-MAC (на основе блочного шифра DES), разработанный в 1980-х годах. В 1999 году Национальный институт стандартов и технологий США (NIST) опубликовал стандарт CMAC (Cipher-based MAC), а в 2002 году — HMAC (Hash-based MAC), который стал де-факто стандартом для интернет-протоколов.
Принцип работы
MAC-алгоритм принимает на вход три параметра: сообщение произвольной длины (M), секретный ключ (K) и, возможно, вектор инициализации. На выходе формируется тег (T) фиксированной длины (обычно от 64 до 512 бит). Процесс проверки заключается в том, что получатель заново вычисляет тег на основе полученного сообщения и своего экземпляра ключа, после чего сравнивает его с переданным тегом. Если теги совпадают, сообщение считается аутентичным и не модифицированным.
Свойства
- Целостность: любое изменение сообщения с высокой вероятностью изменяет тег.
- Подлинность: только владелец секретного ключа может сгенерировать корректный тег для данного сообщения.
- Стойкость к подделке: злоумышленник, не знающий ключа, не может вычислить корректный тег для нового сообщения или подобрать сообщение под заданный тег (задача атаки с выбранным текстом).
Классификация
MAC-алгоритмы делятся на несколько основных типов:
На основе блочных шифров
- CBC-MAC (Cipher Block Chaining MAC): сообщение разбивается на блоки, каждый блок шифруется в режиме сцепления, последний блок используется как тег. Уязвим для атак на сообщения переменной длины, поэтому в стандарте CMAC (NIST SP 800-38B) используется доработка с двумя ключами.
- OMAC (One-Key MAC): упрощённая версия CMAC, требующая только один ключ.
- PMAC (Parallelizable MAC): допускает параллельное вычисление, что повышает производительность на многоядерных процессорах.
На основе хеш-функций
- HMAC (Hash-based MAC): наиболее распространённый тип, описанный в RFC 2104 (1997). Использует криптографическую хеш-функцию (например, SHA-256) и два ключа, полученных из основного ключа. HMAC устойчив к атакам на хеш-функции (например, к коллизиям) и применяется в протоколах TLS, IPsec, SSH.
- KMAC (Keccak-based MAC): основан на хеш-функции SHA-3 и использует конструкцию «губка» (sponge).
На основе потоковых шифров
- Poly1305-AES: разработан Дэниелом Бернштейном в 2005 году. Использует полиномиальное умножение в конечном поле для вычисления тега. В сочетании с шифром ChaCha20 образует популярный набор ChaCha20-Poly1305, применяемый в TLS 1.3 и WireGuard.
Универсальные (UMAC, VMAC)
- UMAC (Universal MAC): основан на универсальном хешировании (семейства хеш-функций, устойчивых к коллизиям). Обеспечивает очень высокую скорость, но требует генерации больших ключей. VMAC — вариант, оптимизированный для 64-битных процессоров.
Применение
Коды аутентичности сообщения широко используются в протоколах и системах, где требуется защита от подмены данных:
- Сетевые протоколы: TLS (HMAC), IPsec (HMAC-SHA256), SSH (HMAC), WireGuard (Poly1305).
- Беспроводные сети: Wi-Fi Protected Access (WPA2/WPA3) использует CCMP (Counter Mode with CBC-MAC) на основе AES.
- Банковские системы: EMV-чипы (банковские карты) применяют MAC для аутентификации транзакций.
- Файловые системы: ZFS использует MAC для проверки целостности метаданных.
- Криптовалюты: некоторые блокчейны (например, Bitcoin) применяют HMAC для генерации детерминированных ключей.
Сравнение с другими механизмами
| Механизм | Ключи | Неотказуемость | Скорость | Применение |
|---|---|---|---|---|
| MAC | Симметричный | Нет | Высокая | Целостность + подлинность |
| Электронная подпись | Асимметричный | Да | Низкая | Юридически значимая аутентификация |
| Хеш-функция | Без ключа | Нет | Очень высокая | Только целостность |
| Контрольная сумма | Без ключа | Нет | Высокая | Обнаружение ошибок |
Критика и уязвимости
- Атаки на длину ключа: при использовании коротких ключей (менее 128 бит) возможен полный перебор. Современные стандарты требуют ключей не менее 128 бит.
- Атаки на реализацию: уязвимости в программной реализации (например, утечка ключа через время выполнения) могут компрометировать MAC. Для защиты применяются постоянные по времени алгоритмы.
- Атаки на повторное использование ключа: если один и тот же ключ используется для шифрования и MAC, возможны комбинированные атаки (например, атака на CBC-MAC в режиме шифрования).
- Атаки на коллизии: для HMAC стойкость к коллизиям хеш-функции не критична, но для CMAC и PMAC коллизии могут привести к подделке тега.
Стандартизация
Основные стандарты, регламентирующие MAC:
- NIST SP 800-38B — CMAC (2005).
- RFC 2104 — HMAC (1997).
- RFC 8439 — ChaCha20-Poly1305 (2018).
- ISO/IEC 9797-1 — MAC-алгоритмы на основе блочных шифров.
- ГОСТ Р 34.11-2012 — в России используется HMAC на основе хеш-функции «Стрибог» (Streebog).
Интересные факты
- В 2011 году была обнаружена уязвимость в реализации HMAC в протоколе TLS 1.0, позволяющая проводить атаку «BEAST» (Browser Exploit Against SSL/TLS). Уязвимость была устранена в TLS 1.1.
- Алгоритм Poly1305 назван в честь числа 2^130 — 5, которое используется в его арифметике.
- MAC-теги могут быть использованы для построения криптографических генераторов псевдослучайных чисел (PRNG) в режиме обратной связи.
Источники
- NIST Special Publication 800-38B: Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication (2005).
- RFC 2104: HMAC: Keyed-Hashing for Message Authentication (1997).
- RFC 8439: ChaCha20 and Poly1305 for IETF Protocols (2018).
- M. Bellare, R. Canetti, H. Krawczyk. Keying Hash Functions for Message Authentication (1996).
- A. Menezes, P. van Oorschot, S. Vanstone. Handbook of Applied Cryptography (1996).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →