Какую криптографическую хеш-функцию использует Ethereum?

Многие источники ссылаются на использование криптографической хеш-функции «SHA3» в Ethereum, но проект Ethereum начался до того, как был завершен стандарт SHA3, и возникла некоторая путаница/противоречие по поводу окончательных параметров, выбранных для стандарта. Какая конкретно функция на самом деле оказалась у Эфириума? Это то же самое, что и фактический стандарт SHA3, или один из вариантов стандарта? Или это параметризация Keccak , которая не соответствует ни одному из вариантов?

Ответы (2)

Ethereum использует KECCAK-256 . Следует отметить, что он не соответствует стандарту на основе FIPS-202 (он же SHA-3), который был окончательно доработан в августе 2015 года.

В соответствии с этим NIST изменил заполнение на SHA3-256(M) = KECCAK [512] (M || 01, 256).Это отличалось от заполнения, предложенного командой Keccak в версии 3 представления Keccak SHA-3 (окончательная, победившая версия) . Разница заключается в дополнительных битах «01», добавленных к сообщению. Теперь люди называют «представленную версию 3» хеширования SHA-3 Keccak «Keccak», а окончательный стандарт NIST SHA-3 — «SHA-3».

С помощью этого онлайн-генератора и онлайн-компилятора Solidity я протестировал разницу между Keccak-256 и SHA3-256. Я хэшировал слово testing с помощью Ethereum и двух алгоритмов хеширования SHA3:

Функция Ethereum SHA3 в Solidity =5f16f4c7f149ac4f9510d9cf8cf384038ad348b3bcdc01915f95de12df9d1b02

Кекчак-256 =5f16f4c7f149ac4f9510d9cf8cf384038ad348b3bcdc01915f95de12df9d1b02

SHA3-256 (стандарт NIST) =7f5979fb78f082e8b1c676635db8795c4ac6faba03525fb708cb5fd68fd40c5e

Для ясности я думаю, что мы должны называть его «Keccak-256», а не что-либо, что явно говорит «SHA3».
Ты не одинок. См. этот EIP .
лол, да знаком с этим. Но я на самом деле имел в виду здесь в ответе, чтобы мы не путали читателей.
Хорошая идея @Jeff. Я изменил формулировку.
О, кстати, отличный ответ. Все, кто читает это, пожалуйста, проголосуйте за этот ответ. Это идеальный пример тех ответов, которые мы хотели бы видеть на этом сайте!!
В Solidity 0.4.3keccak256 появился псевдоним , который можно безопасно использовать в качестве замены для sha3.
Как произносится "кеччак"?
@MattSayar [kɛtʃak], например «кетчак», как показано здесь: quora.com/Cryptography-How-should-you-pronounce-Keccak
Ссылка на keccak-256 в вашей первой строке не работает. Он перенаправляет в архив новостей. У вас есть обновленная ссылка на алгоритм?

Чтобы было понятнее, что Ethereum использует KECCAK-256 вместо стандартизированной NIST хэш-функции SHA-3, Solidity 0.4.3 представилаkeccak256 . (Это псевдоним для sha3, что означает, что он keccak256дает результаты, идентичные sha3, но с целью избежать путаницы , особенно для разработчиков, плохо знакомых с Ethereum.) Рекомендуется использовать новый код keccak256вместо sha3.