Un root hash o merkle root, es un tipo de hash especial creado con el fin de facilitar la verificación de datos dentro de un árbol Merkle. Sin duda una estructura informática interesante con usos en muchas áreas y uno de ellos es la tecnología blockchain.
El root hash o hash raíz, es el nombre que se le otorga al hash resultado de un árbol Merkle. Su principal utilidad, es la de servir de marcador para señalar la confiabilidad de la información del árbol Merkle en cuestión. Algo que resulta muy útil dentro de una red P2P.
Para explicar mejor esta situación imaginemos el siguiente ejemplo:
Juan quiere instalar un nodo Bitcoin completo. Durante su inicialización, el nodo Bitcoin debe sincronizarse con la red. Esto con el fin de obtener toda la información acumulada en la cadena de bloques Bitcoin. Para lograr esto, el nuevo nodo Bitcoin descargará toda esta información. Sin embargo, Bitcoin es una red sin confianza que basa su funcionamiento en una serie de funciones criptográficas. Esto con el fin de garantizar la veracidad de la información sin la necesidad de confiar en terceros.
Para ello, hace uso de funciones hash criptográficas como el SHA-256. A medida que el nodo descarga la información, va verificando que los hashes “superiores de confianza” sean correctos. De serlos, el nodo Bitcoin sigue su trabajo de descarga. En caso contrario, desechar la información y comienza a descargar la información de otra nueva fuente en la que todos los hashes de confianza concuerden. Una vez culminada la descarga, el nuevo nodo puede comenzar su trabajo, estando seguro de que toda la información ha sido verificada y es correcta.
El ejemplo dado, nos deja en claro la utilidad del hash raíz a la hora de verificar la autenticidad de los datos recibidos. Pero también es perfectamente aplicable a todas las cadenas de bloques y sus procesos de funcionamiento completos.
¿Cómo se crea un Root hash?
Un hash de raíz se genera a partir de un hash incremental de la información de cada bloque de datos. Este proceso garantiza que cada uno de los bloques de información sean tratados y etiquetados con un hash único e irrepetible. Tomemos por ejemplo realizar un árbol Merkle usando el algoritmo hash SHA-256. En tal caso nuestros bloques de datos son:
Una vez que tenemos a mano los bloques de datos, comenzamos a realizar un hash de cada uno de ellos. Para ello usaremos la función SHA-256 lo que nos daría el siguiente resultado.
Así tenemos que cada bloque lleva asignado un hash SHA-256 único e irrepetible. Este será nuestro marcados para reconocer la autenticidad y la forma en cómo organizaremos nuestro árbol de Merkle. Siguiendo con el procedimiento, nos queda ir uniendo los bloques de datos de la siguiente manera:
Como ven, concatenamos los hash de los bloques cercanos unos con otros en pares. Asi nos queda los pares AB, CD, EF, GH. Al terminar la primera ronda, seguimos construyendo la unión de hashes pero esta vez con los pares ABCD y EFGH. Y finalmente terminamos concatenando todo en un único hash que incluye los hashes de ABCD y EFGH para dar origen a la raíz merkle (ABCDEFGH).
Este último bloque en la parte superior es nuestra root hash o merkle root. Es el hash resultante del Árbol de Merkle.