El puzle por el que ofrecen un trillón de dólares a quien lo resuelva

Gonzalo Álvarez Marañón    22 marzo, 2021

¿Eres aficionado a los puzles matemáticos? Pues aquí tienes uno muy lucrativo… ¡pero duro de roer! Si descubres un método para romper los hashes utilizados en Blockchain, ¡podrías hacerte con todos los futuros Bitcoins aún por minar!

El criptominado se basa en un concepto llamado “prueba de trabajo” (y en el azar). Los mineros con mayores recursos computacionales a su alcance (y a quienes más favorece el azar) son recompensados con nuevos bitcoins. En este artículo explicaremos el origen de las pruebas de trabajo, ligado a la batalla contra el spam, y cómo se utilizan hoy en Bitcoin.

Si los spammers tuvieran que pagar por cada correo que envían, otro gallo cantaría

Eso mismo pensó Adam Back en 1997. Reputado criptógrafo y hacker, había leído un artículo publicado en 1992 por Cynthia Dwork y Moni Naor sobre cómo combatir el spam obligando a realizar costosos cálculos matemáticos. Este artículo le inspiró para diseñar su propuesta de pago por envío de correo: si quieres enviar spam, vas a tener que pagar, pero no con dinero, pagarás con sudor de computación (si te recordaba a “Fama”, eres muy mayor). El spammer tendrá que resolver un puzle criptográfico de dificultad variable y no enviará su correo hasta que dé con la solución. Resolver el puzle será muy complicado, pero verificar la solución, muy sencillo. En otras palabras, o pruebas que has trabajado duro, o no hay spam que valga. Y así nació Hashcash.

La propuesta de Back exige añadir la cabecera X-Hashcash: al protocolo SMTP, de manera que, si un mensaje llega a una pasarela de correo o a un cliente de correo sin dicha cabecera, será rechazado inmediatamente. ¿Y con qué token hay que rellenar esta cabecera?

En primer lugar, se requiere una función de hash segura. Aunque Hashcash proponía SHA-1, hoy se utilizaría otro algoritmo, como por ejemplo SHA-256 o SHA-3.

En segundo lugar, Hashcash usa los siguientes parámetros:

  1. Un factor de trabajo w, tal que 0 <= w <= L, siendo L el tamaño de la salida de la función de hash (en bits). Se utiliza para modular la dificultad del puzle.
  2. Un número de versión, ver.
  3. Un parámetro de marca de tiempo: time.
  4. Un identificador de recurso: resource.
  5. Un número de como mínimo 64 bits elegido aleatoriamente: trial.

El token de Hashcash se compone uniendo dichos campos por el carácter ‘:’, de la siguiente forma:

token = ver:time:resource:trial

El puzle consiste en calcular repetidamente el hash del token hasta que los w bits más significativos sean 0, incrementando en uno el valor de trial cada vez que no se acierte. Evidentemente, cuanto mayor sea el valor de w, más difícil será el puzle. Por fortuna para el receptor, verificar que la solución al puzle es correcta es tan trivial como calcular el hash del token. Además, no importa cuántos puzles resuelvas, resolver uno nuevo siempre te llevará en promedio el mismo tiempo: la dificultad se mantiene constante para un valor dado de w. Y si la potencia de cómputo mejora con el tiempo, basta con incrementar w y otra vez a sudar.

Por supuesto, los tokens solo se consideran válidos si no se repiten, porque entonces, resuelto uno, bastaría con anexionarlo a todos los mensajes de spam. Una forma económica de resolver el problema de cómo almacenar un histórico de los tokens consiste en configurar un período de expiración, calculado gracias al parámetro time.

Aunque esta idea no llegó a cuajar para luchar contra el spam, terminó inspirando a Satoshi Nakamoto para diseñar la prueba de trabajo de Bitcoin.

Los criptomineros acuñarán bitcoins con el sudor de sus ASICs

En la mina se excava la tierra en busca de un recurso escaso y muy valioso. En Bitcoin, el recurso escaso es la capacidad de cómputo. Los nodos de la red de Bitcoin compiten unos contra otros en una carrera frenética por ser el primero en resolver un puzle criptográfico, llamado “prueba de trabajo”, basado en Hashcash.

Explicado de forma muy simplificada, se toma el hash del nuevo bloque, c, que se desea incorporar a la cadena de bloques, se concatena con un nonce, x, y se calcula el hash del conjunto. Si el valor del hash resultante comienza por un número predeterminado de ceros, es decir, es menor que un cierto target, entonces ¡has ganado la carrera! En caso contrario, súmale uno al nonce y vuelta a empezar.

La función de hash utilizada en Bitcoin es SHA256, pasada dos veces consecutivas. Expresado matemáticamente:

SHA256( SHA256( c | x ) ) < target( d )

La dificultad de este puzle puede adaptarse dinámicamente, variando el número d de ceros iniciales que debe tener el hash. Así, una dificultad de 1 significa que el hash debe tener (al menos) un cero a la izquierda, mientras que una dificultad de 10 significa que el valor hash tendrá al menos 10 ceros a la izquierda. Cuanto más alto sea el nivel de dificultad, más ceros a la izquierda serán necesarios y más complicado será el puzle, ya que la dificultad crece exponencialmente con el número de ceros. Obviamente, cuanto más complicado sea el rompecabezas de hash, más potencia de cálculo o tiempo se necesita para resolverlo.

Bitcoin establece la dificultad de manera que globalmente se cree un nuevo bloque cada 10 minutos en promedio. El primer minero en resolver el puzle recibe una recompensa en forma de bitcoins y cobra las tasas aplicadas a las transacciones contenidas en el bloque. La recompensa para el ganador está programada desde el principio. Inicialmente se recompensaba al criptominero ganador con 50 bitcoins por cada nuevo bloque. Esta recompensa se reduce a la mitad cada 210.000 bloques, es decir, aproximadamente cada 4 años. Debido a la reducción a la mitad de la recompensa por bloque, la cantidad total de bitcoins en circulación nunca superará los 21 millones de bitcoins. Estos incentivos económicos deben compensar el gasto de recursos computacionales o nadie minaría bitcoins.

¡¡¡Soy mineroooooo!!!

En sus inicios, para minar bitcoins bastaba con un ordenador con una CPU decente. Pero los jugosos incentivos hicieron aumentar rápidamente la dificultad del mecanismo de prueba de trabajo. Las CPUs fueron pronto sustituidas por GPUs, éstas a su vez por FPGAs y, a medida que los bitcoins se revalorizaban, pasaron a utilizarse circuitos integrados de aplicación específica (ASICs). No sé si todos los criptomineros que adquieren estos equipos se hacen de oro, pero sus fabricantes ciertamente sí que han encontrado su particular filón. La barrera de entrada para minar es hoy tan elevada, que desde hace muchos años la comunidad de mineros está dominada por un pequeño número de grupos de minería de “grandes jugadores”.

Como resultado, el grupo supuestamente grande y diverso de pares que colectivamente mantiene la integridad del sistema se convierte a la postre en un grupo muy pequeño de entidades, cada una de las cuales posee un enorme poder computacional en forma de hardware especializado, albergado en gigantescas granjas, repartidas las mayores por China, Rusia, Islandia, Suiza y EEUU.

Estos grupos exclusivos forman una suerte de oligopolio que divide entre ellos la responsabilidad de mantener la integridad del sistema. Queda abierta la puerta a abusos de poder, como, por ejemplo, omitir transacciones específicas o discriminar a usuarios específicos. Al final, Bitcoin y Blockchain no son tan descentralizados como se esperaba en su concepción original porque la integridad del sistema no está distribuida entre un número enorme de entidades, sino que se concentra en unas pocas entidades muy poderosas, estableciéndose una especie de centralidad oculta que socava la naturaleza distribuida de todo el sistema.

El reverso tenebroso de las pruebas de trabajo

Y no olvidemos un problemilla asociado a las pruebas de trabajo. Dado que resolver los puzles criptográficos requiere un gasto inmenso de potencia computacional, el proceso de minería/validación resulta prohibitivamente caro, tanto en términos de electricidad como de disipación de calor. Este consumo tiene un impacto increíblemente perjudicial para el medio ambiente.

En un trabajo publicado en 2019, The Carbon Footprint of Bitcoin, sus autores afirman que la minería de Bitcoin representa el 0,2% de todo el consumo de electricidad en el mundo y que produce tanto dióxido de carbono como una metrópolis del tamaño de Kansas City (unos 500.000 habitantes).

Otra investigación publicada en Nature en 2018, Quantification of energy and carbon costs for mining cryptocurrencies, calculó que la minería de Bitcoin, Ethereum, Litecoin y Monero combinadas produjo durante un período de 30 meses el equivalente a entre 3 y 13 millones de toneladas de dióxido de carbono. Y viendo el precio al alza de todas estas criptomonedas, a pesar de su volatilidad, todo apunta a que el consumo de energía (y de emisiones) seguirá creciendo.

Una vez más se demuestra que cuando la criptografía salta de las pizarras de los criptógrafos al mundo real, las cosas se complican. A fin de cuentas, Bitcoin no se ejecuta sobre papel, sino sobre procesadores. Y a más trabajo, mayor consumo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *