Blockchain (IV). Las entrañas de bitcoin. Transacciones, criptografía y ASICs

lunes, 3 de abril de 2017

Pareciera que en realidad, todo esto de bitcoin y blockchain no fuese sino una suerte de artes de magia negra, vudú y pastafarismo… ¿Quién se aventuraría en conocer cuál es el funcionamiento interno del bitcoin de manera voluntaria?

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.

¿Para qué quieres saber eso?

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:
Supongamos que queremos transferir 5 BTCs a una cartera y la suma de BTCs a la entrada suman 7. Para remediarlo tendremos que incluir en la salida una referencia a nuestra propia cartera con esos BTCs que sobran. Pero además en una transacción habitual hay que tener en cuenta la comisión que tenemos que pagar al pool de minería que genera el bloque donde irá incluida esta transacción... Digamos que en este caso el pool solicita 0.1BTC. Por tanto en el listado de referencias a la salida tendríamos que indicar 1.9BTC a nuestra propia cartera y 0.1 a la del grupo de minería.
Transacción de bitcoin


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:
  1. 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.
  2. 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.
  3. 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.
Árbol de Merkle


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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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. 
  7. 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? 
Por tanto, cada pool de minería tratando de confirmar un bloque tiene un período de tiempo breve de unos segundos (bien por el timestamp o por la inclusión de nuevas transacciones) para realizar el SHA-256^2 de la cabecera del bloque, antes de que esta cabecera cambie y haya que reiniciar el nonce. Pero pese a todo este proceso tan dinámico y frustrante computacionalmente, cada comprobación realizada por la máquina tiene las mismas posibilidades de encontrar un hash por debajo del valor objetivo que el resto de nodos de la red. Simplemente aumentando el número de máquinas se puede aumentar las posibilidades de que el pool de minería consiga confirmar nuevos bloques.

Tasa de Petahashes por segundo y la dificultad asociada del último año.
Fuente: http://bitcoin.sipa.be
No es de extrañar que, estimulados por la necesidad de aumentar el poder computacional, los pools de minerías pusieron su interés en equipos optimizados para el cálculo de hashes, operaciones de cifrado y de validación. Y como ha ocurrido en otros ámbitos computacionales este proceso padeció una continua evolución desde las CPUs, a las GPUS, de ahí a FPGAs y finalmente a los Application-specific integrated circuit (ASIC). Hoy por hoy con la dificultad impuesta para la minería de bitcoins las granjas de minado utilizan dicho hardware ASIC dedicado exclusivamente a la minería. Equipos con unas capacidades de cómputo de miles de Petahashes por segundo, y casi más importante aún con una eficiencia energética que optimiza el consumo eléctrico al mínimo. El minado de bitcoins se ha convertido en un oficio muy sectario y restringido solo para verdaderos interesados, pero como ya hemos dicho, estos mineros permiten que Bitcoin sea posible. Así que esperemos que gracias a sus beneficios "económicos" aún les resulte rentable mantener su contribución.

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 
 
Marcos Arjona
Innovación y laboratorio
marcos.arjona@11paths.com

No hay comentarios:

Publicar un comentario