Хэш Keccak-256 онлайн — калькулятор и разбор алгоритма | lavarden.ru
Войти

Хэш 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 дают на одной и той же строке совершенно разные, никак не связанные друг с другом хэши.

Keccak-256: паддинг 0x01 без доменного суффикса — оригинал 2012 года, использует Ethereum SHA3-256: паддинг 0x06 с доменным суффиксом «01» — финальный стандарт NIST, 2015 ≠ один и тот же текст — разные хэши
Вся механика одинакова — различается только один байт перед последним блоком данных

Характеристики

ПараметрЗначение
Длина хэша256 бит (64 hex-символа)
Rate / capacity1088 / 512 бит (как у SHA3-256)
ПерестановкаKeccak-f[1600], 24 раунда
Байт паддинга0x01 (у SHA3-256 — 0x06)
СтатусНе входит в FIPS 202, отдельный де-факто стандарт индустрии блокчейна

Где применяется

💡

Частая ошибка новичков в web3-разработке — взять библиотеку с «SHA3-256» и получить не тот хэш, что ожидался в спецификации Ethereum. Если нужна совместимость с блокчейном, важна именно функция с паддингом 0x01, а не официальный SHA3-256 с 0x06.

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

Keccak-256 не взломан — отличие в один байт паддинга не меняет криптографических свойств самой перестановки Keccak-f[1600], на которой держится вся стойкость конструкции. Оба варианта — Keccak-256 и SHA3-256 — унаследовали одинаковый анализ стойкости от команды разработчиков и от финалистов конкурса NIST; выбор между ними определяется только требованиями совместимости с конкретной экосистемой, а не соображениями безопасности.

Пример

СтрокаHello, world!
Keccak-256b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4
Пустая строкаc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470

Хэш пустой строки — тот самый c5d2460186f7233c..., который часто встречается в исходниках Ethereum как обозначение «пустого» узла дерева.