Хэш Keccak-256 онлайн
Оригинальная версия Keccak до финальной правки паддинга NIST — та самая, что использует Ethereum. Считается прямо в браузере — текст никуда не отправляется.
Вычислить Keccak-256
Результат пересчитывается сам, пока вы печатаете. В режиме «По строкам» пустые строки тоже хэшируются — результат всегда совпадает по числу строк со входом. Нужна другая функция — на полной странице калькулятора их 32.
История Keccak-256
Чтобы понять, что такое Keccak-256, нужно понимать хронологию: в 2012 году NIST выбрал победителем конкурса на новый хэш-стандарт алгоритм Keccak — но официальный стандарт SHA-3 (FIPS 202) вышел только в 2015-м. Перед публикацией финального документа NIST внёс небольшую, но значимую правку в схему дополнения сообщения (паддинг) — добавил дополнительные биты домен-разделения, чтобы в будущем можно было безопасно определять родственные функции (вроде SHAKE128/256) без риска коллизий между ними.
Проект Ethereum разрабатывался как раз в переходный период 2013–2014 годов — до выхода финального стандарта — и использовал референсную реализацию Keccak в её тогдашнем виде, с оригинальным паддингом команды-разработчика (Bertoni, Daemen, Peeters, Van Assche), а не с более поздней правкой NIST. Когда в 2015 году вышел официальный SHA3-256 с изменённым паддингом, Ethereum к нему уже не переходил — сеть была запущена, и смена базовой хэш-функции означала бы несовместимость всей истории блоков. Так и получилось, что «Keccak-256» и «SHA3-256» — два разных алгоритма с одинаковым названием происхождения, разным результатом на одной строке и разной судьбой в индустрии.
Как устроен алгоритм
По внутренней механике Keccak-256 — точная копия SHA3-256: то же 1600-битное состояние, то же деление на rate = 1088 и capacity = 512 бит, та же перестановка Keccak-f[1600] на 24 раунда. Разница — в один байт паддинга. SHA3-256 перед выравниванием блока добавляет байт-разделитель 0x06 (кодирует суффикс доменного разделения «01», обязательный по финальному стандарту NIST), а Keccak-256 использует оригинальный минимальный паддинг с байтом 0x01 — без домен-суффикса вообще. Именно из-за этого однобайтового отличия на входе Keccak-256 и SHA3-256 дают на одной и той же строке совершенно разные, никак не связанные друг с другом хэши.
Характеристики
| Параметр | Значение |
|---|---|
| Длина хэша | 256 бит (64 hex-символа) |
| Rate / capacity | 1088 / 512 бит (как у SHA3-256) |
| Перестановка | Keccak-f[1600], 24 раунда |
| Байт паддинга | 0x01 (у SHA3-256 — 0x06) |
| Статус | Не входит в FIPS 202, отдельный де-факто стандарт индустрии блокчейна |
Где применяется
- Ethereum и совместимые с EVM блокчейны — адреса кошельков, хэши транзакций и блоков, селекторы функций смарт-контрактов
- Множество инструментов и библиотек экосистемы Ethereum (web3.js, ethers.js, Solidity — функция
keccak256()) - За пределами блокчейн-экосистемы почти не встречается — там, где нужен официальный SHA-3, используют именно SHA3-256
Частая ошибка новичков в web3-разработке — взять библиотеку с «SHA3-256» и получить не тот хэш, что ожидался в спецификации Ethereum. Если нужна совместимость с блокчейном, важна именно функция с паддингом 0x01, а не официальный SHA3-256 с 0x06.
Криптостойкость
Keccak-256 не взломан — отличие в один байт паддинга не меняет криптографических свойств самой перестановки Keccak-f[1600], на которой держится вся стойкость конструкции. Оба варианта — Keccak-256 и SHA3-256 — унаследовали одинаковый анализ стойкости от команды разработчиков и от финалистов конкурса NIST; выбор между ними определяется только требованиями совместимости с конкретной экосистемой, а не соображениями безопасности.
Пример
Хэш пустой строки — тот самый c5d2460186f7233c..., который часто встречается в исходниках Ethereum как обозначение «пустого» узла дерева.