Bitcoin es la denominación de una cibermoneda inicialmente creada por Satoshi Nakamoto (quizá seudónimo de una persona o de un conjunto de personas) a partir de un artículo publicado en 2008 y en el que se describe el protocolo Bitcoin [bitcoinPaper] y la tecnología de gestión de transacciones y preservación de la información Blockchain. En el artículo se explican los conceptos iniciales de Bitcoin y se propone un esbozo de lo que con el tiempo ha llegado a ser Bitcoin: un sistema de pago electrónico mediante moneda electrónica.
Uno de los componentes criptográficos de Blockchain son los “arboles de Merkle”.
Un árbol de Merkle (Merkle Tree) o árbol de hash, es una construcción en forma de árbol de valores en donde cada nodo interior (nodos que no son nodos finales) es el resultado de aplicar una función de hash (SHA-1, SHA-2, u otra.) sobre el valor de los nodos hijo hasta llegar a un nodo raíz llamado Merkle root del árbol. Pueden ser binarios (cada nodo interior tiene dos descendientes) o no (cada nodo interior tiene un número determinado de descendientes).
La funcionalidad de estos algoritmos es la de permitir verificar de forma eficiente y segura la integridad e inclusión de todos los datos de estructuras de datos grandes. Además, se pueden considerar como una generalización de las cadenas de hash (hash chains), en donde la verificación de un elemento es proporcional al logaritmo del número de nodos del árbol, a diferencia de las cadenas de hash, en donde el coste es lineal con el número de hashes contenidos en la cadena.
Un bloque es un archivo público en el que se guarda de forma permanente (e inalterable) toda la información (transacciones) que se generan en la red Bitcoin (o transacciones de otra cibermoneda, o incluso transacciones no vinculadas a cibermonedas). Cuando una transacción se lanza por parte de su emisor, ésta se distribuye a lo largo de la red esperando ser verificada e incluida en un bloque y, por tanto, recibir una confirmación de validez. Mientras no son incluidas en un bloque, las transacciones esperan en una cola de transacciones pendientes.
De forma resumida, un bloque se divide en dos partes: el encabezado o (block header) y el cuerpo.
El encabezado contiene los siguientes elementos:
- Versión. Contiene la versión del software que ha generado el bloque.
- Hash del bloque anterior. Almacena el hash de 256 bits del bloque immediatamente anterior de la cadena.
- Root del árbol de Merkle. Guarda el hash de 256 bits del root del árbol de Merkle de todas las transacciones recogidas en este bloque.
- Target actual. Parámetro de 256 bits que marca la dificultad de resolución del bloque. Técnicamente es el valor umbral por debajo del cual debe estar el resultado de aplicar el algoritmo de hash sobre el block header.
- El timestamp actual. La hora de generación del bloque en formato timestamp de UNIX.
- Nonce (contador). Es un número de 32 bits que se incrementa iterativamente hasta encontrar un hash sobre el header que cumpla la condición expresada por la variable target y que determina el esfuerzo necesario para la prueba de trabajo (Proof of work).
El cuerpo de un bloque contiene el contenido completo de todas las transacciones agregadas en el mismo.
Gran parte de la seguridad de las cibermonedas basadas en el paper de Satoshi Nakamoto viene dada por el uso de la cadena de bloques o block chain. La cadena es un registro permanente de todas las transacciones que han acontecido en la red de la cibermoneda, formada por bloques encadenados entre sí.
Este registro está replicado en todos los nodos de la red, de forma que todos los nodos tiene una copia completa de la cadena. Ya que en la cadena se almacenan todas las transacciones en orden cronológico, cualquier usuario (incluso externo al funcionamiento de la red), puede verificar el flujo de cibermonedas desde el bloque génesis hasta el último bloque generado.