Introducción

El nombre de HashCash no suena muy conocido para muchas personas que recién llegan al mundo de las criptomonedas, pero tras de él, está la historia y la razón de la existencia de la Prueba de Trabajo que sostiene al Bitcoin. Pero ¿Qué es exactamente HashCash? ¿Cómo funciona? ¿Quién lo creó y con qué motivos? Esto lo examinaremos a continuación.

El origen de HashCash

La historia de HashCash comienza en el año de 1997, cuando el conocido programador cypherpunk Adam Back diseñó un sistema de Prueba de Trabajo pensado para evitae el spam de correo electrónico. La idea era sencilla pero elegante, además de muy fácil de implementar a todo nivel. 

La misma consistía en resolver un puzzle matemático muy avanzado que consumiera poder de cómputo, y por lo tanto energía eléctrica. Este trabajo computacional, sería el costo a pagar por tener la capacidad de poder enviar un correo electrónico usando la plataforma que implementaría sus sistemas HashCash.

Así básicamente, el objetivo de HashCash, es requerir un trabajo de computación al cliente para que este luego sea verificado por un servidor. Solo realizando satisfactoriamente este trabajo, el cliente podía tener acceso a los recursos del sistema.

Con este sencillo sistema se lograba frenar el spam, de hecho, convertía este tipo de ataques en algo muy caro de realizar. Imagínense, una persona que quisiera enviar cientos de millones de correo tendría que hacer cientos de millones de estas pruebas. Una por cada email que enviaba.

Si bien las pruebas individuales no consumían mucha electricidad, y por lo tanto su impacto en el recibo de luz era pequeño, si un actor malicioso deseaba crear una campaña de este tipo, se encontraría que dicho ataque le costaría mucho y eso se reflejaría en su recibo eléctrico.

La idea de Back resultaba así muy útil y aplicable a otros sistemas. De hecho, su trabajo se basó en un paper anterior de nombre “Valoración a través del procesamiento o combate al correo no deseado”. Un documento presentado en 1992 por los expertos en informática Cynthia Dwork y Moni Naor. En dicho paper, estos especialistas examinaban la idea de crear este tipo de pruebas y usarlas para combatir el spam y requerirlo incluso para acceder a servicios delicados de datos e información en la red.

Sin embargo, la idea de Back no tuvo mucho revuelo en ese entonces. Revolucionaria como lo es, solo pocos mostraron interés en la misma, pero Back siguió manteniéndola y desarrollándola, en especial como un sistema de fuerza bruta.

Relacionado: ¿Qué es un Hash?

¿Cómo funciona HashCash?

El funcionamiento de HashCash es bastante sencillo. Básicamente lo que hace es establecer un trabajo criptográfico complejo que debe resolver haciendo uso del poder de la computadora donde se ejecuta. Como resultado debe devolver una cadena alfanumérica que servirá de testigo de que el trabajo ha sido realizado de forma exitosa. Pero adicional, esta cadena debe servirle a un servidor como medio para verificar que realmente dicho trabajo se hizo de la forma correcta. Esto último, debe ser muy sencillo de realizar.

En pocas palabras, HashCash realiza un arduo trabajo criptográfico, para arrojar del mismo una cadena que puede ser verificada fácilmente y en segundos. De esta manera, toda la carga de trabajo se pone en el lado de los usuarios, mientras los servidores pueden dedicarse solo a verificar y dar acceso a los servicios que los usuarios necesitan.

Ejemplo de uso

Ahora bien, veamos algunos ejemplos de uso de HashCash reales. Para ello, usaremos como sistema operativo GNU/Linux Debian, y la versión HashCash que podemos instalar desde su repositorio o almacén de software. En caso de que estés en Windows, puedes obtener una copia desde este enlace oficial.

Creando una prueba de trabajo

Ahora bien, si por ejemplo deseamos hacer un pequeño trabajo el comando a introducir sería el siguiente:

hashcash -mb8 mipruebadetrabajo

Ahora expliquemos un poco qué significa todo esto. La opción "-m" nos indica "mint" o crear un nuevo hash siguiendo el protocolo establecido de Prueba de Trabajo de HashCash.  La opción "-b" nos indica "bits" o la cantidad de información criptográfica que tendrá la salida. Este parámetro es importante porque a mayor cantidad de bits mayor será la dificultad para crear el hash y más tiempo nos tomará crearlo. Seguidamente a "-b" tenemos el número 8, que es la cantidad de bits que usaremos.

Como resultado de la anterior línea de comando obtenemos este resultado:

hashcash token: 1:8:200422:mipruebadetrabajo::rmLKoDkCYOxqM0K8:00051

Sin importar el sistema operativo que uses, el resultado de HashCash para el comando dado será el mismo. Esto significa que la prueba de trabajo de HashCash es reproducible, y siempre dará el mismo resultado si ofreces los mismos parámetros. La generación de esta prueba criptográfica apenas llevo unos segundos, pero si la llevamos al límite podemos tardar varias horas en conseguir la respuesta por parte del programa.

Verificando una prueba de trabajo

Ahora bien, sabemos como crear un Prueba de Trabajo con HashCash, pero ¿Cómo la verificamos? Pues bien, para ello debemos introducir el siguiente comando:

hashcash -cb -r prueba_de_trabajo hashcash_token

Esto se leería de la siguiente manera:

La opción "-c" nos indica "check" o chequear. Nos permitirá comprobar que la prueba de trabajo es correcta. La opción "-b" es igualmente indicativa de la cantidad de bits. Esta debe corresponder con la cantidad puesta en la creación de la prueba de trabajo. La opción "-r" o "recurso" nos permite indicar el origen o dato que usaremos para la prueba de trabajo. Y el dato hashcash_token es el resultado que hemos obtenido con el comando anterior para generar la prueba. Así tenemos que el comando resultante para verificar nuestra anterior prueba de trabajo es:

hashcash -cb8 -r mipruebadetrabajo 1:8:200422:mipruebadetrabajo::rmLKoDkCYOxqM0K8:00051

Así de sencillo podemos verificar la prueba, y como seguramente han comprobado este proceso es prácticamente instantáneo puesto que no supone ningún trabajo complicado de realizar. Como resultado de este comando obtendremos esta salida:

matched token: 1:8:200422:mipruebadetrabajo::rmLKoDkCYOxqM0K8:00051

Este nos indica que el token es correcto, y en caso de que no lo sea, por algún cambio o alteración obtendremos esta salida:

skipped: token has insufficient bits

rejected: no valid tokens found

check: failed

Adicional a estos ejemplos, HashCash nos permite hacer mucho más, pero estos sencillos ejemplos te mostrarán el potencial de este software para realizar pruebas criptográficas que luego podemos verificar.

Casos de uso de este algoritmo

Ahora, la creación de HashCash nos permite crear un mecanismo de control de acceso a recursos computacionales preciados y escasos. En un principio como dijimos fue pensado para frenar los ataques de spam en los servicios de correo. Pero su utilidad va mucho más allá de eso.

Por ejemplo, podemos usar HashCash para crear un sistema de protección de acceso a recursos online de un servidor. Así un servidor puede usar HashCash para requerir a sus usuarios una prueba de trabajo sencilla cuya realización les dará acceso a los recursos de ese servidor. Una protección que puede ayudar a mitigar ataques de denegación de servicios (DoS o DDoS).

Relacionado: Minería

HashCash y su relación con Bitcoin

Ahora bien, ya sabemos que es HashCash y las posibilidades que él mismo nos permite. Pero seguramente te preguntarás ¿Qué relación guarda este software con la creación y funcionamiento de Bitcoin? Pues bien, la verdad es que tienen mucha relación. Satoshi Nakamoto creó Bitcoin usando el concepto de Prueba de Trabajo desarrollado por HashCash, de hecho, el algoritmo es parte del desarrollo de Bitcoin Core.

De esta forma todos los mineros que forman parte de la red de Bitcoin usan sus recursos para resolver pruebas de trabajo que son generadas siguiendo el algoritmo de HashCash.  Por su lado, los nodos de la red Bitcoin usan dicho algoritmo para verificar que el trabajo de minería de los mineros ha sido realizado de forma satisfactoria. De esta manera, HashCash encaja en la construcción de Bitcoin y la tecnología de las criptomonedas.

Claramente esta relación no solo se limita a Bitcoin, sino también al resto de criptomonedas que usan la Prueba de Trabajo. Todas y cada una de ellas usan el mismo algoritmo de Bitcoin o algún derivado ajustado a su desarrollo. Pero el objetivo es el mismo, hacer que el trabajo de los mineros sea algo muy complejo de realizar, contrario al hecho de verificar dicho trabajo, que puede realizarse haciendo uso de muy pocos recursos.

Las diferencias entre HashCash y la implementación en Bitcoin

Si bien el trabajo de los algoritmos es el mismo, hay ciertos parámetros que cambian entre la implementación de HashCash de Adam Back y la de Bitcoin creada por Satoshi Nakamoto. El primer cambio que vemos es que HashCash hace uso de la función hash SHA1, mientras que Bitcoin usa SHA-2, más específicamente SHA-256. Este primer cambio permite que la implementación de Nakamoto sea más compleja y al mismo tiempo más segura.

Otro cambio fundamental es la extensión de las pruebas. HashCash solo puede realizar pruebas de trabajo con una extensión de 160 bits, mientras que Bitcoin llega hasta los 256 bits. Esto permite que Bitcoin, tenga un rango mayor de hashes y respuestas, garantizando características como la unicidad de sus transacciones y bloques. Además de evitar problemas de colisiones o de ataques por fuerza bruta.

Seguidamente otro factor que los diferencias es la dificultad del trabajo. En HashCash este valor puede duplicarse o reducirse a la mitad, mientras que Bitcoin usa el concepto de dificultad de minería, para introducir un valor de dificultad dinámico. Esto incrementa la seguridad del algoritmo.

Otro punto que diferencia a estas implementaciones es los pases. En HashCash, un hash se forma en una sola iteración del algoritmo. Pero en Bitcoin, dicha iteración sube a dos de ellas. Esto hace que el algoritmo implementado en Bitcoin sea más seguro.