Открыть сервис

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 →