¿Cómo podemos usar el protocolo del Bitcoin para salir de fiesta?

Introducción

Mucho se ha hablado en los últimos años sobre el Bitcoin y el Block- chain. Pero, ¿qué son? ¿Es posible entender cómo funcionan usando un ejemplo simple de nuestro día a día? Eso es precisamente lo que vamos a intentar en este artículo para solucionar un problema con  el que muchas personas se encuentran en su día a día: ¿cómo podemos repartir la cuenta cuando salimos de fiesta de una forma justa y eficiente?

Es innegable que internet ha cambiado nuestro estilo de vida. Por primera vez en la historia, tenemos una herramienta para conectar a toda la humanidad. Y aunque eso es algo bueno, esto ha creado un nuevo paradigma: si no conocemos a la persona o grupo de personas que está al otro lado de la red. ¿cómo podemos compartir información válida entre nosotros sin tener que fiarnos de la otra parte o sin perder nuestro anonimato?

En este artículo vamos a analizar la solución más conocida y usada en los últimos años a este problema, siempre teniendo como ejemplo el cómo hacer cuentas justas al salir de fiesta. Ésta solución es el blockchain[3][6]. Pero, para entender en profundidad qué es el blockchain, necesitamos primero entender ciertos conceptos matemáticos y criptográficos, así como sus ventajas y desventajas.

¿Qué es el blockchain?

Imaginemos que hemos salido de fiesta con nuestro grupo de amigos en las fiestas de nuestro pueblo o nos hemos ido de festival. ¿Cómo pagaremos las rondas que vayamos consumiendo durante la noche? La solución más obvia sería que cada uno pagase lo suyo, aunque está claro que esta no es la solución más eficiente, ya que esto hace que el tiempo para pedir una ronda se incremente pues el camarero tiene que ir cobrando cada consumición una por una. Para evitar precisamente ésto muchos grupos deciden poner un bote, haciendo así el pago más rápido. Por desgracia, este método de pago gana en rapidez pero pierde en «justicia». ¿Qué pasa si al acabar la noche, aún hay dinero en el bote? ¿Qué pasa si al ir a pagar una ronda no llega? Depende del tipo de consumición, el precio puede variar. En ese caso ¿es justo poner del bote común?

Vista la problemática de ésta solución, podemos pensar en una solución más inteligente. Vamos a crear una lista en la cuál cada persona va a poner tras cada ronda a quién le debe dinero y cuánto le debe. Para que ésta cuenta sea lo más transparente posible, en vez de escribirla en un cuaderno la vamos a poner online para que todos los involucrados puedan verla, por ejemplo, en un grupo de WhatsApp. Pero ¿qué pasa si en ese grupo hay gente de la que no nos fiamos? Para resolver el problema de la fiabilidad, en este documento vamos a ver algunos de los trucos que podemos usar para no tener que fiarnos de la palabra de otra persona. Y ésto es precisamente lo que es el blockchain: una lista en la que sus participantes escriben cada una de las transacciones que hacen, con ciertos mecanismo para no tener que fiarnos de lo que otras personas dicen. Pero antes de entrar en los detalles, veamos lo que es una transacción.

Transacción

Como ya hemos comentado, en la lista que vamos a escribir en el grupo de WhatsApp va a aparecer lo que cada persona le debe al que ha pagado cada ronda por lo que se ha consumido. Pero si yo he pagado 3 chupitos en un bar, ¿a cuántas cervezas equivale eso en una discoteca? Ya que es difícil comparar rondas, vamos a crear una moneda virtual, llamada «Fiestacoin». A cada bebida en cada sitio se le dará un valor en Fiestacoins que se usará dentro del grupo.

Existen dos maneras obvias de saber los Fiestacoins que se han ganado o consumido en cada ronda: por un lado, que lo escriba la persona que ha pagado o que escriba la persona que tiene que pagar. No es recomendable que la persona que lo escriba sea la persona a la que se le debe Fiestacoins, ya que ésto podría incitar que gente a la que le falta Fiestacoins escriba que se les debe, aunque no sea verdad. Además eso implicaría que alguien que no somos nosotros pueda decir qué hacer con nuestros Fiestacoins, lo que es un problema de base. Por otro lado, lo puede escribir la persona que debe. Esto tiene mucho más sentido ya que ahora es el usuario que «pierde»Fiestacoins el que escribe en la lista. Ahora no tiene sentido escribir algo falso, ya que lo único que haríamos sería perder.

Ahora, cuando alguien vaya a sacar una ronda, comprobará primero que todos le han escrito que le deben Fiestacoins y entonces pagará la ronda. A escribir qué cantidad de Fiestacoins van a ir de nuestra cuenta a la cuenta de otro usuario en el blockchain se le denomina transacción. Pero, ¿cómo nos podemos asegurar que la persona que ha dicho que me va a pagar tiene en realidad la capacidad de pagarme? Muy sencillo, cada vez que se añada una transacción, habrá que comprobar si ese usuario tiene suficiente crédito en esa lista. Si no lo tiene, esa transacción no es válida. En este caso particular, tener suficiente crédito significa que a ese usuario le deben más Fiestacoins de las que debe él. En este punto ya podemos empezar a percibir el valor de la lista (en nuestro caso, implementada en un grupo de WhatsApp): el poder utilizar lo que la gente te debe de anteriores rondas para pagar tus rondas futuras. Por eso, de alguna manera, el activo de las blockchains es lo que la gente te debe y es eso lo que se usa como moneda, por ejemplo, en el Bitcoin o en nuestro caso, Fiestacoins. La siguiente pregunta obvia es, ¿cómo podemos asegurarnos de que nadie pueda realizar una transacción en mi nombre?

Firma digital

En el grupo de WhatsApp, el origen del mensaje se sabe por el número de teléfono del que lo manda, pero ésto es un gran problema si nosotros no queremos que se sepa un dato tan personal como un número de teléfono. A medida que la lista (y el grupo de WhatsApp) se hace más grande, cada vez hay más gente dentro y es muy posible que gente en la que no confiamos intente hacerse pasar por quien no es para conseguir algún tipo de beneficio.

Imagen 1: El grupo de Fiestacoins daría una clave privada por un mensaje privado (que sólo el usuario conocería) y una pública en el grupo que todo el mundo conocería.

La firma digital [1] se creó para solucionar un único problema: certificar el origen de un mensaje. Para entender este concepto tan complicado vamos a tener que modificar un poco el comportamiento del grupo de WhatsApp.

Cada vez que un nuevo usuario entre al grupo, la aplicación de WhatsApp van a mandar dos mensajes: uno privado que sólo el nuevo usuario va a poder ver (Lpr) y otro público, que todos van a poder ver (Lpu). Estos mensajes van a contener un conjunto de caracteres a los que vamos a llamar llaves.

Estos caracteres tienen una propiedad muy especial: si los usamos de la manera correcta vamos a poder identificar quién ha escrito un mensaje, abrir y cerrar su origen (por eso se llaman llaves) o lo que es lo mismo, vamos a poder determinar de manera certera quién los ha mandado.

Para poder utilizar las llaves vamos a tener dos funciones, las cuales nos podemos imaginar como cajas negras (caja negra es un concepto usado en muchas áreas para designar a una entidad en la que entran una serie de cosas y salen otras, sin saber lo que pasa dentro).

La primera caja negra va a servir para firmar un mensaje.

Firma = crearfirma(mensaje, Lpr)                         (1)

En la caja meteremos el mensaje que queramos mandar (da igual su contenido) y la llave privada (recordemos que es un código, una serie de caracteres). Lo que la función nos va a devolver es una firma digital. Se le llama firma porque de la misma manera que nosotros al firmar con nuestra firma mostramos que un documento es nuestro, esta firma también lo hace. El problema de las firmas convencionales es que, si alguien es capaz de  ver nuestra firma, en principio podría falsificarla. Esto no pasa con las firmas digitales, ya que la función que crea la firma digital crea una firma diferente para cada cada documento y usuario. Eso implica que, con nuestra llave privada (la que sólo sabemos nosotros), podemos firmar tantos documentos como queramos sin que otra persona pueda falsificar nuestra firma en un documento que no es nuestro. Pero, si la firma es diferente, ¿cómo conocemos su origen?

Para ello, tenemos nuestra segunda caja negra, que sirve para conocer el origen de un mensaje.

Correcto/Erroneo = verificar(mensaje, Lpu, firma)                (2)

Nuestra llave pública, como bien dice su nombre, es pública, conocida por todos. Si alguien recibe un mensaje supuestamente nuestro con su firma digital, no hay más que meter el mensaje, la firma y la llave pública en la función verificadora y nos dirá si el mensaje fue firmado por su llave privada o no. Como ejemplo de su uso, podemos ver la Imagen 1.

Bloque

Todo lo que hemos dicho hasta ahora se podría utilizar en un grupo de amigos pequeño sin demasiados problemas. Pero normalmente cuando salimos de fiesta nos encontramos con conocidos, familiares, viene algún amigo de amigos o hacemos nuevos. De ser así, no podríamos usar la lista que tenemos con nuestros amigos. Hagamos una lista entonces para toda nuestra ciudad. ¿Y si viene alguien de otra ciudad? Hagamos una lista para España.

¿Y si queremos incluir un extranjero? Hagamos entonces que el grupo de Fiestacoin esté disponible para toda la humanidad.

El uso de las dos listas es en teoría igual (leemos cada mensaje, comprobamos que el usuario tiene suficiente dinero y que el mensaje es fidedigno). El problema es que aunque es posible leer todos los mensajes de un grupo de amigos, es imposible leer todos los mensajes de un grupo de WhatsApp en la que está, literalmente, toda la humanidad, y mucho menos verificarlos: no sabremos quién le ha mandado FiestaCoins a quién y en qué orden se han producido las transacciones (ya que por cómo está estructurado internet, los mensajes pueden llegar antes a personas que estén geográficamente más cerca). Por ello, podemos poner varias transacciones en un bloque[5].

El poner las transacciones en bloques es el motivo por el que el blockchain (cadena de bloques en español) se llama así. Y, ¿cómo hacemos para que cada usuario no cree el bloque que quiera y no se nos inunde el grupo de WhatsApp de mensajes? Para ello, tenemos que hacer por un lado, difícil crear un bloque; por otro, fácil verificarlo para que nadie pueda hacer trampas y por último tiene que haber algún tipo de aliciente para hacerlo (si no, nadie lo haría).

¿Cómo podemos hacer ésto? Veamos primero que herramienta matemática se usa y luego veremos cómo se aplica en un blockchain.

Funciones hash

Las funciones Hash [4] son funciones muy útiles para convertir cualquier tipo de dato de cualquier tamaño en un dato de tamaño fijo y que lo repre- sente inequivocamente, como el ADN de una persona.

hash = funcionhash(mensaje)                         (3)

Las funciones hash tienen una propiedad muy interesante (y útil en nuestro caso) que es que cualquier pequeña variación en el mensaje cambiará completamente su hash. Podemos ver un ejemplo claro en la Imagen 2.

Imagen 2. Leire está esperando un mensaje de Xabi. Nagore, sabiendo ésto, le quiere mandar un mensaje a Leire en nombre de Xabi sin su autorización y con contenido falso. Por suerte, Xabi ha firmado su mensaje usando su clave privada que sólo él conoce. Entonces, Leire utiliza la llave pública de Xabi (accesible por cualquiera) para comprobar el origen del mensaje. Nagore, al no tener la llave privada de Xabi, ha firmado el mensaje con una firma no válida y su mensaje es descartado por Leire.

El significado de esto es que, dado un mensaje, es muy fácil calcular  su hash, pero dándonos el hash no es posible encontrar el mensaje original de una forma fácil. La única forma de encontrar el mensaje sería probando muchos mensajes hasta que uno de ellos, por casualidad, nos diera el hash que queremos.

¿Y en qué nos ayuda ésto? Un bloque (un grupo de transacciones) no es más que un mensaje. Entonces, podemos encontrar el hash del bloque, siempre teniendo en cuenta que el orden de las transacciones dentro del bloque cambia su hash.

Ahora que se entiende la herramienta, al final del bloque vamos a escribir un conjunto de caracteres. Veamos por qué hacemos ésto.

Prueba-de-trabajo

Vamos a ponerles una restricción a los bloques: al pasar la el bloque por una función hash, su hash tiene que tener un número dado de ceros al principio. Para conseguir ésto, como bien se ha dicho antes, pondremos ciertos caracteres al final del bloque llamados números mágicos, e iremos probando distintas combinaciones de caracteres hasta que consigamos que el hash del bloque tenga los ceros deseados. Como hemos dicho antes, no es posible ir del hash al mensaje original directamente, la única manera de hacerlo es por prueba y error. Ésta prueba es muy costosa a nivel computacional (requiere tiempo y electricidad). Con lo cual, cuando se consiguen el número de ceros deseado, implica que alguien ha consumido muchos recursos en ese bloque y que el bloque es de fiar.

Es muy fácil comprobar si la regla del hash se cumple, ya que comprobarlo es computacionalmente poco costoso, por lo tanto, no tiene sentido el intentar hacer algún tipo de trampa con el hash. Pero, ¿qué aliciente puede tener un usuario para hacer todos estos cálculos? La respuesta es simple: un premio. Al hacer el cálculo correctamente y obtener el número de ceros deseado en un bloque, se le da al usuario una cantidad de monedas. En el caso del grupo de WhatsApp, se le daría dinero para consumiciones.

En el caso del Bitcoin, se dan bitcoins. A este proceso se le llama minado, ya que el valor del número mágico hay que minarlo hasta encontrar el valor deseado, de la misma manera que en una mina se quita tierra y piedras para encontrar metales o minerales. El bloque también contiene el hash del bloque anterior, lo que le da continuidad a la cadena de bloque o blockchain y no permite que nadie meta bloque intermedios. En la Imagen 3 podemos ver la estructura de los bloques.

Imagen 3: Ejemplos de utilización de una función hash[2]. En el primer, segundo y tercer ejemplo, podemos ver como un cambio muy pequeño en el mensaje hace que el hash del mensaje sea completamente diferente. Hay que tener en cuenta también que la longitud del mensaje no varía la longitud de su hash (en el cuarto ejemplo se ha utilizado la primera frase del Quijote como ejemplo), ya que la longitud del hash es siempre constante.
Relación entre el blockchain, el Bitcoin y Fiestacoin

Pero entonces, ¿cómo podemos relacionar la estructura que se ha explicado (el blockchain) y la criptomoneda más famosa del mundo? El blockchain no es más que un concepto, una técnica, como puede ser una suma en matemáticas, mientras el Bitcoin es una moneda electrónica producto de la realización del concepto del blockchain. En el caso particular de las Fiestacoins el proceso de una transacción sería el siguiente:

  • Un usuario escribirá una transacción.
  • Otro usuario juntará varias transacciones tras comprobar que son válidas y creará un bloque que tenga un hash con un número de ceros dado.
  • Una vez el bloque ha sido validado, la transacción ha sido verificada y el usuario que ha validado el bloque recibe Fiestacoins como compensación.

Conclusiones

Aunque sea menos conocido, en este artículo nos hemos centrado más en el blockchain que en el Bitcoin. La razón de ello es que hay muchas criptomonedas como el bitcoin (Ethereum, Litecoin, Dash…) pero todas están basadas en el concepto del blockchain. En este artículo no se han mencionado muchos aspectos técnicos como cuántos ceros tiene que tener el hash o cuánto gana el verificador. No hemos hablado de cómo se autoregula el blockchain, qué estrategias de minado utilizan los mineros ni que consecuencias está teniendo tanto en la economía como en el medio ambiente. Este artículo está pensado como un punto de entrada a la tecnología del blockchain, no una explicación detallada del Bitcoin.

Las criptomonedas pueden ganar o perder valor de mercado, pueden crear- se nuevas y desaparecer al cabo del tiempo, pero lo que está claro es que el concepto de blockchain va a permanecer con nosotros en los años venideros en forma de moneda, para compartir información o quizás, para resolver nuestros problemas cuando salimos de fiesta.

 

Este artículo nos lo envía Ander Galisteo, ingeniero de nacimiento (habiendo estudiado Ing. de Telecomunicaciones por la UNAV), doctorando de profesión (en IMDEA Networks y la Universidad Carlos III de Madrid) y divulgador como futuro sueño. Intenta enseñar a los muggles la magia de la ingeniería, pero el hacerlo es ya magia de por sí y no siempre lo consigue.

Referencias

  • Whitfield Diffie y Martin «New directions in cryptography». En: IEEE transactions on Information Theory 22.6 (1976), págs. 644-654.
  • info: Hash functions. https :// www . fileformat . info / tool/hash.htm.
  • Satoshi Bitcoin: A Peer-to-Peer Electronic Cash System. No- vember 2008. 2015.
  • Bart Preneel. «The first 30 years of cryptographic hash functions and the NIST SHA-3 competition». En: Cryptographers’ track at the RSA conference. 2010, págs. 1-14.
  • Melanie Swan. Blockchain: Blueprint for a new economy. .O’Reilly Me- dia, Inc.»,
  • Youtube channel 3Blue1Brown: Ever wonder how Bitcoin (and other cry- ptocurrencies) actually  work? https://www.youtube.com/watch?v= bBC-nXj3Ng4.

 



Por Colaborador Invitado
Publicado el ⌚ 20 octubre, 2018
Categoría(s): ✓ Actualidad • Matemáticas