Введение
Информация, используемая для аутентификации и проверки целостности сообщений.
В криптографии код аутентификации сообщений (MAC), иногда называемый тегом аутентификации, представляет собой небольшой объем данных, используемый для подтверждения подлинности и проверки целостности сообщения. Иными словами, для подтверждения того, что сообщение исходит от заявленного отправителя (его подлинности) и не было изменено (его целостности). Значение MAC позволяет проверяющим, обладающим секретным ключом, обнаруживать любые изменения в содержимом сообщения.
Терминология
Термин "код целостности сообщения" (MIC) часто используется вместо термина "MAC", особенно в контексте коммуникаций, чтобы отличать его от использования последнего в качестве MAC-адреса (адреса контроля доступа к среде). Однако некоторые авторы используют MIC для обозначения дайджеста сообщения, который предназначен лишь для уникальной, но непрозрачной идентификации отдельного сообщения. RFC 4949 рекомендует избегать использования термина "код целостности сообщения" (MIC) и вместо этого использовать контрольную сумму, код обнаружения ошибок, хеш, хеш с ключом, код аутентификации сообщения или защищенную контрольную сумму.
Безопасность
Хотя функции MAC похожи на криптографические хеш-функции, они предъявляют иные требования к безопасности. Чтобы считаться безопасной, функция MAC должна быть устойчива к экзистенциальной подделке при атаках с выбранными сообщениями. Это означает, что даже если злоумышленник имеет доступ к оракулу, владеющему секретным ключом и генерирующему MAC для сообщений по выбору злоумышленника, он не сможет угадать MAC для других сообщений (которые не использовались для запроса к оракулу), не выполнив нереально больших объемов вычислений. MAC отличаются от цифровых подписей тем, что значения MAC генерируются и проверяются с использованием одного и того же секретного ключа. Это подразумевает, что отправитель и получатель сообщения должны договориться об одном и том же ключе перед началом обмена данными, как это происходит при симметричном шифровании. По той же причине MAC не обеспечивают свойство неотрекаемости, предоставляемое цифровыми подписями, особенно в случае общедоступного секретного ключа, используемого в сети: любой пользователь, способный проверить MAC, также может генерировать MAC для других сообщений. В отличие от этого, цифровая подпись генерируется с использованием закрытого ключа пары ключей, что относится к криптографии с открытым ключом. Алгоритмы хеширования с внутренним ключом, такие как SipHash, также по определению являются MAC и могут быть даже быстрее, чем MAC, основанные на универсальном хешировании. Кроме того, алгоритм MAC может намеренно комбинировать два или более криптографических примитива, чтобы сохранить защиту, даже если один из них впоследствии окажется уязвимым. Например, в версиях Transport Layer Security (TLS) до 1.2 входные данные разделяются на две части, каждая из которых обрабатывается с помощью различных хеш-примитивов (SHA-1 и SHA-2), а затем результат их XOR-сложения используется для формирования MAC.
Одноразовый MAC
Универсальный хэшинг и, в частности, парно независимые хеш-функции обеспечивают безопасный код аутентификации сообщения, пока ключ используется не более одного раза. Это можно рассматривать как одноразовый шифр для аутентификации. Самая простая такая парно независимая хеш-функция определяется случайным ключом , а тег MAC для сообщения m вычисляется как , где p – простое число. В более общем случае, k независимых хеш-функций обеспечивают безопасный код аутентификации сообщения, пока ключ используется менее k раз для k различных независимых хеш-функций. Коды аутентификации сообщений и аутентификация источника данных также рассматривались в контексте квантовой криптографии. В отличие от других криптографических задач, таких как распределение ключей, для достаточно широкого класса квантовых MAC было показано, что квантовые ресурсы не дают никакого преимущества по сравнению с безусловно безопасными одноразовыми классическими MAC.
Пример использования MAC
В этом примере отправитель сообщения пропускает его через MAC-алгоритм для получения метки данных MAC. Затем сообщение и метка MAC отправляются получателю. Получатель, в свою очередь, прогоняет часть сообщения передачи через тот же MAC-алгоритм, используя тот же ключ, и генерирует вторую метку данных MAC. Затем получатель сравнивает первую метку MAC, полученную в передаче, со второй сгенерированной меткой MAC. Если они идентичны, получатель может с уверенностью предположить, что сообщение не было изменено или подделано во время передачи (обеспечение целостности данных). Однако, чтобы получатель мог обнаружить атаки повторной отправки, само сообщение должно содержать данные, гарантирующие, что это сообщение может быть отправлено только один раз (например, временную метку, порядковый номер или использование одноразового MAC). В противном случае злоумышленник может – даже не понимая его содержания – записать это сообщение и воспроизвести его позже, получив тот же результат, что и от исходного отправителя.