Contenido

  • ¿Qué es un árbol Merkle?

  • ¿Cómo se construyen los árboles Merkle?

  • ¿Por qué se utilizan las raíces de Merkle en Bitcoin?

    • Minería

    • Verificación

  • Resumen


¿Qué es un árbol Merkle?

El concepto de árbol de Merkle fue propuesto a principios de la década de 1980 por Ralph Merkle, un informático conocido por su trabajo en criptografía de clave pública.

Un árbol de Merkle es una estructura para verificar datos en un conjunto. Se utiliza ampliamente en el campo de las redes peer-to-peer, donde los participantes necesitan intercambiar información y someterla a verificación independiente.

La estructura del árbol de Merkle se basa en funciones hash, por lo que le recomendamos que primero lea el artículo "¿Qué es el hash?"


¿Cómo se construyen los árboles Merkle?

Digamos que descargas un archivo grande. Cuando utilices un programa de código abierto, debes comprobar si el hash del archivo descargado coincide con el hash publicado por los desarrolladores. Si coincide, entonces el archivo en su computadora es exactamente igual a su archivo.

Si los hash son diferentes, entonces descargó un archivo malicioso disfrazado de programa o se descargó incorrectamente y no funcionará. Los problemas de carga también pueden ser una molestia, especialmente si lleva mucho tiempo. En este caso, deberás descargar el archivo nuevamente y esperar que esta vez todo salga bien.

Probablemente estés pensando: "¿Es realmente tan complicado?" Afortunadamente, aquí es donde los árboles Merkle resultan útiles, ya que nos permiten dividir el archivo en partes. Por ejemplo, un archivo de 50 GB se puede dividir en 100 fragmentos de 0,5 GB. En este caso, se descargará por partes, de forma similar a cómo se descargan los archivos a través de un torrent.

El objetivo principal del proceso es obtener un único hash llamado raíz de Merkle que represente cada dato de un archivo. Al utilizar la raíz de Merkle, podemos simplificar enormemente la validación de datos.

Como ejemplo, tomemos un archivo de 8 GB dividido en 8 partes. A cada fragmento se le asigna un nombre de la A a la H y luego se pasa a través de una función hash para producir 8 hashes diferentes.


Каждый из восьми фрагментов проходит через хеш-функцию, чтобы сгенерировать свой хеш.

Cada uno de los ocho fragmentos pasa a través de una función hash para generar su hash.


Así que lo dejamos fuera del camino. Hemos recibido un hash de todos los fragmentos, lo que significa que podemos compararlo con el original y descubrir cuál es el defectuoso, ¿verdad? Es posible, pero sería extremadamente ineficaz. Solo hay ocho fragmentos en nuestro archivo, pero si hay miles de ellos, ¿los analizarías todos y compararías los resultados?

Difícilmente. En su lugar, debe tomar cada par de hashes, concatenarlos y unirlos. Entonces calculamos hA + hB, hC + hD, hE + hF y hG + hH y obtenemos cuatro hashes. Luego realizamos otra ronda de hash para que queden dos hashes. Finalmente, aplicamos hash al par restante y obtenemos el hash principal: la raíz de Merkle (o hash raíz).


Структура напоминает перевернутое дерево. В нижнем ряду находятся «листья», которые переходят в ноды, а те — в корень.

La estructura se asemeja a un árbol al revés. En la fila inferior hay "hojas" que van a los nodos, que van a la raíz.


Entonces tenemos una raíz de Merkle que representa el archivo descargado. Ahora podemos comparar el hash raíz con el hash del creador original. Si coinciden, ¡entonces todo es genial! Si los hashes son diferentes, significa que los datos han sido cambiados, es decir, uno o más fragmentos han creado un hash diferente. Por tanto, cualquier modificación de los datos producirá una raíz de Merkle completamente diferente.

Afortunadamente, podemos encontrar fácilmente el fragmento incorrecto. Digamos que este es él. Primero, consulta los dos últimos hashes que crearon la raíz de Merkle (hABCD y hEFGH). Su hABCD será el mismo que el original porque no hay errores en ese segmento, pero su hEFGH será diferente y deberá verificarse. A continuación, solicitamos hEF y hGH y las comparamos con las nuestras. Dado que la hGH coincidirá, necesitamos hEF. Finalmente, comparamos los hashes hE y hF. Entonces descubrimos que el fragmento incorrecto es hE, lo que significa que debemos volver a descargarlo.

En resumen, un árbol de Merkle se crea dividiendo los datos en muchas partes, que luego se procesan repetidamente para formar una raíz de Merkle. Este sistema facilita la comprobación de que todos los datos estén correctos. En la siguiente sección veremos otros posibles usos.



¿Te preguntas cómo empezar con las criptomonedas? ¡Compre Bitcoin en Binance!



¿Por qué se utilizan las raíces de Merkle en Bitcoin?

Los árboles Merkle tienen muchos usos, pero por ahora estamos interesados ​​en su aplicación en blockchain. Los árboles Merkle son necesarios para trabajar con Bitcoin y muchas otras criptomonedas; son una parte integral de cada bloque y están ubicados en los encabezados de los bloques. Para obtener las hojas del árbol utilizamos el hash de cada transacción (TXID) incluida en el bloque.

En este caso, la raíz de Merkle realiza varias tareas. A continuación, veremos su uso en la minería de criptomonedas y la verificación de transacciones.


Minería

Un bloque de Bitcoin consta de dos partes. La primera parte es el encabezado del bloque, un segmento de tamaño fijo que contiene metadatos del bloque. La segunda parte es una lista de transacciones, cuyo tamaño suele ser mucho mayor que el encabezado, pero puede variar.

Los mineros necesitan analizar los datos varias veces para obtener un resultado que cumpla con ciertas condiciones y extraer un bloque válido. Encontrarlo puede requerir billones de intentos porque los mineros necesitan cambiar el número aleatorio en el encabezado del bloque (nonce) para obtener un nuevo resultado, pero la mayor parte del bloque seguirá siendo el mismo. Puede haber miles de transacciones en un bloque y todas ellas deberán ser sometidas a hash cada vez.

La raíz de Merkle simplifica enormemente este proceso. Durante la minería, todas las transacciones necesarias se alinean en un árbol Merkle. El hash raíz (32 bytes) se coloca en el encabezado del bloque, después de lo cual solo se aplica el hash al encabezado del bloque, no a todo el bloque.

Este método es a prueba de manipulaciones y resume eficazmente todas las transacciones en un bloque en un formato compacto. Sin embargo, es imposible encontrar un encabezado de bloque válido y luego cambiar la lista de transacciones, ya que esto cambiará la raíz de Merkle. Cuando se envía un bloque a otros nodos, estos calculan la raíz a partir de la lista de transacciones. Si no coincide con la raíz del encabezado, el bloque se rechaza.


Verificación

Veamos otra propiedad útil de las raíces de Merkle, que se refiere a los nodos simplificados (que no contienen una copia completa de la cadena de bloques). Si está ejecutando un nodo en un dispositivo con recursos limitados, no necesariamente necesita descargar y codificar todas las transacciones de un bloque. En su lugar, puede simplemente pedirle al nodo completo una prueba de Merkle: prueba de que su transacción está en un bloque específico. Este método fue descrito en detalle por Satoshi Nakamoto en el documento técnico de Bitcoin y a menudo se denomina verificación de pago simplificada (SPV).


Для проверки hD необходимы только хеши красного цвета.

Para comprobar HD, solo se necesitan hashes rojos.


Digamos que necesitamos información sobre una transacción cuyo TXID es hD. Dada hC, podemos calcular hCD. Luego necesitamos hAB para calcular hABCD. Finalmente, hEFGH se puede utilizar para comprobar si la raíz de Merkle resultante coincide con la raíz del encabezado del bloque. En caso afirmativo, esto prueba que la transacción se incluyó en el bloque, ya que es casi imposible crear el mismo hash con datos diferentes.

En el ejemplo anterior, solo aplicamos el hash tres veces, mientras que sin la prueba de Merkle tendríamos que hacerlo siete veces. Dado que los bloques pueden contener miles de transacciones, el uso de pruebas de Merkle puede ahorrar mucho tiempo y recursos informáticos.


Resumen

Los árboles Merkle han demostrado su eficacia en tecnología informática. Son increíblemente útiles en blockchains y permiten verificar fácilmente la información en sistemas distribuidos sin sobrecargar la red con datos innecesarios.

Sin los árboles de Merkle (y las raíces de Merkle), los bloques de Bitcoin y otras criptomonedas serían muy voluminosos. Si bien los nodos livianos pueden tener problemas de privacidad y seguridad, las pruebas de Merkle pueden indicar de manera rentable si las transacciones se incluyeron en un bloque.