¿Qué función hash criptográfica usa Ethereum?

Muchas fuentes se refieren al uso de la función hash criptográfica "SHA3" dentro de Ethereum, pero el proyecto Ethereum comenzó antes de que se finalizara el estándar SHA3, y hubo cierta confusión/controversia en torno a los parámetros finales seleccionados para el estándar. ¿Con qué función específicamente terminó Ethereum? ¿Es lo mismo que el estándar SHA3 real o una de las variantes dentro del estándar? ¿O es una parametrización de Keccak que no coincide con ninguna de las variantes?

Respuestas (2)

Ethereum usa KECCAK-256 . Cabe señalar que no sigue el estándar basado en FIPS-202 (también conocido como SHA-3), que se finalizó en agosto de 2015.

De acuerdo con esto , NIST cambió el relleno a SHA3-256(M) = KECCAK [512] (M || 01, 256).Esto era diferente del relleno propuesto por el equipo de Keccak en la versión 3 de la presentación de Keccak SHA-3 (versión final ganadora) . La diferencia son los bits '01' adicionales que se agregan al mensaje. La gente ahora llama "Keccak" al hash SHA-3 Keccak de la "versión 3 enviada" y "SHA-3" al estándar NIST SHA-3 finalizado.

Usando este generador en línea y el Compilador en línea de Solidity , probé la diferencia entre Keccak-256 y SHA3-256. Hice el hash de la prueba de palabras usando Ethereum y los 2 algoritmos de hash SHA3:

Función Ethereum SHA3 en Solidity =5f16f4c7f149ac4f9510d9cf8cf384038ad348b3bcdc01915f95de12df9d1b02

Keccak-256 =5f16f4c7f149ac4f9510d9cf8cf384038ad348b3bcdc01915f95de12df9d1b02

SHA3-256 (estándar NIST) =7f5979fb78f082e8b1c676635db8795c4ac6faba03525fb708cb5fd68fd40c5e

En aras de la claridad, creo que deberíamos llamarlo "Keccak-256" en lugar de cualquier cosa que diga explícitamente "SHA3".
Usted no está solo. Consulte este EIP .
lol, sí familiarizado con eso. Pero en realidad quise decir aquí en la respuesta, para que no confundamos a los lectores.
Buena idea @Jeff. Cambié la redacción.
Ah, y excelente respuesta por cierto. Todos los que lean esto, favor de votar esta respuesta. ¡Es un ejemplo ideal del tipo de respuestas que nos gustaría tener en este sitio!
Se ha introducido Solidity 0.4.3keccak256 , un alias que se puede usar de forma segura como reemplazo de sha3.
¿Cómo se pronuncia "keccak"?
@MattSayar [kɛtʃak], como "ketchak", como se ve aquí: quora.com/Cryptography-How-should-you-pronounce-Keccak
El enlace a keccak-256 en su primera línea está roto. Redirige a un archivo de noticias. ¿Tienes un enlace actualizado al algoritmo?

Para dejar más claro que Ethereum utiliza KECCAK-256 en lugar de la función hash SHA-3 estandarizada por NIST, se ha introducido Solidity 0.4.3keccak256 . (Es un alias de sha3, lo que significa que keccak256produce resultados idénticos a sha3, pero con la intención de evitar confusiones , especialmente para los desarrolladores nuevos en Ethereum). Se recomienda usar código nuevo keccak256en lugar de sha3.