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

SHAKE128

SHAKE128 — это криптографическая хеш-функция с переменной длиной выхода, входящая в семейство SHA-3 (Secure Hash Algorithm 3), стандартизированное Национальным институтом стандартов и технологий США (NIST) в 2015 году. В отличие от классических хеш-функций (например, SHA-256), SHAKE128 является функцией с расширяемым выходом (XOF — eXtendable Output Function), что позволяет генерировать хеш-значение произвольной заданной длины. Алгоритм основан на конструкции «губка» (sponge construction) и использует внутреннюю функцию Keccak, победившую в конкурсе NIST на новый стандарт хеширования. SHAKE128 обеспечивает уровень безопасности, эквивалентный 128-битному (устойчивость к коллизиям и прообразам), при условии, что длина выходного значения не превышает 2^128 бит.

История создания

Разработка SHAKE128 связана с конкурсом NIST на новый стандарт криптографического хеширования, объявленным в 2007 году после обнаружения уязвимостей в SHA-1 и SHA-256. Победителем конкурса в 2012 году стал алгоритм Keccak, разработанный группой криптографов (Гвидо Бертони, Жоан Даймен, Микаэль Питерс и Жиль Ван Ассхе). В 2015 году NIST опубликовал стандарт FIPS PUB 202, в который вошли четыре хеш-функции с фиксированным выходом (SHA3-224, SHA3-256, SHA3-384, SHA3-512) и две функции с расширяемым выходом — SHAKE128 и SHAKE256.

Название «SHAKE» происходит от «Secure Hash Algorithm Keccak» с акцентом на возможность «встряхивания» (shake) для получения произвольной длины выхода. Число 128 в названии указывает на уровень безопасности: 128 бит.

Принцип работы

SHAKE128 основана на конструкции «губка» (sponge construction), которая состоит из двух фаз: впитывания (absorbing) и выжимания (squeezing). Внутреннее состояние алгоритма представляет собой массив битов размером 1600 бит (5×5×64), который обрабатывается с помощью раундовой функции Keccak-f[1600].

Параметры

  • Скорость (rate, r): 1344 бита (168 байт). Определяет количество битов, обрабатываемых за один цикл.
  • Ёмкость (capacity, c): 256 бит. Определяет уровень безопасности (128 бит).
  • Размер внутреннего состояния: 1600 бит (r + c = 1344 + 256 = 1600).

Фаза впитывания

Входное сообщение разбивается на блоки размером r бит (1344 бита). Каждый блок с помощью операции XOR накладывается на первые r бит текущего внутреннего состояния, после чего применяется раундовая функция Keccak-f[1600] (24 раунда). Если длина сообщения не кратна r, выполняется дополнение (padding) по правилу: добавляется бит 1, затем необходимое количество нулевых битов и завершающий бит 1 (так называемое «10*1» дополнение).

Фаза выжимания

После обработки всего сообщения начинается фаза выжимания. Первые r бит внутреннего состояния выдаются как часть выходного значения. Если запрошенная длина выхода превышает r бит, то после выдачи первых r бит снова применяется раундовая функция Keccak-f[1600], и процесс повторяется до тех пор, пока не будет получено необходимое количество бит.

Отличия от SHA-256 и SHA-3

ХарактеристикаSHA-256SHA3-256SHAKE128
ТипХеш-функцияХеш-функцияФункция с расширяемым выходом (XOF)
Длина выходаФиксированная (256 бит)Фиксированная (256 бит)Переменная (от 0 до 2^128 бит)
КонструкцияМеркла-ДамгордаГубка (Keccak)Губка (Keccak)
Внутреннее состояние256/512 бит1600 бит1600 бит
Скорость (r)1088 бит1344 бит
Ёмкость (c)512 бит256 бит
Устойчивость к коллизиям128 бит128 битmin(128 бит, d/2) где d — длина выхода

Основное преимущество SHAKE128 перед SHA-256 и SHA3-256 — возможность получения хеша произвольной длины, что удобно для генерации ключей, псевдослучайных чисел и других задач, где требуется нестандартный размер выхода.

Применение

SHAKE128 используется в различных криптографических протоколах и стандартах:

  • Стандарт подписи ED25519 (RFC 8032): SHAKE128 применяется в варианте Ed25519ctx для хеширования сообщений, хотя основная реализация использует SHA-512.
  • Квантово-устойчивая криптография: алгоритмы, такие как Falcon (подпись на решётках) и SPHINCS+ (подпись на хешах), используют SHAKE128 или SHAKE256 в качестве криптографического примитива.
  • Генерация ключей: в протоколах TLS 1.3 и SSH для получения ключей сеанса.
  • Стандарт NIST SP 800-185: описывает использование SHAKE128 для построения других криптографических функций, таких как cSHAKE (customizable SHAKE) и KMAC (Keccak Message Authentication Code).
  • Блокчейн и криптовалюты: некоторые проекты (например, Ethereum 2.0) используют SHAKE128 для хеширования данных.

Криптостойкость

SHAKE128 обеспечивает следующие уровни безопасности:

  • Устойчивость к коллизиям: 128 бит (при условии, что длина выхода не превышает 256 бит). Для выхода длиной d бит устойчивость к коллизиям составляет min(128, d/2) бит.
  • Устойчивость к прообразам: 128 бит (при условии, что длина выхода не менее 128 бит).
  • Устойчивость ко второму прообразу: 128 бит.

На 2025 год не известно практических атак, снижающих эти показатели. SHAKE128 считается устойчивым к квантовым атакам с использованием алгоритма Гровера (квадратичное ускорение поиска прообраза), что снижает эффективную стойкость до 64 бит, что всё ещё приемлемо для многих приложений.

Реализации

SHAKE128 реализован в большинстве современных криптографических библиотек:

  • OpenSSL (начиная с версии 1.1.1)
  • Libsodium
  • Bouncy Castle (Java)
  • Python (библиотека hashlib с версии 3.6)
  • Go (пакет golang.org/x/crypto/sha3)
  • Rust (библиотека sha3)

Критика

Основные замечания к SHAKE128 связаны с его производительностью: на аппаратном уровне реализация Keccak-f[1600] требует больше ресурсов, чем классические алгоритмы (например, SHA-256), что может быть критично для встраиваемых систем с ограниченными вычислительными мощностями. Кроме того, переменная длина выхода требует от разработчиков явного указания требуемого размера, что может привести к ошибкам (например, случайное указание слишком малой длины снижает криптостойкость).

Источники

  • FIPS PUB 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions (NIST, 2015)
  • NIST SP 800-185: SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash (2016)
  • Бертони Г., Даймен Ж., Питерс М., Ван Ассхе Ж. «Keccak sponge function family» (2011)
  • RFC 8032: Edwards-Curve Digital Signature Algorithm (EdDSA) (2017)
  • Preneel B. «Cryptographic Hash Functions: Theory and Practice» (2010)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →