¿Cómo funciona la función hash Keccak256?

Como la plataforma Ethereum se basa en el algoritmo hash Keccak256, me gustaría comprenderlo mejor.

Mi comprensión aproximada es algo como esto:

una función que acepta un conjunto finito de bits en un cubo de rubik imaginario gigante que luego se desvía de una manera específica. Luego se devuelve un subconjunto de 256 bits. La función tiene la propiedad de que un cambio en un solo bit de entrada hace que la salida cambie de forma impredecible.

¿Es lo anterior aproximadamente cierto? Puede ver de dónde saqué la idea del cubo de rubik si observa la Figura 1 aquí (creo que esta es la especificación correcta).

También está esto , que he leído, pero no me he empapado realmente .

¿Cómo funciona la función hash Keccak256?

Esto podría ser demasiado amplio. Encontré algo que podría ayudar: slideshare.net/RajeevVerma14/keccakpptx (y tiene diagramas de cubo).
Creo que lo mantengo y podemos dejar que la comunidad vote y brinde comentarios (también puede haber formas de editarlo que podrían mejorar la pregunta, pero no sé lo suficiente, así que no he votado), o alguien podría escribir una muy buena respuesta que estas buscando
@eth Quizá elimine las dos últimas preguntas... veamos
Es muy importante que la función reciba un conjunto infinito de bits y produzca una longitud finita de bits .
Tal vez intente revisar la descripción del pseudocódigo en el sitio de su equipo keccak.team/keccak_specs_summary.html. Hay muchos recursos y material, aunque no de muy alto nivel.
@cleanunicorn no debería ser un conjunto ordenado de bits de cualquier tamaño, en cualquier permutación... probablemente haya una forma más sucinta de decirlo.
@atomh33ls No sé cómo expresarlo mejor :(
La construcción de esponja es el núcleo. Divide la entrada en n bloques P0...Pn-1 (relleno) y luego comienza con un bloque de ceros XOR el primer bloque formado P0 y aplica una función de permutación f, la salida de esta función se pasa al siguiente paso que usa P1 y repite hasta que haya usado todos los bloques hasta Pn-1. En este paso, los datos han sido absorbidos. Lo "aprietas" seleccionando una parte del último estado del sistema y aplicándole la función f hasta que obtengas el número deseado de bits en la salida. Esto es muy simplificado, pero es la idea general.

Respuestas (1)

Keccak es bueno porque tiene entradas arbitrarias y un espacio de entrada infinito. Esto permite "hacer un hash" de un archivo súper grande donde cada entrada hace que el estado interno se altere un poco más. El hash debería cambiar por completo si un solo bit de datos en la fuente es diferente, a diferencia de, por ejemplo, un CRC32 o una suma de verificación. Significa que tu contraseña podría tener un millón de caracteres, tal vez. Se almacena en el disco como un hash, mucho más pequeño en tamaño.

Con respecto a Keccak, usa una "construcción de esponja", el señor sabe lo que se lee aquí: https://keccak.team/keccak_specs_summary.html Si entiendo que es una permutación elegida de un conjunto de siete permutaciones de Keccak, denotado supongo por referencia a sus profundidades de bits como b∈{25,50,100,200,400,800,1600}.

El estado está organizado como una matriz de 5×5 carriles, cada uno de longitud w∈{1,2,4,8,16,32,64} y 25 celdas de profundidad. Cuando se implementa en un procesador de 64 bits, un carril de Keccak se puede representar como una palabra ordenada de CPU de 64 bits.

Finalmente, incluso para entretenerse con la idea de que una entrada similar cause colisiones, debe imaginar estos datos atravesando desde la base 25, a través de la base 50, hasta 1600 y viceversa. El dinero inteligente se basa en que es bastante resistente a las colisiones (¿es el objetivo del diseño?).

Comentarios menores: no todos los hash tienen un espacio de entrada infinito, muchos algoritmos hash no pueden aceptar entradas de más de 2^64 bits. Sin embargo, creo que Keccak permite entradas de longitudes arbitrarias. En segundo lugar, un solo cambio de bit de entrada que cambia toda la salida también es cierto (e importante) para las sumas de verificación. La diferencia entre sumas de control y hashes es la reversibilidad.
@jlh saludos He actualizado en base a tu comentario. Creo que los otros romperían el trozo de 2^64 bits y continuarían, ¿no? Supongo que estamos hablando de un punto interesante de tamaño de archivo aquí.