Pintxo-pote kontuak, blockchain a eta bitcoin a

Ander Galisteo Zabalo

IMDEA Networks Institutua (Madril); Carlos III Unibertsitatea (Madril)

En los últimos años hemos escuchado mucho sobre blockchain y bitcoina. ¿Pero qué son? ¿Es posible entender cómo funcionan con un simple ejemplo cotidiano? Ese es precisamente el objetivo de este artículo, ya que vamos a comparar el concepto de blockchain blockchain con un problema que tenemos en Euskal Herria: cómo hacer cuentas con los amigos cuando vamos al poteo de pintxos.

Los beneficios de Internet son innegables. Por primera vez disponemos de una herramienta que conecta a toda la sociedad. Sin embargo, esta conexión ha creado un nuevo paradigma. Los usuarios no podemos saber si la persona que está al otro lado de la red es fiable. Por tanto, ¿cómo podemos conseguir que todos compartamos información sin que nadie sustituya la identidad de nadie y cambie la información privada?

En este artículo se analizará la solución más conocida que se ha encontrado en los últimos años para solucionar este problema, tomando como ejemplo la realización de cuentas con amigos como el blockchain o las cadenas de bloques[3][6]. Para ello, en primer lugar, se expondrán una serie de conceptos imprescindibles para entender qué son las cadenas de bloques, así como los beneficios y problemas que pueden suponer.

¿Qué son las cadenas de bloques?

Imaginemos que estamos con amigos, por ejemplo, en el bote de pintxos del barrio donostiarra de Gros. ¿Cómo pagamos nuestros botes de pintxos? Por un lado, es posible que cada uno pague lo suyo, pero está claro que no es la opción más eficiente, ya que nos costaría mucho tiempo pagar. Otra opción sería poner un bote entre todos, porque así pagaríamos mucho más rápido. Sin embargo, esto plantea otros problemas: ¿qué pasaría si el dinero de la lata no fuera suficiente? ¿Y si está sobrando al final? Muchas veces no todos los precios son iguales, en este caso, ¿cómo distribuiríamos el precio?

A la vista de estos problemas podemos pensar en una solución más adecuada. Vamos a crear una cuenta en la que cada uno de los miembros ponga en cada bar cuánto debe y a quién debe. Para que esta cuenta sea lo más transparente posible, en lugar de estar escrita en un papel, todos los datos estarán online para que todos puedan verlos, por ejemplo, en un grupo de WhatsApp. ¿Pero qué pasaría si los miembros del equipo no fueran fiables? Veamos qué trucos podemos utilizar para solucionar este problema de fiabilidad. Al fin y al cabo, la cadena de bloques es sólo esa, una cuenta enorme que todo participante puede utilizar para escribir transacciones entre ellos. Veamos, por tanto, qué es una transacción.

Transacción

Como ya se ha indicado, aparecerá en la cuenta cuánto y a quién debe cada persona en cada bar. Hay dos formas de hacerlo: que quien paga lo anote en la cuenta o quien lo debe lo escribe. Está claro que la primera opción no es conveniente, ya que si algún participante faltara dinero se podría poner en cuenta que otros le deben. Por lo tanto, será el deudor quien anote el importe y a quién debe. Así, aseguraremos que nadie hará trampas porque al escribir algo en la cuenta se pierde dinero. Esto se denomina transacción en las cadenas de bloques. ¿Pero cómo podemos saber si realmente es capaz de pagar el importe que ha escrito? Muy fácil. Cada vez que se escribe una transacción, cada persona que se encuentre en esa cuenta (en este caso en el grupo WhatsApp) debe comprobar si el deudor tiene la moneda suficiente para pagar la transacción. Si no es así, se cancela la transacción. ¿Y cómo podemos saber si tiene suficiente? Sencillamente, porque observando todas las transacciones anteriores podemos saber si tiene suficiente para saldar la deuda. En este punto ya podemos detectar dónde está el valor de la cuenta (en nuestro caso el grupo WhatsApp): podemos utilizar en un nuevo bote de pintxos el importe que me han adeudado previamente. De todas formas, ¿cómo podemos asegurar que sólo escribo mis transacciones?

Firma digital

Firma digital[1] surge para solucionar un único problema: verificar el origen de un mensaje. Aunque los seres humanos veamos un mensaje como un conjunto de letras, un ordenador ve un mensaje como un conjunto de bits (cualquier archivo, a decir verdad).

Supongamos que tenemos muchos usuarios. Los algoritmos de creación de firma digital son dos: el primero se utiliza para crear la firma y el segundo para verificar la firma. Cada usuario tiene dos códigos llamados llave, uno privado (Iphone) y otro público (Gpu). La función de creación de firma es:

firma = firma (mensaje Iphone)

 

Figura : Leire espera un mensaje de Xabi. Nagore quiere enviar un mensaje a Leire en nombre de Xabi para engañar a Leire. Sin embargo, Xabi ha firmado el mensaje con su llave privada. Leire comprueba entonces con firma pública las dos firmas recibidas e identifica la de Xabi y rechaza la de Nagore. Ed. Ander Galisteo

Aquí percibimos la diferencia más significativa entre la firma de las personas y la firma digital. Como puede verse, cada firma se crea para cada mensaje y usuario, por lo que la firma digital dependerá del mensaje y del usuario (las personas utilizamos la misma firma para firmar todos los documentos). Esto significa, entre otras cosas, que podemos utilizar nuestro GPRS en diferentes mensajes sin perder seguridad.

Por otro lado, tenemos otra función de verificación de firma:

si/no = comprobar(mensaje, Gpu, firma)

Esta función nos indica el origen de la firma utilizando la firma, el mensaje y la llave pública. De esta forma sencilla podemos saber si el mensaje ha sido enviado por el usuario que realmente queremos. A modo de ejemplo, ver figura 1.

Bloque

Lo que hemos dicho hasta ahora sería útil en una cuadrilla pequeña, y se podría aplicar sin problemas. Pero normalmente en el poteo de pintxos no solemos estar con la cuadrilla, normalmente nos encontramos con los del equipo deportivo, de la universidad, de los miembros del grupo de baile... y en este caso no nos sirve lo que hemos hecho con la cuadrilla. Hagamos entonces el grupo WhatsApp de San Sebastián, un grupo que englobe a todos los donostiarras. ¿Y hay alguien de Vitoria? Hagamos entonces el equipo de Euskadi. ¿Y hay alguien más? Bien, hagamos un equipo mundial. Pero ahora nos surge un gran problema. En un grupo de WhatsApp a nivel mundial, está claro que no seremos capaces de leer todos los mensajes y todavía será más difícil comprobar todas las transacciones (mensajes): no sabremos a quién debe, ni en qué orden se han realizado las transacciones (no es lo mismo gastar después de recibir el dinero que gastar primero el dinero y después recibir el dinero, que no es legal). Por ello, en una gran cuenta es imprescindible unir las transacciones en una cantidad fija creando bloques[5]. Por lo tanto, cada mensaje de WhatsApp será un conjunto de transacciones.

Sin embargo, podemos pensar que esto no soluciona el problema, ya que ahora en lugar de un montón de transacciones tenemos un montón de bloques. Si cada usuario crea un bloque no solucionaremos el problema. Por ello, debe ser difícil crear un bloque para un usuario, pero sencillo para otros usuarios saber si el bloque está bien creado. ¿Cómo podemos hacerlo?

Funciones Hash

Las funciones Hash[4] son funciones muy útiles para convertir un conjunto de datos en datos de tamaño conocido.

hash = hashfunción (mensaje)

 

Figura : Algunos ejemplos de la función Hash[2]. Como se puede observar en los ejemplos 1, 2 y 3, cuando el cambio es muy pequeño se produce un hash muy diferente. Por otro lado, hay que tener en cuenta que tiene igual la longitud del mensaje (en el cuarto ejemplo, Maritxu nora joan se ha utilizado toda la canción para crear el hash), ya que la longitud del hash siempre será del mismo tamaño.

Sin embargo, las funciones Hash tienen una propiedad muy especial: si cambiamos un poco el mensaje, la salida variará mucho. El cambio es tan grande que nos parece aleatorio la salida de dos mensajes muy similares. En la figura 2 se muestra un ejemplo claro.

Por lo tanto, si a nosotros nos dan un mensaje, es muy fácil conseguir su hash, pero con el hash no podremos saber cuál era el mensaje original. La única manera de conseguirlo es a través de ensayos, cambiando el mensaje hasta conseguir el hash deseado.

¿Y cómo nos puede ayudar? Un bloque (un conjunto de transacciones) es sólo un mensaje. Así, podemos encontrar el hash del bloque, teniendo siempre en cuenta que el hash de nuestro bloque variará en función del contenido y orden de las transacciones.

Ahora vamos a escribir algo al final del bloque, un conjunto de caracteres. Pero, ¿por qué?

Proof-of-work

Se va a poner una restricción a los bloques: el hash del bloque tiene que tener varios 0 al principio. Para conseguirlo, tal y como se ha indicado anteriormente, al final del bloque escribiremos un conjunto de caracteres llamado número mágico. Como hemos dicho, no es posible volver del hash al mensaje, ya que la única forma de obtener los 0 es intentar muchas combinaciones de caracteres hasta conseguir la cantidad 0 deseada. Este cálculo consume muchos recursos del ordenador (tiempo y electricidad). Esto quiere decir que si un bloque tiene un hash de muchos 0, alguien ha gastado mucha energía en calcularla, por lo que es un bloque fiable.

 

Figura : Los bloques se dividen en tres partes. La primera es el hash del bloque anterior, de forma que todos los bloques están en orden. La segunda es la transacción del bloque. El último es un número mágico que se utiliza para empezar el hash con 0. Ed. Ander Galisteo

Como hemos dicho, es fácil comprobar si se cumple la regla del hash. Por ello, no tiene sentido intentar hacer trampas, ya que les atraparían con facilidad. Pero, ¿por qué la gente lo haría? ¿Por qué hacer todos estos cálculos para calcular el hash del bloque? La respuesta es sencilla, porque hay un premio para quien primero crea el bloque. Este premio no es más que un valor dentro de la cuenta: en el ejemplo de la cuadrilla la comida o bebida para el poteo de pintxos, en el caso de la vitcoina las bitcoinas. Este proceso se denomina minería. El bloque se completa con el hash del bloque anterior. Así los bloques están ordenados. En la figura 3 se muestra la estructura del bloque.

Relación entre cadenas de bloques y bitcoina

Pero, entonces, ¿cómo se relacionan la estructura que hemos descrito (cadenas de bloques) con la criptomoneta más famosa del mundo? Lo de las cadenas de bloques es sólo un concepto, una forma de llevar cuentas. Moneda de las cadenas de bloques Bitcoina, moneda electrónica para llevar cuentas utilizando cadenas de bloques. De la misma manera, la suma es sólo un concepto matemático y una expresión de "5+2".

Conclusiones

Aunque más desconocida, en este artículo se ha atribuido a las cadenas de bloques un énfasis mayor que a la vitcoina. ¿Por qué? Pues porque además de la vitcoina hay muchas otras criptomonetas (ethereum, litecoin, dash..), pero todas son expresiones del mismo concepto: de las cadenas de bloques. Las criptomonetas pueden subir o bajar en el mercado, pueden crearse y desaparecer. En cualquier caso, está claro que las cadenas de bloques estarán presentes en nuestra vida en los próximos años en las criptomonetas para compartir información o, quizás, para evitar problemas de pintxo-poteo.

 

Referencias

[1] Whitfield Diffie and Martin Hellman. New directions in cryptography. En: IEEE transactions on Information Theory 22.6 (1976), pp. 644–654.

[2] FileFormat.info: Hash functions. https :// www . fileformat . info / tool/hash.htm

[3] Satoshi Nakamoto. Bitcoin: A Peer-to-Peer Electronic Cash System. Noviembre 2008. 2015

[4] Bart Preneel. “The first 30 years of cryptographic hash functions and the NIST SHA-3 competition”. En: Cryptographers’ track at the RSA conference. Springer. 2010, pp. 1–14.

[5] Melanie Swan. Blockchain: Blueprint for a new economy. "O’Reilly Me- dia, Inc.", 2015

[6] Youtube channel 3Blue1Brown: Ever wonder how Bitcoin (and other cryptocurrencies) actually work? https://www.youtube.com/watch? v=bbc-nXj3Ng4.

Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila