KMAC
KMAC — это семейство алгоритмов аутентификации сообщений (MAC, Message Authentication Code), основанное на блочном шифре и использующее ключевую хеш-функцию для обеспечения целостности и подлинности данных. KMAC (KECCAK Message Authentication Code) является частью стандарта SHA-3 (Secure Hash Algorithm 3), разработанного Национальным институтом стандартов и технологий США (NIST) в 2015 году. Алгоритм базируется на криптографической губке (sponge construction) KECCAK, которая лежит в основе хеш-функций SHA-3. KMAC обеспечивает защиту от подделки сообщений путём вычисления кода аутентификации, зависящего от секретного ключа и передаваемых данных.
История и стандартизация
KMAC был разработан как часть семейства SHA-3, которое было введено в 2015 году после конкурса, проведённого NIST. SHA-3 пришёл на смену SHA-2, который остаётся широко используемым, но уязвим для некоторых атак на основе коллизий. KMAC, как и другие алгоритмы на основе KECCAK (например, SHAKE128 и SHAKE256), использует губчатую конструкцию, которая обеспечивает гибкость в длине выходного кода. В 2016 году NIST опубликовал спецификацию KMAC в документе SP 800-185, где описаны три варианта: KMAC128, KMAC256 и KMACXOF256. KMAC был стандартизирован для применения в системах, требующих высокой безопасности, таких как криптографические протоколы, цифровые подписи и защита данных в государственных и коммерческих системах.
Принцип работы
KMAC основан на губчатой конструкции KECCAK, которая состоит из трёх этапов: абсорбция (впитывание данных), сжатие (обработка) и выжимание (генерация выходного кода). В отличие от традиционных MAC-алгоритмов, таких как HMAC (Hash-Based Message Authentication Code), KMAC использует ключ как часть входных данных, что повышает устойчивость к атакам. Алгоритм включает следующие шаги:
- Инициализация: задаётся секретный ключ K, который дополняется до размера блока (например, 168 байт для KMAC128).
- Абсорбция: данные сообщения M разбиваются на блоки, которые последовательно обрабатываются через губку. Ключ и сообщение объединяются с использованием функции pad10*1, которая добавляет биты выравнивания для заполнения блока.
- Выжимание: после обработки всех блоков из губки извлекается код аутентификации заданной длины L (например, 128 или 256 бит). KMAC позволяет генерировать код произвольной длины, что отличает его от фиксированных MAC-алгоритмов.
KMAC использует два режима: KMAC128 (с длиной кода до 128 бит) и KMAC256 (до 256 бит), а также вариант KMACXOF256, который является расширяемой выходной функцией (XOF) и может генерировать код любой длины.
Виды и параметры
KMAC включает несколько вариантов, различающихся по длине выходного кода и применению:
- KMAC128: генерирует код длиной от 1 до 128 бит, использует внутреннюю губку с ёмкостью 256 бит. Подходит для приложений с ограниченными ресурсами, таких как встраиваемые системы.
- KMAC256: генерирует код длиной от 1 до 256 бит, использует ёмкость 512 бит. Обеспечивает более высокую криптостойкость, рекомендован для критически важных систем.
- KMACXOF256: вариант с расширяемым выходом, позволяющий генерировать код любой длины (например, до 1024 бит). Использует ёмкость 512 бит и подходит для протоколов, где требуется гибкость.
Параметры KMAC включают функцию персонализации (customization string), которая позволяет различать экземпляры алгоритма для разных приложений, что предотвращает перекрёстные атаки. Также используется параметр S (salt) для дополнительной защиты.
Сравнение с другими алгоритмами
KMAC отличается от HMAC, который основан на хеш-функциях SHA-1 или SHA-2. HMAC использует два прохода хеширования с ключом, что делает его устойчивым к атакам на длину сообщения, но менее эффективным на больших объёмах данных. KMAC, благодаря губчатой конструкции, обрабатывает данные за один проход, что повышает производительность, особенно при потоковой передаче. В отличие от CMAC (Cipher-Based MAC), который использует блочный шифр (например, AES), KMAC не требует шифрования данных, что упрощает реализацию. Однако KMAC менее распространён в промышленных стандартах, чем HMAC, который поддерживается в большинстве криптографических библиотек.
Применение
KMAC используется в следующих областях:
- Криптографические протоколы: для аутентификации сообщений в протоколах TLS 1.3, SSH и IPsec (в экспериментальных реализациях).
- Цифровые подписи: в схемах, где требуется защита целостности данных, например, в системах электронного документооборота.
- Блокчейн и криптовалюты: для проверки транзакций и генерации хешей, так как KMAC устойчив к коллизиям.
- Встраиваемые системы: благодаря низким вычислительным затратам, KMAC применяется в устройствах Интернета вещей (IoT), таких как датчики и контроллеры.
- Государственные стандарты: в США KMAC рекомендован для защиты секретной информации в правительственных системах.
В России KMAC не стандартизирован, но может применяться в коммерческих продуктах, соответствующих международным стандартам. Вместо него в российской криптографии используются алгоритмы ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012 (Стрибог), которые основаны на блочных шифрах и хеш-функциях, не связанных с KMAC.
Критика и ограничения
KMAC, как и другие алгоритмы на основе KECCAK, имеет ограничения:
- Скорость: на малых объёмах данных KMAC может быть медленнее HMAC из-за накладных расходов на инициализацию губки.
- Сложность реализации: губчатая конструкция требует точного управления состоянием, что повышает риск ошибок в программных реализациях.
- Отсутствие широкой поддержки: KMAC не включён в большинство стандартных криптографических библиотек (например, OpenSSL), что ограничивает его применение в массовых продуктах.
- Уязвимость к побочным атакам: как и другие MAC-алгоритмы, KMAC может быть подвержен атакам по времени или энергопотреблению, если не реализован с защитой.
Тем не менее, KMAC считается безопасным при правильной реализации и рекомендован NIST для использования в системах, требующих высокой криптостойкости.
Интересные факты
- KMAC является частью семейства SHA-3, которое было разработано после того, как в 2005 году были найдены коллизии для SHA-1.
- Алгоритм KECCAK, лежащий в основе KMAC, был создан бельгийскими криптографами Гвидо Бертони, Джоан Даймен и Микаэлем Питерсом.
- KMAC поддерживает персонализацию, что позволяет использовать один и тот же ключ для разных приложений без риска перекрёстных атак.
- В 2023 году NIST выпустил обновлённые рекомендации по использованию KMAC в постквантовой криптографии, что делает его перспективным для будущих систем.
Источники
- NIST SP 800-185: SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash (2016).
- FIPS PUB 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions (2015).
- Бертони Г., Даймен Д., Питерс М. The KECCAK Reference (2011).
- Криптографические алгоритмы на основе губчатой конструкции: обзор и анализ (журнал «Криптография и безопасность», 2020).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →