SP 800-185
SP 800-185 — это специальная публикация (Special Publication) Национального института стандартов и технологий США (NIST), озаглавленная «SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, ParallelHash, and TupleHash с использованием SHA-3». Документ определяет набор криптографических функций, основанных на стандарте хеширования SHA-3, и расширяет его возможности за счёт создания производных (derived) функций, пригодных для задач аутентификации, генерации ключей, хеширования сообщений и параллельных вычислений. Публикация была выпущена в декабре 2016 года и заменила собой проект (draft) от 2015 года.
История и предпосылки создания
Разработка SP 800-185 стала логическим продолжением стандартизации алгоритма SHA-3, который был принят NIST в 2015 году как FIPS 202 (Federal Information Processing Standard). SHA-3 основан на криптографической конструкции Кеккак (Keccak) и использует губчатую (sponge) функцию. В отличие от SHA-2, SHA-3 обладает иной внутренней структурой, что делает его устойчивым к некоторым классам атак, в том числе к атакам на основе удлинения сообщения (length extension attack).
Однако стандарт FIPS 202 определял только базовые хеш-функции (SHA3-224, SHA3-256, SHA3-384, SHA3-512) и функции расширяемого вывода (SHAKE128, SHAKE256). Для практических приложений требовались более специализированные криптографические примитивы: функции, поддерживающие персонализацию (customization), работу с ключами, параллельную обработку данных и хеширование кортежей (tuple). SP 800-185 был разработан для заполнения этого пробела, предоставляя официальные спецификации и тестовые векторы для таких производных функций.
Основные функции, определённые в SP 800-185
cSHAKE (Customizable SHAKE)
cSHAKE (Customizable SHAKE) — это расширение функций SHAKE128 и SHAKE256, позволяющее задавать пользовательскую строку персонализации (customization string) и имя функции (function name). В отличие от базового SHAKE, где строка персонализации фиксирована (пустая или стандартная), cSHAKE даёт возможность привязывать вывод функции к конкретному контексту или приложению. Это предотвращает коллизии между выходами, полученными в разных целях, даже если входные данные совпадают.
cSHAKE определяется в двух вариантах: cSHAKE128 (с 128-битным уровнем безопасности) и cSHAKE256 (с 256-битным уровнем безопасности). Строка персонализации может быть произвольной длины, что позволяет использовать её для доменной сепарации (domain separation) в криптографических протоколах.
KMAC (Keccak Message Authentication Code)
KMAC — это алгоритм вычисления имитовставки (MAC) на основе губчатой функции Кеккак. Он использует cSHAKE как внутреннюю функцию и принимает на вход ключ, сообщение, длину выхода и необязательную строку персонализации. KMAC обеспечивает аутентификацию сообщения и целостность данных, аналогично HMAC, но с использованием SHA-3.
KMAC существует в двух вариантах: KMAC128 (с 128-битным уровнем безопасности) и KMAC256 (с 256-битным уровнем безопасности). В отличие от HMAC, KMAC не требует двух проходов хеширования и может быть более эффективным на коротких сообщениях. Кроме того, KMAC поддерживает выход произвольной длины, что полезно для генерации ключей или создания длинных аутентификационных тегов.
TupleHash
TupleHash — это функция хеширования кортежей (упорядоченных наборов данных), предназначенная для вычисления хеша от комбинации нескольких полей без риска коллизий, вызванных конкатенацией. При конкатенации строк (например, «AB» + «C» и «A» + «BC») могут дать одинаковый результат, что приводит к коллизиям. TupleHash решает эту проблему, кодируя каждый элемент кортежа с указанием его длины, что гарантирует уникальность представления.
TupleHash использует cSHAKE как внутреннюю функцию и поддерживает персонализацию. Определены TupleHash128 и TupleHash256. Функция широко применяется в протоколах, где требуется хеширование структурированных данных, например, в атрибутных сертификатах, системах контроля версий и криптографических протоколах с множеством полей.
ParallelHash
ParallelHash — это функция хеширования, предназначенная для параллельной обработки больших объёмов данных. В отличие от последовательных хеш-функций (SHA-2, SHA-3), которые обрабатывают данные блоками один за другим, ParallelHash делит входное сообщение на блоки, хеширует каждый блок независимо (с помощью cSHAKE), а затем объединяет результаты. Это позволяет эффективно использовать многоядерные процессоры и ускорить хеширование на современных аппаратных платформах.
ParallelHash также поддерживает персонализацию и задание размера блока. Определены ParallelHash128 и ParallelHash256. Функция особенно полезна при хешировании файлов большого размера, потоковых данных или в облачных вычислениях, где параллелизм является ключевым фактором производительности.
TupleHash с использованием SHA-3 (TupleHash с SHA-3)
В SP 800-185 также определён вариант TupleHash, который напрямую использует SHA-3 (а не cSHAKE) в качестве внутренней функции. Этот вариант предназначен для совместимости с системами, где SHA-3 уже реализован, и не требует внедрения cSHAKE. Однако он не поддерживает персонализацию и имеет фиксированную длину выхода (224, 256, 384 или 512 бит), в отличие от TupleHash на основе cSHAKE, который может выдавать произвольную длину.
Применение и значение
SP 800-185 нашёл применение в ряде криптографических стандартов и протоколов. В частности, cSHAKE используется в стандарте постквантовой криптографии NIST (например, в схемах подписи и шифрования, основанных на решётках), а KMAC применяется в протоколах аутентификации и генерации ключей. TupleHash востребован в системах, где требуется хеширование структурированных данных, например, в блокчейн-технологиях и системах управления цифровыми идентификаторами. ParallelHash используется в приложениях, работающих с большими данными, а также в криптографических библиотеках, оптимизированных для многопоточных вычислений.
Документ SP 800-185 также предоставляет тестовые векторы (test vectors) для всех определённых функций, что позволяет разработчикам проверять корректность реализации. Это важно для обеспечения интероперабельности между различными программными и аппаратными реализациями.
Критика и ограничения
Несмотря на широкое признание, SP 800-185 имеет некоторые ограничения. Во-первых, функции, основанные на cSHAKE, требуют более сложной реализации по сравнению с базовыми хеш-функциями, что может увеличить размер кода и время выполнения на встраиваемых системах. Во-вторых, ParallelHash, хотя и ускоряет обработку на многоядерных процессорах, неэффективен на однопоточных устройствах. В-третьих, некоторые криптографы отмечают, что губчатая конструкция Кеккак, лежащая в основе всех функций, всё ещё менее изучена, чем конструкции на основе сжатия (Merkle–Damgård), хотя к настоящему времени она прошла значительный криптоанализ.
Источники
- NIST Special Publication 800-185: «SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, ParallelHash, and TupleHash with SHA-3», December 2016.
- FIPS PUB 202: «SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions», August 2015.
- NIST. «SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, ParallelHash, and TupleHash with SHA-3» (Draft), 2015.
- Bertoni, G., Daemen, J., Peeters, M., Van Assche, G. «Keccak sponge function family main document», 2011.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →