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

Хеш-функция Keccak-256

Keccak-256 — это криптографическая хеш-функция, принадлежащая семейству алгоритмов Keccak, которая стала победителем конкурса SHA-3, проведённого Национальным институтом стандартов и технологий США (NIST) в 2012 году. Функция Keccak-256 генерирует выходное значение (дайджест) фиксированной длины в 256 бит (32 байта) для произвольного входного массива данных. В отличие от более ранних алгоритмов семейства SHA-2, Keccak основан на конструкции «губка» (sponge construction), что обеспечивает иной подход к внутренней архитектуре и повышенную устойчивость к ряду атак.

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

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

Конструкция «губка»

В основе Keccak лежит итеративная конструкция «губка», которая состоит из двух фаз: абсорбции (впитывания) и выжимания (отжима). Входные данные разбиваются на блоки фиксированного размера (битрейт r), которые последовательно накладываются (XOR) на часть внутреннего состояния. Внутреннее состояние представляет собой трёхмерный массив из 5×5×64 бит (для Keccak-256 суммарный размер состояния составляет 1600 бит). После обработки всех входных блоков происходит фаза выжимания, в ходе которой из состояния извлекаются выходные биты. Если требуемая длина дайджеста превышает битрейт, процесс повторяется с дополнительными итерациями функции перестановки.

Функция перестановки Keccak-f[1600] состоит из 24 раундов, каждый из которых включает пять последовательных операций: θ (тета), ρ (ро), π (пи), χ (хи) и ι (йота). Эти операции обеспечивают диффузию и конфузию данных, что делает алгоритм устойчивым к дифференциальному и линейному криптоанализу.

Характеристики и безопасность

Keccak-256 обладает следующими ключевыми характеристиками:

  • Длина выхода: 256 бит.
  • Размер внутреннего состояния: 1600 бит.
  • Битрейт (r): 1088 бит (для Keccak-256).
  • Ёмкость (c): 512 бит (разница между размером состояния и битрейтом).

Ёмкость является критическим параметром безопасности: она определяет стойкость алгоритма к коллизиям и атакам нахождения прообраза. Для Keccak-256 уровень безопасности оценивается как 128 бит, что соответствует стандартным требованиям для криптографических хеш-функций. На сегодняшний день не существует практических атак, позволяющих найти коллизию или прообраз для полного раунда Keccak-256.

Применение в блокчейне Ethereum

Наиболее массовое применение Keccak-256 получила в криптовалюте Ethereum. Именно эта функция используется для вычисления адресов кошельков (путём хеширования открытого ключа), создания идентификаторов транзакций, а также в механизмах консенсуса и смарт-контрактах. Важно отметить, что Ethereum использует оригинальную версию Keccak, а не стандартизированную SHA3-256, что приводит к различиям в выходных значениях при одинаковых входных данных. Это различие часто вызывает путаницу у разработчиков, однако является устоявшимся техническим решением экосистемы.

Сравнение с SHA-256

Хотя Keccak-256 и SHA-256 (из семейства SHA-2) имеют одинаковую длину выходного дайджеста, их внутренняя архитектура принципиально различна. SHA-256 основан на конструкции Меркла — Дамгора, которая уязвима к атакам удлинения сообщения, в то время как конструкция «губка» Keccak лишена этого недостатка. Кроме того, Keccak демонстрирует более высокую скорость работы на программных реализациях в ряде сценариев и лучшую устойчивость к атакам по сторонним каналам при аппаратной реализации.

Интересные факты

  • Название «Keccak» является акронимом от фразы «KECCAK» (Keyed and Extended Cryptographic Construction with Absorbing and Kicking), хотя сами авторы иногда интерпретируют его как «Kechak» — индонезийское название обезьяны.
  • В отличие от SHA-2, Keccak не подвержен атаке удлинения сообщения, что делает его предпочтительным для использования в протоколах аутентификации сообщений (HMAC).
  • Алгоритм Keccak был разработан бельгийскими криптографами, которые также участвовали в создании алгоритма AES.

Источники

  • FIPS 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions, NIST, 2015.
  • Бертони Г., Даймен Ж., Питерс М., Ван Аше Ж. «Keccak specifications», 2011.
  • Официальная документация Ethereum Yellow Paper, 2023.

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

На главную BFOmetr →