Sonido pero cambio incorrecto en Merkle-tree

Del documento técnico, el primer paso para verificar la validez del bloque es:

Compruebe si el bloque anterior al que hace referencia el bloque existe y es válido.

Con respecto a un árbol merkle que propaga el cambio hacia arriba ante un cambio en cualquiera de las notas compuestas:

La razón por la que esto funciona es que los hashes se propagan hacia arriba: si un usuario malintencionado intenta intercambiar una transacción falsa en la parte inferior de un árbol de Merkle, este cambio provocará un cambio en el nodo de arriba y luego un cambio en el nodo de arriba. , cambiando finalmente la raíz del árbol y, por lo tanto, el hash del bloque, lo que hace que el protocolo lo registre como un bloque completamente diferente (casi con certeza con una prueba de trabajo no válida).

¿No sería posible hacer un cambio en el árbol Merkle de modo que el bloque actual que se está verificando no cambie y, por lo tanto, sea válido ?

No, porque, como citaste, un pequeño cambio en el árbol se propagará a través de todo el árbol, haciendo que sea completamente diferente. Encontré este artículo de Vitalik extremadamente útil para comprender.

Respuestas (1)

Como ejemplo, tomemos un árbol merkle muy simple, con cuatro hojas idénticas, L.

Nuestro árbol se parece a:

                  hash(A, A)
                 /          \
       A = hash(L,L)        A = hash(L,L)
         /      \             /      \
        L        L           L        L

Ahora, si cambiamos la última hoja de La M, obtenemos:

                  hash(A, B)
                 /          \
       A = hash(L,L)        B = hash(L,M)
         /      \             /      \
        L        L           L        M

Observe cómo un solo cambio se propaga a través de su ascendencia, hasta llegar a la raíz. Dado que la raíz de merkle es parte del encabezado del bloque y está protegida por el algoritmo PoW, no es posible alterar ningún elemento (incluso los nodos intermedios) en un árbol de merkle sin invalidar el bloque.

Por lo tanto, no hay absolutamente ningún cambio que se pueda hacer en ningún árbol Merkle existente que haga, B = A. Creo que la palabra que estoy buscando aquí es algo cercano a una colisión para el hash.
Necesitaría una colisión hash, que actualmente no se cree que sea práctica para keccak256 o sha256d