Хеш-функция 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 →


