Glosario cripto

Keccak-256

Definición

Keccak-256 es la función hash que usa Ethereum para derivar direcciones, identificar funciones de contratos y ubicar datos; difiere un poco de SHA3-256.

Keccak ganó en 2012 el concurso SHA-3 del Gobierno de Estados Unidos. Ethereum lo adoptó antes de que se cerrara el estándar, y después el NIST cambió la regla de relleno, así que el SHA3-256 oficial produce resultados distintos del Keccak-256 que usa Ethereum. Por eso las bibliotecas los nombran por separado, y confundirlos es un error clásico de los desarrolladores.

La función está por todas partes en la EVM. Una dirección de Ethereum son los últimos 20 bytes del hash Keccak-256 de la clave pública. Las funciones de los contratos se identifican con los cuatro primeros bytes del hash de su firma, de modo que transfer(address,uint256) se convierte en 0xa9059cbb. Los temas de los eventos, las posiciones de almacenamiento de los mapeos, las claves del árbol Merkle Patricia y muchos esquemas de firma también dependen de ella, y la EVM tiene un código de operación propio para calcularla.

Keccak-256 no tiene debilidades prácticas conocidas, y las funciones hash se consideran relativamente resistentes a los ataques cuánticos. Los selectores de función, al ser tan cortos, pueden coincidir por casualidad, algo que los atacantes han aprovechado para camuflar funciones maliciosas en contratos de apariencia inofensiva.

Ejemplo

Un desarrollador calcula el Keccak-256 del texto transfer(address,uint256) y toma los cuatro primeros bytes, 0xa9059cbb, exactamente lo que aparece al inicio de los datos de cada transferencia ERC-20.

Términos relacionados