En la entrega anterior se hizo referencia al procedimiento de registro para participar en una blockchain sin necesidad de aportar identificación alguna y a la forma de generar las transacciones a llevar a cabo. Trataremos ahora sobre el procedimiento utilizado para validar las transacciones propuestas y para mantener su integridad una vez incorporadas a la blockchain, refiriéndonos concretamente al caso del Bitcoin. Dado el papel primordial que las funciones hash tienen en ambos aspectos hacemos inicialmente una breve referencia a las mismas.
Una función hash transforma una entrada de tamaño arbitrario en una salida de longitud fija de n bits, de forma que cualquier cambio en el input por pequeño que sea altera significativamente el output. Lo mismo puede utilizarse para transformar el Quijote en una cadena de n bits, que hacerlo con una sola palabra o incluso ninguna. La función hash es unidireccional (no es posible obtener el input de entrada a partir del output), debe ser de cálculo fácil y ser función de todos los bits de entrada, de forma que, si se modifica alguno, el hash resultara alterado.
Existen diferentes familias de funciones hash, algunas cuyo uso se ha desechado por su falta de resistencia a la colisión. Bitcoin utiliza la función SHA256 que genera un hash de 256 bits, para ello, la información de entrada se divide en paquetes de 512 bits (P1-Pn, en el gráfico 1) y partiendo de un vector inicial de 256 bits se toma el primer paquete para generar una salida de 256 bits (S1-Sn, en el gráfico 1), a continuación, el segundo paquete y así sucesivamente hasta generar la salida final a 256 bits. Bitcoin, utiliza código hexadecimal, transformando la cadena de 256 bits en una cadena de 64 caracteres (cada uno representa 4 bits) formada con elementos que van desde el 0 al 9, y de la letra a hasta la f.
En este tipo de funciones se dan dos circunstancias aparentemente paradójicas. Por un lado, como el número de elementos en el conjunto de inputs es muy superior al de los outputs, por el principio del palomar −si n palomas se distribuyen en m palomares, y si n > m, entonces al menos habrá un palomar con más de una paloma− deben producirse infinidad de coincidencias (se las denomina colisiones) de forma que diferentes inputs generen un mismo hash. Pero, por otro lado, cuando se utilizan hashes de 256 bits, dado un input, la probabilidad de encontrar otro input con el mismo hash es despreciable (1/2256). En estas condiciones el output de una función hash representa una fuente fiable para verificar la integridad de una información. De hecho, son utilizadas para detectar la presencia de virus en programas informáticos, comparando el hash del programa original con el hash del programa a analizar: de no coincidir, existirán elementos extraños en el programa analizado.
La función hash es el elemento crucial para asegurar la integridad de la información contenida en la blockchain. Las transacciones una vez verificadas, siguiendo el proceso que se detalla más adelante, se agrupan en bloques, y toda la información contenida en el bloque está amparada por su hash. Además, los bloques están encadenados unos a otros porque cada uno de ellos contiene una referencia al hash del bloque inmediatamente anterior. De esta forma cualquier modificación que se pretendiera introducir en algún punto de la cadena afectaría el hash de todos los bloques situados a continuación y bastaría con contrastar el hash del último bloque para detectar la anomalía.
La integración de las transacciones en bloques y su validación la llevan a cabo en los nodos del sistema. Conviene precisar aquí, que el registro en Bitcoin ofrece dos modalidades: bien con la única intención de generar transacciones, creando lo que se denomina una bolsa (wallet) o bien con la posibilidad adicional de poder participar activamente en el proceso, constituyendo un nodo del sistema, para lo que se necesita aportar una dirección de Internet, capacidad de computación y memoria para albergar la blockchain entera.
La constitución y validación de los bloques donde se recogen las transacciones, plantea un problema que se presenta en los llamados sistemas distribuidos (conjunto de computadoras separadas físicamente y conectadas por una red). Se conoce como el problema de los generales bizantinos por referencia a un escenario de guerra donde un grupo de generales bizantinos intercambiando mensajes deben ponerse de acuerdo en la acción adecuada a adoptar existiendo la posibilidad de que algunos sean desleales y transmitan falsa información. Bitcoin afronta este problema estableciendo un incentivo que mueva a los nodos a un comportamiento leal dicho incentivo es un pago en bitcoins (actualmente 25 bitcoins por bloque validado). Estos estos pagos en bitcoins representan la única forma de crear nuevos bitcoins, motivo por el que los que participan en este proceso se conocen como mineros por analogía con los buscadores de oro, cuyos mineros eran los únicos capaces de aumentar el stock del metal.
Como señalábamos en la entrega anterior, las transacciones propuestas se hacen llegar a todos los nodos, con ellas los mineros preparan un bloque de hasta 1megabyte, habiéndose establecido un ritmo medio de 10 minutos para la presentación de los bloques. Estos límites fueron fijados por Satoshi Nakamoto, anónimo bajo el que se cobija el creador o creadores del Bitcoin, y como veremos son objeto de fuerte controversia en el momento actual.
En la preparación de un bloque, los mineros deben verificar la fiabilidad de las transacciones incluidas, correspondencia con las claves, así como existencia de los recursos necesarios, comprobaciones relativamente sencillas con software desarrollado a tal efecto. Pero además el bloque lleva un campo de información adicional de 32 bits que debe ser cumplimentado por el minero de forma que el hash resultante para el bloque sea menor que una cifra establecida por el sistema. Esto significa que el minero debe intentar encontrar entre los 232 posibles valores del nonce uno que satisfaga la condición impuesta. Este proceso implica un considerable esfuerzo de computación y además en muchos casos no asegura encontrar un nonce apropiado (se inicia entonces otro proceso de búsqueda más complicado en el que no entramos aquí).
En último término el minero que consiga un bloque que genere un hash con las condiciones exigidas tendrá derecho a los correspondientes bitcoins, que recibirá cuando su resultado sea aceptado por un grupo de mineros que representen el 51% de la capacidad de computación del sistema. Resulta evidente que un minero no se arriesgara a introducir transacciones falsas puesto que su bloque sería rechazado por los demás. La validación del bloque significa su incorporación a la cadena y su hash debe aparecer referenciado en el próximo bloque que preparen los mineros.
La minería bitcoin representa un extraordinario consumo de energía porque un solo minero se lleva el premio, pero todos ellos participan activamente para conseguirlo. Se ha estimado que con la capacidad de computación existente en 2015, se consumirían 173 megavatios, aproximadamente el 20% de la generación de una planta nuclear media. Además, el consumo tiende a aumentar porque el sistema ajusta la dificultad problema a resolver por el minero para mantener el tiempo medio de 10 minutos entre cada presentación de un bloque.
En estas primeras entregas hemos descrito, inevitablemente de forma muy somera, el funcionamiento interno de una blockchain. En una entrega final hacemos referencia a la interface con otros sistemas, en el caso del bitcoin serían las relaciones de intercambio con otras monedas. Trataremos también sobre la evolución del bitcoin y sus dificultades recientes.