Prueba de Trabajo o Proof of Work, es el protocolo de consenso más conocido y antiguo que consiste en que las partes de una red realicen con éxito un trabajo computacionalmente costoso para acceder a los recursos de dicha red.
El protocolo de Prueba de Trabajo, sirve para evitar ciertos comportamientos indeseados en una red y su nombre proviene del inglés Proof of Work (PoW).
Este protocolo funciona bajo el concepto de requerir un trabajo al cliente, que luego es verificado por la red. Normalmente el trabajo solicitado, consiste en realizar complejas operaciones de cómputo.
Estas operaciones luego son verificadas por la red. Una vez que son aprobadas, se da acceso al cliente para que use los recursos de la misma. Con ello, se busca impedir que clientes maliciosos puedan consumir todos los recursos de forma incontrolada. Una situación que puede acabar por denegar el servicio prestado al resto de clientes de la red.
Un ejemplo muy simple de entender es el famoso captcha que se pone cuando se quiere hacer un registro en una web. La web pone este reto que el visitante ha de resolver. Si lo hace tendrá acceso al servicio. De esta forma, se evita que un atacante pueda crear millones de registros y colapsar la página web. No obstante, el reto en una comunicación entre ordenadores no puede ser tan complejo. Debe ser solventable, aunque con una complejidad relativa.
La principal característica de esta estrategia es su asimetría. El trabajo por parte del cliente es moderadamente difícil de realizar, pero la verificación por parte de la red es sencilla. Esto quiere decir, que la prueba de trabajo lleva mucho tiempo en producirse y es computacionalmente costosa. Pero verificarla es sencillo, pues la prueba diseña patrones que facilitan la verificación.
Fue precisamente esta característica, la que llamó la atención de Satoshi Nakamoto a la hora de diseñar Bitcoin. Por eso se implementó el sistema HashCash (un sistema PoW) en su reconocida criptomoneda.
Algoritmos PoW – Un poco de historia
En el año de 1992, la penetración de Internet ya era bastante importante. Con su llegada, el uso de los correos electrónicos comenzó a masificarse. Pero esta positiva situación traía consigo nuevos problemas. Los sistemas de correo electrónico sufrían de forma recurrente ataques de spam. Estos ataques generalmente deshabilitaban a los servidores y dejaban sin servicios a muchas personas. Era necesario conseguir una solución a este problema.
En el año 1993, los académicos Cynthia Dwork y Moni Naor, reconocieron el problema y trataron de resolverlo. Así se originó el ensayo «Fijación de precios mediante el procesamiento o la lucha contra el correo no deseado». En el que presentaron formas de evitar que los spammers enviarán mensajes masivos.
La idea presentada era la de incluir un costo computacional para poder usar los servicios de correo electrónico. Para ello, Dwork y Naor diseñaron una serie de pruebas que requerían de trabajo con coste de computación. Entre ellas; el cálculo de algunas raíces cuadradas o el uso intensivo de funciones hash. Una vez realizado este trabajo, el usuario debía agregar la información al correo para ser verificada. Si era correcta el correo se enviaba, si no, el correo era rechazado. Este sencillo sistema disuadía a los spammers de seguir realizando sus ataques.
Sin embargo, todavía pasaría algún tiempo hasta que el sistema pudiera ser implementado completamente.
La creación de HashCash
Más tarde en el año 1997, salió a la luz el protocolo HashCash creado por el criptonarquista Adam Back. Al igual que en el ensayo anterior, el término “Prueba de trabajo” (Proof of Work) nunca se utilizó en el anuncio de HashCash. Pero Back si utilizó un término muy importante en la tecnología blockchain, el de “Protección de Doble Gasto”, del que David Chaum ya había adelantado en sus trabajos anteriores.
Con HashCash, Back pretendía poner freno a los envíos de spam masivo. La idea era imponer un coste no monetario al envío de cada correo. Un coste que estaría asociado al cálculo de problemas usando el computador. El principio es sencillo: se calculaba el problema, se adjuntaba a la información del correo y se enviaba. El servidor recibía el correo, verifica la información y lo aceptaba o rechazaba si pasaba la prueba.
Pero el coste computacional también tenía un coste real. El gasto en electricidad causado por el cálculo intensivo era de un céntimo de dólar por cada correo enviado. Quien enviará unos pocos correos al día no notaría nada, pero un spammer, sí. Enviar millones de correo aumentaría de gran manera la factura de electricidad de esa persona. De esa forma, se desincentiva a los spammer de realizar su actividad maliciosa.
El nacimiento del término Prueba de Trabajo
Fue finalmente en 1999, cuando Markus Jakobsson y Ari Juels escribieron un documento titulado «Prueba de trabajo y Protocolos de pudin de pan». Y así se acuñó el término «Prueba de Trabajo». Jakobsson y Juels afirman que un sistema de prueba de trabajo es:
Este es un protocolo en cual un comprobante demuestra a un verificador que ha gastado un cierto nivel de esfuerzo computacional en un intervalo de tiempo específico. Aunque no se definieron como tales ni se trataron formalmente, las pruebas de trabajo se han propuesto como un mecanismo para varios objetivos de seguridad, incluida la medición del acceso al servidor, la construcción de cápsulas de tiempo digitales y la protección contra el envío de correo no deseado y otros ataques de denegación de servicio.
Markus Jakobsson y Ari Juels
Proof of Work and Bread Pudding Protocols (1999) – Pág 2
Además, en este trabajo se profundiza en la capacidad de las Pruebas de Trabajo de agregar capas de seguridad. Las cuales sirven para garantizar servicios críticos donde la seguridad es muy importante.
La Prueba de Trabajo llega a Bitcoin
Satoshi Nakamoto publicó el documento técnico de Bitcoin el 31 de octubre de 2008. En el mismo, Nakamoto tenía claro que la prueba de trabajo era un elemento clave del protocolo de Bitcoin. En el resumen del whitepaper de Bitcoin podemos leer lo siguiente:
Proponemos una solución al problema del doble gasto utilizando una red de igual a igual. La red marca la hora de las transacciones al agruparlas en una cadena de prueba de trabajo basada en hash, formando un registro que no se puede cambiar sin rehacer la prueba de trabajo.
Satoshi NakamotoBitcoin: A Peer-to-Peer Electronic Cash System (2008) – Abstract
De esta manera, Nakamoto hizo uso del trabajo de Adam Back, pues Bitcoin utiliza el protocolo HashCash. Con ello terminó revolucionando al mundo, presentando una tecnología completamente innovadora, la blockchain. Esta tecnología le permitió crear su famosa criptomoneda, y ha evolucionado hasta nuestros días.
Usando el protocolo de Proof of Work, con cada nuevo bloque creado se deberá resolver un acertijo matemático que solo puede ser resuelto mediante prueba y error. Estos acertijos son resueltos por los mineros, haciendo millones de intentos. Resolver el acertijo dará como resultado la creación del bloque, la confirmación de las transacciones involucradas en ese bloque y la generación de nuevos bitcoins que recibirá el minero como recompensa junto a las comisiones implícitas en cada una de las transacciones.
El problema matemático consiste en encontrar los parámetros que den un determinado resultado. Lo especial de ese resultado es que es un hash, por lo que es imposible obtener los parámetros iniciales desde el hash, únicamente pueden ser generados mediante prueba y error.
¿Cómo funciona el protocolo PoW?
La Prueba de Trabajo, funciona de una forma bastante sencilla. De hecho, el proceso que se lleva a cabo, se puede dividir en las siguientes grandes etapas:
- Etapa #1: El cliente o nodo establece una conexión con la red. En este punto, la red le asigna una tarea computacionalmente costosa. Esta tarea debe ser resuelta a los fines de recibir un incentivo económico.
- Etapa #2: Comienza la resolución del acertijo. Esto conlleva el uso de mucha potencia de computación hasta resolver el enigma entregado. Este proceso es el que recibe el nombre de minería.
- Etapa #3: Una vez resuelta la tarea computacional, el cliente comparte esta con la red para su verificación. En este punto, se verifica rápidamente que la tarea cumpla con los requisitos exigidos. Si lo hace, se brinda acceso a los recursos de la red. En caso contrario, se rechaza el acceso y la solución presentada del problema. Es en este punto, donde se realizan las verificaciones de protección contra el doble gasto. Una protección que evita, que se presente más de una vez, una tarea ya asignada y verificada por la red.
- Etapa #4: Con la confirmación que la tarea ha sido cumplida, el cliente accede a los recursos de la red. Gracias a esto, recibe una ganancia por el trabajo computacional realizado.
Son estas cuatro etapas, las que permiten y modelan el funcionamiento de la Prueba de Trabajo. La facilidad de este modelo permite trasladar el mismo a distinto software para aprovechar su potencial. Pero es en las blockchains donde observamos una mayor utilidad, brindando unos niveles de seguridad excepcionales a pesar de la baja complejidad del protocolo. Y al mismo tiempo, permitiendo que millones de personas puedan participar de forma concurrente en la red.
Características del protocolo PoW
- Es un protocolo muy seguro. La Prueba de Trabajo garantiza grandes niveles de seguridad, si la red está formada por miles de mineros. De hecho, mientras más mineros más segura es la red. Esto lo hace ideal para su uso en la formación de enormes redes distribuidas.
- Es sencillo y muy fácil de implementar algorítmicamente. Una de las principales ventajas de PoW es que es muy sencillo de implementar. Esta facilidad se traduce en el fácil mantenimiento de los software que hacen uso del mismo. Además de permitir auditorías de forma mucho más sencilla con el fin de mantener la seguridad de la red.
- Fácilmente adaptable a las necesidades de hardware, pudiéndose diseñar resistencia a determinados equipos (ASIC, GPU, FPGA, CPU). Otra ventaja del protocolo es su adaptabilidad a la tecnología. Se puede hacer más fácil o difícil, con el fin de adaptarlo a los avances tecnológicos. Permitiendo que la evolución del hardware no deje atrás la dificultad de minado. Que por ende termina centralizando el poder minero en quienes tienen hardware más nuevo y poderoso.
- Excelente capacidad de resistencia a ataques de Denegación de Servicios. La principal razón de la creación de los protocolos PoW fue; evitar la denegación de servicios. Una tarea que cumplen a la perfección y que han mejorado mucho los actuales esquemas del protocolo.
- El sistema consume una gran cantidad de energía eléctrica. El intensivo trabajo computacional de PoW necesita de grandes cantidades de energía eléctrica. Estimaciones ubican que el consumo asciende a los 24 Teravatios de energía al año y seguirá ascendiendo a medida que se necesite más potencia para realizar este intensivo trabajo.
Asimismo, puedes revisar más características de este protocolo y revisar las similitudes y diferencias que tiene con respecto al protocolo Proof of Stake en la comparativa PoW PoS que encontrarás en este completo artículo.