Какую криптографическую хеш-функцию использует Ethereum?
Многие источники ссылаются на использование криптографической хеш-функции «SHA3» в Ethereum, но проект Ethereum начался до того, как был завершен стандарт SHA3, и был некоторый путаница /противоречие вокруг окончательных параметров, выбранных для стандарта. Какая функция специально сделала Ethereum на самом деле в конечном итоге? Является ли это тем же, что и фактический стандарт SHA3, или один из вариантов в стандарте? Или это параметризация Keccak , которая не соответствует ни одному из вариантов?
2 ответа
Ethereum использует KECCAK-256 . Следует отметить, что это не следует стандарт FIPS-202 (он же SHA-3), который был завершен в августе 2015 года.
В соответствии с этим , NIST изменил дополнение на SHA3-256(M) = KECCAK [512] (M || 01, 256);
который отличался от первоначального дополнения, предложенного командой Keccak. Кажется, что теперь люди называют «оригинальное» SHA3 Keccak хэширование «Keccak» и новый стандарт NIST SHA3 как «SHA-3».
Используя этот онлайн-генератор и Solidity Online Compiler , я проверил разницу между Keccak-256 и SHA3-256. Я хэшировал слово тестирование с помощью Ethereum и двух алгоритмов хэширования SHA3:
Функция Ethereum SHA3 в Solidity = 5f16f4c7f149ac4f9510d9cf8cf384038ad348b3bcdc01915f95de12df9d1b02
Keccak-256 = 5f16f4c7f149ac4f9510d9cf8cf384038ad348b3bcdc01915f95de12df9d1b02
SHA3-256 (стандарт NIST) = 7f5979fb78f082e8b1c676635db8795c4ac6faba03525fb708cb5fd68fd40c5e
Чтобы сделать более понятным, что Ethereum использует KECCAK-256 вместо стандартизованной хэш-функции SHA-3 NIST, Solidity 0.4.3 ввел keccak256
. (Это псевдоним sha3
, что означает, что keccak256
дает идентичные результаты sha3
, но с намерением избежать путаница , особенно для разработчиков, новых для Ethereum .) Рекомендуется использовать новый код keccak256
вместо sha3
.