CriptomonedasMineríaTutoriales

Proof-of-Work: El mecanismo de seguridad sobre el que está construido Bitcoin

El protocolo Proof-of-Work usado en Bitcoin, Litecoin o Dogecoin, entre otras, se introduce para evitar acciones indeseadas en una blockchain. Sencillamente este protocolo requiere de un trabajo por parte del usuario, que será posteriormente verificado por la red. Este trabajo no es más que la realización de una serie de complejas operaciones computacionales realizadas por un ordenador.

Qué es Proof-of-Work

prueba de trabajo

Es un algoritmo de consenso basado en complejas operaciones matemáticas que deben ser realizadas por un equipo informático. Proof-of-Work requiere de una cantidad de computación significativa, pero factible. Sirve para disuadir a atacantes maliciosos que quieran lanzar un ataque de denegación de servicio o un ataque del 51%.

Podemos encontrarlo como > Proof-of-work; PoW; Prueba de trabajo

PoW es un mecanismo que se utiliza para la confirmación de las transacciones y la generación de nuevos bloques. Dentro de este consenso, los mineros compiten para validar las transacciones y generar nuevos bloques. A cambio de su trabajo computacional, reciben una recompensa en bitcoins.

Uno de los motivos de utilizar la prueba de trabajo es evitar ataques de doble gasto. También busca hacer que realizar un ataque del 51% sea tan costoso que no sea factible lanzar uno de estos ataques. Todo esto se asegura mediante un complejo acertijo matemático y la prueba sencilla de la solución.

Origen de Proof-of-Work

Uno de los mayores problemas crecientes en la década de los 90, al popularizarse internet, era el spam. Hablamos del envío masivo de correos no deseados por el usuario final. Mandar miles de correos es muy sencillo y el coste es mínimo para quien los quiere mandar. Para ello se ideó un sistema denominado prueba de trabajo.

En 1992, Cynthia Dwork y Moni Naor, trabajadores del Departamento de Investigación de IBM idearon el algoritmo Proof-of-Work para combatir el spam. Dicho mecanismo requiere que el remitente realice un pequeño trabajo que se agrega al correo como una firma. Este trabajo cuesta apenas unos pocos segundos, lo suficiente para hacer costoso en tiempo y recursos de la realización de spam. Y es que el spam se basa en mandar cientos o miles de correos en la menor cantidad de tiempo posible.

Adam Back, en 1997, recogió esta solución para combatir el spam y lo añadió a su proyecto para contrarrestar el spam, denominado HashCash. Lo interesante de la solución de Back es que utiliza prácticamente la misma criptografía que utiliza la tecnología Bitcoin actualmente. Satoshi Nakamoto, en el whitepaper de Bitcoin, menciona la solución desarrollada por Back.

Esto quiere decir que el algoritmo de consenso Proof-of-Work es mucho más antiguo que su implementación en Bitcoin. Aunque inicialmente se desarrolló para combatir el spam, se ha convertido en un sistema de seguridad para las criptomonedas.

Características de la prueba de trabajo

Prevenir el doble gasto

Proceso de gastar los mismos fondos en más de una ocasión. La posibilidad que exista doble gasto en una criptomoneda supondría que esta no tendría utilidad. Un usuario podría utilizar la misma cantidad de monedas de manera repetida sin que exista un gasto. Esto supone que la moneda no vale nada, ya que ningún vendedor la aceptara

Se requiere de un elemento de seguridad que impida precisamente esto. Para ello se ha establecido un acertijo matemático computacionalmente complejo que impide este proceso. Cualquier intento de manipulación de una transacción validada y agregada a un bloque es imposible. Manipular una transacción supone manipular el bloque, lo cual tiene un coste computacional brutal.

El coste computacional de manipulación crece exponencialmente cuanto más antiguo es el bloque. Si la cadena tiene 1000 bloques y queremos manipular una transacción del bloque 700, deberemos manipular la transacción, el bloque y los 300 siguientes bloques. Pero además se deben manipular todos los nuevos bloques que se vayan agregando a la blockchain, ya que esta no cesa. Luego, todos los propietarios de una copia de la blockchain deben aceptar la nueva cadena, algo que es inviable, ya que rápidamente se detectara al estafador.

El acertijo matemático

Cuando hablamos de acertijo matemático, realmente hablamos de un problema matemático que requiere una gran cantidad de computación. Para resolver el cálculo, son se realizan operaciones complejas solo accesibles para ordenadores.

Bitcoin hace uso de un sistema de función hash. Este sistema establece que a partir de unos inputs obtendremos un output semi aleatorio basado en unas reglas matemáticas. La salida tiene una longitud basada en el sistema de criptografía utilizado. El minero lo que conoce es la salida y debe encontrar los parámetros de entrada a base de fuerza bruta (y un poco de suerte)

Todos los mineros compiten por ser el primero en resolver el acertijo matemático en igualdad de condiciones.

asic minado bitcoin

La dificultad

El problema debe ser computacionalmente difícil, pero no demasiado difícil como para ralentizar la generación de bloques. Si fuera demasiado difícil, las transacciones se amontonarían y eso haría que la red fuera absurdamente lenta. Si los bloques no se pueden generar en el tiempo previsto, la red se congestionara y el coste de usarla (comisiones por transacciones) se disparará.

Tampoco puede ser el acertijo matemático excesivamente simple, ya que esto generaría problemas. Podría ser muy económico lanzar un ataque de denegación de servicio o ataques de spam.

Se requiere la integración de un mecanismo que ajuste de manera dinámica la dificultad. Bitcoin, como cualquier otra criptomoneda, añaden mecanismos que lo hacen cada cierto tiempo. Para el caso de Bitcoin, la dificultad del acertijo matemático se ajusta cada 2016 bloques.

Cómo funciona la prueba de trabajo

Debemos entender que las transacciones cuando se realizan y se lanzan, son transacciones anunciadas. Estas transacciones deben ser incluidas en un bloque candidato, que es un bloque que se postula a ser agregado a la cadena de bloques. Las transacciones y los bloques candidatos solo se dan por «buenos» cuando el bloque se añade a la blockchain.

Incluir un bloque a la cadena no es económico, se exige al minero pasar una prueba de trabajo, basada en los recursos que ofrece a la red. El recurso de un nodo minero es la potencia de cómputo para calcular el hash de los datos del bloque, hasta que encuentra la solución al problema.

Este proceso requiere que todos los datos del bloque pasen por una función hashing para generar un hash válido. Destacar que el hash hace la función de identificador único e irrepetible de la información almacenada en el bloque.

Revertir el hash de un bloque para obtener los inputs es imposible, bueno, prácticamente imposible. Encontrar los inputs a partir de un output requiere de una cantidad de potencia de cómputo (y suerte) enorme. Pero si conocemos el input, se vuelve trivial la confirmación del hash. Se requiere pasar el input por la función hash, obtener el output y compararlos para verificar que son correctos.

La aleatoriedad del hash

La prueba de trabajo requiere que se den una serie de datos cuyo hash cumpla determinadas condiciones. El problema es saber como obtener ese hash. Debemos pasar los datos por una función hash y verificar si se cumplen las condiciones. Si el hash obtenido es distinto deberemos modificar los datos ligeramente hasta que los dos hashes coincidan. Tenemos que tener en cuenta que modificar un único carácter supone modificar el output. Por ejemplo:

Input Output (pasado por el algoritmo SHA-256)
Bitcoin es dinero 0A0E9D4319FB2C2C1A41777FB5F3E173D44E17249EDA33B7A491933E552A8F94
bitcoin es dinero B47983C3621EE91AD11F73A01121BB66BC23375B1CC10D9D5E60BD7238078E25
bitcóin es dinero 2E2613F96206B48A257D5FBF4759F6B1621E2861753702FE58D7766049B1B891

Básicamente generar un bloque, es jugar a las adivinanzas. Lo que se hace es coger toda la información de las transacciones que queremos añadir y otros datos importantes, combinándolos finalmente. El conjunto de datos no tendrá variaciones, por lo que deberemos añadir un elemento que si pueda ser variable. Si no añadimos un valor o parámetro variable, siempre obtendremos el mismo hash de salida. El parámetro variable es el nonce, un número que solo se utiliza una vez y que se cambia en cada intento. Todo esto es la base de la minería.

Sencillamente la minería es un proceso de recopilación de datos y combinarlos con un nonce para obtener un hash final concreto. Cuando conseguimos un bloque que cumpla con las reglas de consenso de la red, podemos agregar el nuevo bloque. La copia de la cadena de bloques del resto de miembros de la red se actualiza para añadirlo.

Cuanto mayor es la tasa de hash de una blockchain, más difícil es encontrar el hash válido. Este mecanismo se añade para garantizar que los bloques no sean encontrados demasiado rápido. Implica, por tanto, que encontrar una cantidad masiva de hashes con un equipo informático especializado, es muy costoso. Supone un desperdicio de ciclos de computación y electricidad. Eso si, si encontramos el hash válido, recibiremos una recompensa.

Mover los fondos

Para poder mover los fondos se requiere una prueba que realmente indique que son nuestros y por lo tanto, estamos autorizados a moverlos. Para ello se utiliza un mecanismo de clave asimétrica. La clave asimétrica se basa en la generación de una clave privada que consiste en una serie de palabras aleatorias y de ahí se obtiene la clave pública. Generar una clave pública a partir de la clave privada es muy fácil, pero el proceso inverso es extremadamente difícil.

Una transacción requiere de una firma. La red verifica la firma con la clave pública y se verifica si ambas coinciden. El siguiente paso consiste en verificar si existen fondos y si estos se pueden mover. Se verifica también si la suma de las entradas es mayor que las salidas, o lo que es lo mismo, que no estas gastando más de lo que tienes.

Las transacciones no validas y los bloques que las incluyan, serán rechazados de la red automáticamente. Hacer una transacción falsa supone perder la comisión pagada para el minero que valide la transacción. Crear un bloque con una transacción falsa supone un gasto computacional estéril que no obtendrá recompensa por los recursos gastados.

Proof-of-Work precisamente lo que hace es que ser honesto sea muy económico, pero hacer trampas es caro en dinero, recursos y tiempo. Vamos, que el mecanismo sanciona a los atacantes maliciosos y premia a los buenos actores.

Poniendo a Proof-of-Work en la balanza

Qué fortalezas tiene la prueba de trabajo

Los puntos más importantes del consenso Proof-of-Work, que lo dotan de gran fortaleza son:

  • Alta seguridad: Cuanto mayor es la cantidad de mineros en la red, mayor es la seguridad de la misma. Esto permite que este tipo de mecanismos de consenso sea tan interesante para grandes redes distribuidas.
  • Implementación sencilla: Se caracteriza por ser un consenso muy sencillo de implementar. Hace que sea sencillo, requiriendose solo un software de minería que hace uso de este mecanismo. Adicionalmente simplifica las auditorías, permitiendo hacer muy sencillo al mantenimiento de la seguridad de la red.
  • Adaptable al hardware: Puede ser un mecanismo de generar o implementar complementos que le doten de resistencia frente a determinados tipos de equipos informáticos. Es también adaptable a los avances tecnológicos, haciendo que sea más fácil o difícil. Permite también que la dificultad se adapte a la potencia de la red, adaptándose a la inclusión de nuevos miembros y nuevas tecnologías. Adicionalmente es un mecanismo que busca minimizar la centralización de la minería.
  • Resistente a ataques maliciosos: Este mecanismo se desarrolló en 1992 para evitar el spam y también para evitar ataques de denegación de servicio. Una resistencia que han demostrado en innumerables ocasiones.
  • Consumo de recursos: Requiere de un trabajo computacional que a su vez requiere un consumo energético. Este factor hace que intentar hacer trampas tenga un gran coste y disuada a los atacantes maliciosos de lanzar un ataque. Además, los buenos actores reciben una recompensa por ser honestos.

Qué debilidades tiene la prueba de trabajo

El mecanismo de consenso Proof-of-Work presenta dos problemas importantes actualmente. Estos son:

  • Ataque del 51%: Es un ataque en el cual la mayoría de los mineros confabulan para manipular la red. Supone que los atacantes tienen suficiente poder para controlar la mayoría de los eventos de la red. Permite monopolizar la generación de bloques, para recibir recompensas, rechazando los bloques del resto de la red. Además, tienen la capacidad de revertir transacciones o hacer doble gasto. Para este tipo de ataque se necesita n/2+1 de los mineros, donde ‘n’ representa al total de mineros de la red.
  • Consumo de energía: Lo que es una gran fortaleza, como es la capacidad de cómputo que dificulta la manipulación, se vuelve en un problema cuando hablamos de energía. Un minero requiere de una buena refrigeración y tiene un elevado consumo eléctrico. Si esto lo multiplicamos por centenares o miles, que suele ser la cantidad de mineros que tienen las granjas, hablamos de enormes consumos. El problema es que la mayoría de la energía procede de fuentes contaminantes, convirtiéndose en uno de los principales aspectos por los que se ataca a la minería mediante prueba de participación.

Palabras finales sobre Proof-of-Work

El mecanismo de consenso de prueba de trabajo tiene la fortaleza de ser altamente seguro y penalizar a los atacantes maliciosos. Para intentar manipular una transacción o los movimientos en la red Bitcoin, por ejemplo, actualmente necesitaríamos una cantidad de hardware brutal, que tiene un coste elevadísimo. Adicionalmente, necesitaríamos ingentes cantidades de energía eléctrica. Precisamente esta fortaleza, en criptomonedas más pequeñas puede ser un problema, como ya sucedió con Vergeoin, la cual sufrió hace algún tiempo un ataque del 51%.

Te recomendamos este artículo donde explicamos qué es y para qué sirve Bitcoin

Lo bueno de este mecanismo es que se adapta perfectamente a los cambios de hardware y, la entrada y salida de mineros de la red. Se introducen mecanismos de adaptación de la dificultad de la minería según la potencia de cómputo de la red y el número de miembros de la red. También tiene positivo que los intentos de manipulación tienen enormes costes de potencia de cómputo, tiempo y energía. Este último parámetro, la energía, el punto débil del consenso de prueba de trabajo y usado por los detractores de las criptomonedas para lanzar ataques. Aunque precisamente este coste en energía eléctrica es lo que da seguridad a las criptomonedas y a Bitcoin.

¿Qué opinas al respecto del consenso de prueba de trabajo, es algo bueno por la seguridad que ofrece o es un simple derroche de energía y recursos?

Roberto Solé

Técnico Superior en Electrónica y en Energías Renovables, Técnico en Prevención de Riesgos Laborales y Técnico Electricista de Baja Tensión apasionado del hardware y las nuevas tecnologías, además de hodl de Bitcoin. Hace tiempo cruce el Stargate y desde entonces me dedico a la exploración.
Los datos de carácter personal que nos facilite mediante este formulario quedarán registrados en un fichero de Miguel Ángel Navas Carrera, con la finalidad de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento del interesado. Si no se acepta no podrás comentar en este blog. Puedes consultar Política de privacidad. Puede ejercitar los derechos de acceso, rectificación, cancelación y oposición en [email protected]
Botón volver arriba