Blockchain (IV). Las entrañas de bitcoin. Transacciones, criptografía y ASICs
Pero por otro lado, dónde estaría la emoción de todo esto si no cacharreamos un poco y tratamos de entender cómo encajan por fin los engranajes. Entendamos un poco mejor qué mecanismos vinculan nuestros eWallets y qué ocurre con los BTCs en los grandes pools de minería. Para ello tenemos que entender cómo se crean y almacenan las transacciones y en qué consiste la prueba de trabajo, uno de los procesos más importantes del bitcoin.

Transacciones
Nunca antes la expresión "mover el dinero" había cobrado más sentido que en bitcoin. Porque, en realidad… un individuo no posee BTCs, sino que únicamente tiene un recuento de las transacciones de BTCs que apuntan a su cartera. Incluso los mineros que han obtenido un premio por completar un bloque del blockchain reciben su incentivo gracias al envío de una transacción, con un origen vacío, hacia sus respectivas carteras. Por tanto, todo el conglomerado de bitcoins se basa en una ida y venida constante de criptomonedas transfiriéndose entre monederos virtuales.
Cada transacción realizada en blockchain incluye, de manera muy simplificada:
- Entrada: Son referencias a otras transacciones anteriores. Si tenemos que realizar un pago de 5 BTCs al menos necesitamos referenciar una serie de transacciones que apunten a nuestra cartera y sumen al menos 5 BTCs. Dichas referencias se hacen utilizando el valor hash (SHA-256) de cada una de dichas transacciones.
- Cuerpo: Está formado por una clave pública y una firma digital. La clave pública se usa para garantizar que somos legítimos propietarios de las transacciones indicadas en la entrada. El cliente bitcoin (cartera) genera un hash de esta transacción de manera simplificada y utiliza la clave privada del usuario para obtener una firma digital basada en el algoritmo de curva elíptica (ECDSA). Gracias a que se adjunta la clave pública del propietario se podrá comprobar también la validez de esta firma y por tanto que el usuario actual es el legítimo usuario de esta transacción.
- Salida: Contiene el valor de BTCs a transferir y las direcciones donde serán transferidos. Cada una de esas direcciones es una eWallet distinta, cada una referenciada mediante un hash, que en realidad es la clave pública de esa cartera de destino. Como las transacciones que se usan como entradas son cantidades indivisibles, lo habitual es que la cantidad de BTCs en la entrada rara vez coincide con la que queremos enviar. Esto requiere un ajuste que veremos con un ejemplo:

La gran cantidad de transacciones que se generan a nivel mundial tienen que ser introducidas en el blockchain y para ello se buscó una estructura que por un lado permita establecer unas garantías matemáticas de consistencia e incorruptibilidad. Mientras que por el otro debe permitir una gestión ágil que permita un rápido procesamiento que no lastre la mecánica global de bitcoin. Así fue incorporado el árbol de Merkle como estructura organizativa de las transacciones, cumpliendo con estos requisitos.
Árbol de Merkle
Esta estructura diseñada por Ralph Merkle toma todas las transacciones (que deben ser una cantidad par) y las agrupa dos a dos, generando un hash SHA-256 por cada uno de estos grupos. Este conjunto de hashes se vuelve a agrupar de la misma forma generando nuevos hashes, así sucesivamente hasta llegar finalmente a un único valor hash conocido como la raíz del árbol o root hash. Visualmente esta estructura también conocida como árbol hash tiene forma de árbol binario equilibrado y completo, cuyas virtudes son:
- Cualquier modificación de una transacción modificará el hash de la hoja, por tanto, afectará a todos los hashes propagados e invalidará el valor de la raíz. Lo mismo ocurre si se añaden nuevas transacciones y hay que volver a generar el árbol de hashes.
- Toda la generación de hashes intermedios es despreciable, ya que a efectos prácticos solo nos interesa el último hash raíz. Hemos visto que este valor final es único y que está generado gracias a un proceso iterativo inmutable. Así que a efectos reales no necesitamos ocupar espacio de memoria para tener un valor que refleja la integridad de todas las transacciones. Una transacción o un millón generarán un root hash del mismo tamaño.
- Este proceso es verificable y reproducible, cualquier verificación que siga este proceso de agrupación y hashes alcanzará el mismo valor de la raíz.

Prueba de trabajo
Una vez emitidas las transacciones e incorporadas a un bloque usando un árbol de Merkle, el pool de minería intentará confirmarlo. Dando comienzo al proceso más arduo y computacionalmente más complejo, pero "bien" recompensado. Como ya vimos en la anterior entrada, este proceso tarda de media 10 minutos y necesita hasta seis confirmaciones para que considere consensuada su incorporación. Esto permite un retraso lo suficientemente amplio para rechazar cualquier bloque con transacciones anómalas o introducidas fraudulentamente. Es decir, el propio proceso criptográfico consigue retrasar la producción de bloques y así los nodos validadores tienen tiempo suficiente para rechazar los bloques erróneos que se están intentando añadir al blockchain
En bitcoin dicho esfuerzo recibe el nombre de Prueba de trabajo. Que no es sino un proceso de cálculo que realizan los mineros para obtener una cifra que sea inferior a un valor objetivo (un juego competitivo con condiciones autoimpuestas, en pocas palabras) utilizando para ello la función criptográfica SHA-256. Las consideraciones necesarias para entender este costoso cálculo son las siguientes
- El software del minero debe realizar una composición con la cabecera del bloque que pretende confirmar. Esta cabecera está compuesta de varios campos: El hash del bloque anterior, la raíz del árbol que contiene las transacciones del bloque, la versión de bloque, un timestamp, el valor objetivo buscado y un nonce.
- Un bloque con 10.000 transacciones se computa a la misma velocidad que uno con una única transacción al tener una arquitectura de árbol de merkle. Solo es necesario el root hash del árbol para tener garantías de la integridad y consistencia de las transacciones que formarán parte del bloque.
- El nonce es un valor de 4 bytes que el minero usa como contador. Dicho valor será incrementado durante el esfuerzo computacional mientras no se haya encontrado un valor correcto. A efectos prácticos es equiparable a una semilla que permitirá reajustar el cálculo de hashes hasta encontrar un valor dentro de los límites deseados.
- El timestamp cambia cada cierto número de segundos reiniciando por completo el cálculo computacional acumulado mediante el incremento del nonce. Teniendo que comenzar de nuevo.
- Cada cierto tiempo nuevas transacciones podrían ser añadidas al árbol (siempre que no exceda el tamaño del bloque) lo cual cambia su raíz y esto afecta a la composición de la cabecera del bloque.
- Una vez obtenida la cabecera del bloque, el software de minería realiza un doble SHA-256 para comprobar que el valor obtenido sea inferior al valor objetivo. Si este valor no es válido, se aumentará el contador nonce y se vuelve a intentar. Los motivos para usar un doble SHA-256 responde precisamente a reducir los riesgos de encontrar una colisión en dicho algoritmo como ocurrió recientemente con el SHA-1. Este algoritmo conocido como SHA256d fue propuesto por Ferguson y Schneier y varias alusiones han aparecido en el tiempo para justificar dicho uso desde el punto de vista de la seguridad.
- El valor objetivo se recalcula cada 2016 bloques confirmados, para corregirse de acuerdo a si es necesario aumentar la dificultad o reducirla según el tiempo medio de generación de bloques. Si se consiguen confirmar bloques rápidamente la dificultad aumentará, y se reducirá si resulta muy costoso encontrarlos. En la práctica esto se conoce como el número de ceros a la izquierda que debe tener el hash obtenido para saber si es válido o no. Este es el juego y la dificultad: ¿Quién calcula primero un hash añadiendo ciertas características y que además contenga un número de ceros a la izquierda predeterminado?

Fuente: http://bitcoin.sipa.be
En la siguiente entrada abordaremos el futuro que vislumbra el bitcoin y algunas de las consideraciones tecnológicas y económicas que le afectan, sentando algunas dudas y vislumbrando ciertos inconvenientes que podrían afectar al futuro de esta criptomoneda.
*También te puede interesar:
Blockchain (I): Más allá del Bitcoin, la Deep Web, el ransomware y la mala fama
Blockchain (II). Un modelo distribuido fiable de seguridad. ¿La panacea?
Blockchain III. Bitcoin. La criptomoneda precursora que abrió la caja de Pandora