Blockchain y Bitcoin, la tecnología de moda

blockchain bitcoin
clock14 min

Bitcoin

Bitcoin es una criptomoneda digital. Como tal moneda se puede usar para el intercambio por bienes y servicios allá donde sea aceptada. Es decir, se pueden intercambiar tomates por bitcoins siempre que el propietario de los tomates acepte pagos en esta moneda.

criptomoneda bitcoin
Símbolo de Bitcoin

No entro en la discusión de si Bitcoin es o no es una divisa, pues en muchos casos las legislaciones de los diferentes países no la consideran como tal. En algunos de ellos, los bitcoins se asimilan a una materia prima (como el oro o el coltán) de carácter digital.

En cualquier caso en tanto en cuanto que nos sirve para el intercambio por bienes y servicios, es un medio de pago valido, que es a lo que habitualmente denominamos «moneda» (también son monedas un cheque de viaje o un vale descuento de la cadena de tiendas X, aunque solo algunos las acepten como medio de pago).

Una moneda tradicional como el Euro está soportada por mecanismos de seguridad como la estampación de un motivo, marcas de agua, bandas holográficas, … Los bitcoins están protegidos por algoritmos criptográficos y de ahí su denominación de criptomoneda.

La propiedad actual de los bitcoins existentes queda registrada en una base de datos de tipo blockchain. Aunque veamos fotos en los medios de monedas con el símbolo de bitcoin, no existe nada físico en esta moneda. Es puramente digital y está soportada por un registro contable almacenado en una cadena de bloques, de la cual tienen una copia todos los nodos de la red Bitcoin.

bitcoin fake
No existen monedas reales de Bitcoin

Bitcoin fue descrita por Satoshi Nakamoto en 2008 y su primer bloque se creo en el año 2009. Fiel a su principio de privacidad, realmente no existe ningún Satoshi Nakamoto y existen infinidad de teorías sobre el autor o autores de esta criptomoneda.

Veamos a continuación las características particulares de esta implementación de la cadena de bloques.

Las direcciones

Los bitcoins no están asociados a un propietario con nombre y apellidos. Uno de los principios de diseño de esta moneda es la privacidad y que las transacciones aunque son completamente públicas (transparencia), son a su vez totalmente anónimas.

En la red Bitcoin los bitcoins están asociadas a direcciones. ¿Y que es una dirección? Pues un número muy largo, como el lector ya podrá imaginar. Una dirección puede tener esta pinta:

 13FNSzUf9C6BCgh5jxFBXa9Qu9b37zHjmn

Es una representación en Base58 de una muy larga cadena de bits. Su fundamento es el siguiente:

  1. Se generan de forma aleatoria un par de claves (pública y secreta) de acuerdo al algoritmo ECDSA.
  2. Se genera un numero con la versión del algoritmo concatenado al resultado de aplicar consecutivamente dos funciones de dispersión (SHA256 y RIPEMD160) a la clave pública obtenida en el paso 1.
  3. Al número obtenido en el paso dos se le aplica dos veces la función SHA256 y nos quedamos con los cuatro primeros bytes del resultado. Esto es un código de redundancia cíclica de la operación anterior.
  4. Finalmente la dirección se forma codificando en Base58 el número obtenido en el paso 2 junto con el código de redundancia cíclica del paso 3.

No necesitamos entender los detalles internos del funcionamiento de estos algoritmos. Lo único importante a entender es que al calcular la dirección de esta manera, solo el propietario de la clave secreta asociada a la clave pública que se usó para calcular la dirección podrá desbloquear los bitcoins asociados a la misma.

La dirección por tanto no es mas que una forma ofuscada de una clave pública. Los flujos de bitcoins se hacen entre dos direcciones. Para ser el receptor de un pago debo hacer pública la dirección en la que quiero recibirlo. Pero no necesariamente mi identidad.

direccion real bitcoin
Ejemplo de una dirección real en Bitcoin.

Los monederos

Podríamos pensar que una dirección es lo mismo que un usuario, pero nada mas lejos de la realidad.

Un usuario de Bitcoin habrá generado un número arbitrario de direcciones. Se puede usar la misma dirección en diferentes transacciones, pero cuanto mas se reuse una misma dirección mas posibilidades hay de que se descubra la identidad del propietario. La recomendación es que se usen direcciones nuevas para cada transacción.

Cada dirección estará asociada con un par de claves publica y secreta. Aquel que conozca la clave secreta podrá usar los fondos asociados a la dirección.

Este conocimiento es lo único que soporta la propiedad en la red Bitcoin. Si el conocimiento se pierde, los bitcoins se pierden para siempre. Y si el conocimiento se roba, los bitcoins pueden ser transferidos a otra dirección sin que el propietario «moral» pueda reclamar el fraude.

Generar una nueva dirección y su par de claves es un proceso sencillo. Sin embargo necesitamos poder almacenar esta terna en un lugar seguro y a buen recaudo. La forma de hacerlo es a través de un monedero digital (digital wallet).

Un monedero es un software que almacena la relación entre una dirección y su par de claves. La información siempre se almacenará de forma encriptada usando alguna clave adicional (contraseña) que se mantiene fuera del propio monedero.

monederos mas populares
Algunos de los monederos mas utilizados

Hay dos formas de mantener este almacén:

  • En nuestra computadora local o en nuestro dispositivo móvil. Tiene la ventaja de que la información está en un dispositivo bajo nuestro control, pero si nos roban el dispositivo, se avería o se destruye, podemos perder todos nuestros fondos.
  • En un servicio en la nube. En este caso el almacén seguramente estará replicado en varios servidores, pero al final estamos confiando en que un tercero salvaguarde nuestro dinero, lo cual se parece mucho a un banco. Si roban al «banco» o algún empleado del «banco» no es todo lo honesto que debiera, volvemos a tener los problemas que dieron origen a Bitcoin.

Una de las soluciones mas recomendables hoy en día usan un almacén en nuestro ordenador personal, pero a su vez guardan una copia del monedero en algún servicio en la nube, tipo Dropbox.

La copia local se desbloquea conociendo una contraseña mas o menos compleja (a nuestra elección) que es la que usamos en el día a día.

La copia en la nube está protegida por una larga lista de palabras clave que el monedero generó de forma aleatoria al ser instalado y que debemos apuntar en algún lugar seguro y mantener de forma separada a la contraseña local. El mecanismo de desbloqueo, mas tedioso, solo se emplea en el caso de que debamos recuperar el monedero desde la copia en la nube (en el mismo dispositivo o en otro diferente).

Los datos están encriptados usando nuestra contraseña, por lo que mientras que dicha contraseña no sea revelada o adivinada, nuestros bitcoins están seguros. Incluso si la copia en la nube de nuestro monedero se ve comprometida, será necesaria esta contraseña para acceder a las claves secretas.

Existen muchos monederos que funcionan con Bitcoin. Puedes descargar aquí los mas populares y ver las bondades y debilidades de cada uno de ellos. Este programa, además de almacenar a buen recaudo tus claves, también se usa para lanzar transacciones sobre la red Bitcoin y para mantener el saldo de tus fondos en la red en base a tus direcciones y a las transacciones ejecutadas sobre ellas.

Las transacciones

Las transacciones representan los flujos de bitcoins entre los usuarios de la red. La base de datos de Bitcoin, que como hemos dicho se implementa con una cadena de bloques, registra todas las transacciones que se han ejecutado y que se han dado por válidas por la red y esta información es pública para cualquier usuario, tenga o no tenga fondos en la red.

Hay dos tipos de transacciones:

  • Transacciones de creación de fondos. Son las que añaden nuevos bitcoins en la red. Las veremos mas adelante.
  • Transacciones de transferencia de bitcoins. Son las mas habituales y las que debemos comprender en primer lugar.

Imaginemos que ciudadano A quiere transferir una cantidad X de bitcoins a Ciudadano B, del que Ciudadano A no conoce necesariamente su identidad, pero le ha sido facilitada una dirección de depósito de los fondos.

La transacción (de forma simplificada) constaría de:

  • Una cabecera con la fecha, hora y detalles similares.
  • Información de entrada (origen) de la transacción:
    • Referencia a una transacción anterior según la cual Ciudadano A puede demostrar su tenencia de bitcoins por un importe superior o igual a los X BTC que desea transferir.
    • La cantidad de bitcoins obtenidos en la transacción de referencia.
    • La dirección asociada a estos bitcoins que otorga su propiedad a Ciudadano A.
  • Información de salida (destino) de la transacción
    • Dirección de Ciudadano B en la que se depositarán los bitcoins.
    • Cantidad de bitcoins a transferir.

Una transacción real es algo mas compleja y tanto en la entrada como en la salida de la misma pueden aparecer varias direcciones y cantidades de bitcoins asociadas a las mismas. Debe cumplirse que el número de bitcoins total de entrada debe ser siempre mayor o igual al número total de bitcoins de salida.

flujos de entrada y salida en transacción bitcoin
Estructura de una transacción Bitcoin. Flujos de entrada y salida.

El exceso de bitcoins de entrada que no tienen destino suele ser una cantidad pequeña que se considera la comisión (fee) de la transacción. Es una recompensa que damos a aquel que sea capaz de añadir nuestra transacción a la cadena de bloques y por tanto cuanto mas alta sea mas pronto será añadida.

transaccion real bitcoin
Un ejemplo de transacción real en Bitcoin con una entrada y dos salidas.

Las transacciones tienen que cuadrar en el sentido de que todos los bitcoins recibidos en la transacción anterior deben tener algún destino en la transacción actual. Así que si no pensamos transferir todos los bitcoins disponibles, en la parte de destino de la transacción aparecerá de nuevo nuestra propia dirección, recibiendo la parte no gastada.

En la transacción de ejemplo de la figura se puede ver que de los 4,35874156 BTC originales, se transfieren 0,00087984 BTC a otra dirección (unos 5€), ofreciendo una comisión de 0,00003299 BTC (unos 0,20€), y el remanente de 4,35782873 BTC se destina de nuevo a la dirección de origen.

Bitcoin es una criptomoneda, por que como se ha comentado mas arriba, basa sus mecanismos de seguridad en métodos criptográficos. Cada propietario transfiere la propiedad al siguiente a través de un mecanismo de firma digital. En concreto Ciudadano A transfiere los bitcoins a Ciudadano B firmando digitalmente un documento que contiene:

  • La referencia de la transacción previa (su hash).
  • La clave pública (dirección) de Ciudadano B

Y añadiendo esta firma digital a la transacción.

De esta forma, cualquiera en la red puede comprobar la veracidad de una transacción. Basta con que se consulte la transacción previa, se extraiga la clave pública de Ciudadano A y se verifique la firma de la transacción actual, para corroborar que solo Ciudadano A pudo haberla firmado y que el contenido de la transacción no ha podido ser alterado.

firma digital de transacciones en bitcoin
Mecanismo de securización de las transacciones a través de la firma digital.
Siguiendo el ejemplo, Ciudadano A sería Owner 1, Ciudadano B sería Owner 2 y la transacción actual sería la del centro del diagrama.

Una vez firmada, la transacción es enviada a la red Bitcoin a través de uno cualquiera de sus nodos. Este nodo hará una serie de validaciones, comprobando las firmas digitales de la transacción, validando la transacción previa y calculando si realmente Ciudadano A tiene fondos suficientes para hacer esta transferencia.

Si todo es afirmativo la transacción pasa a estado confirmado (por un nodo) y será enviada a los nodos vecinos que repetirán las mismas validaciones. Una vez que se han obtenido unas seis confirmaciones por seis nodos diferentes (hay consenso) la transacción se considera válida y lo único que falta es que sea añadida al siguiente bloque de la cadena de bloques.

Un vistazo mas detallado a la estructura de un bloque

Lo que pasa a continuación está muy relacionado con la estructura de un bloque dentro de la cadena. La estructura interna de un bloque es la siguiente:

Hash del bloque anterior (256 bits)
Hash del conjunto de transacciones del bloque (256 bits)
Objetivo de complejidad actual (256 bits)
Marca temporal de generación del bloque (timestamp)
Nonce (32 bits)
Transacción 1
Transacción 2



Transacción N
Número de bloque (#)
Hash del bloque actual (256 bits)

En Bitcoin, cada bloque es capaz de almacenar entre unas 1000 y unas 3000 transacciones. La información necesaria por cada transacción es variable, pero el bloque tiene un tamaño máximo de 1 MB.

Los nodos de la red compiten para ser los que añadan el siguiente bloque a la cadena. ¿Por qué? Pues por que el que lo consiga obtiene una recompensa en forma de bitcoins. ¿Y cuál es el nodo ganador? Pues aquel que consiga resolver antes un problema criptográfico.

El problema está pensado de forma que se pueda generar un nuevo bloque cada 10 minutos como media. Como la capacidad total de computación de la red Bitcoin varia a lo largo del tiempo, existe un parámetro de complejidad del problema que se va ajustando al alza o a la baja cada 2016 bloques de forma que se converja a la media de los 10 minutos por bloque.

El problema consiste en que al aplicar la función de dispersión sobre el  bloque actual y calcular su hash, éste debe contener un número de ceros determinado a su izquierda.

El hash depende de los datos del documento sobre el que se calcula. En un bloque todos los datos son fijos con excepción del Nonce (no tiene traducción). El problema consiste en ir variando los valores de este campo de 32 bits de forma que el hash del bloque resultante cumpla el criterio de número de ceros a la izquierda.

Si te lo preguntas, no hay una forma directa de calcular qué valor del Nonce nos daría un hash determinado (la no reversivilidad es una de las propiedades que se piden a una buena función de dispersión).

Hay por tanto que explorar los cuatro mil millones de combinaciones hasta dar con uno que cumpla el criterio de complejidad actual. Cuantos mas ceros a la izquierda del hash se exijan, mas complejo será dar con un valor del Nonce válido.

El nodo que consigue resolver el problema, lo añade a la cadena y lo propaga por la red. El resto de los nodos validan el bloque y lo añaden a su copia local.

Puede ocurrir que dos nodos de forma independiente generen dos nuevos bloques válidos. Los bloques serán por lo general distintos (diferente conjunto de transacciones) y se habrá generado en un intervalo de unos pocos segundos. ¿Cuál persistirá? Bitcoin da prioridad a la cadena mas larga, así que si B y B’ son generados como dos ramas de la cadena de bloques, debemos esperar a que se genere el siguiente bloque. Si se genera a partir de B, ésta sera la cadena mas larga y B’ será inválido, aunque también puede ocurrir lo contrario.

Las transacciones del bloque invalidado no se pierden. Vuelven a pasar a la cola de transacciones pendientes de ser incluidas en un próximo bloque.

bitcoin owner

Y te preguntarás ¿por qué tomarse todo este trabajo? ¿para qué se realizan todos estos cálculos? ¿por qué no añadir el nuevo bloque sin mas? El motivo es hacer computacionalmente imposible que un nodo deshonesto altere el contenido de la historia de las transacciones en la cadena de bloques y evitar de esa forma que un conjunto de bitcoins sean transferidos dos o mas veces (double-spend).

Los (mal llamados) mineros

A los nodos en la red de Bitcoin se les llama mineros. Un minero tiene las siguientes funciones:

  • Almacena una copia local de la cadena de bloques.
  • Recibe y valida los nuevos bloques de la cadena y los añade a su copia local.
  • Recibe y valida las nuevas transacciones.
  • Trata de crear nuevos bloques que incluyan las transacciones pendientes de ser añadidas a la cadena.

Cualquiera puede añadir un nuevo nodo a la red Bitcoin, pero mantener encendido un nodo en la red tiene un coste. El beneficio que la red ofrece, se obtiene cuando un nodo consigue añadir un nuevo bloque a la cadena.

Si resuelves el problema antes que nadie. Si añades el nuevo bloque y este persiste (no se crea por otro lado una cadena de bloques mas larga), la red te asigna una recompensa que consiste en:

  • Un número de bitcoins fijos por crear el bloque. Actualmente se pagan 12,5 bitcoins por cada nuevo bloque.
  • Todas las comisiones de todas las transacciones incluidas en el nuevo bloque se pagan al minero (por eso se trata de añadir antes las transacciones que pagan mas comisión).

La primera parte del premio supone un mecanismo de creación de nuevos bitcoins disponibles en la red. Los bitcoins que se pagan al minero que consigue un nuevo bloque no vienen de un propietario anterior. Se crean con el bloque. Este es el segundo tipo de transacciones en la red Bitcoin.

El primer bloque que se creó (bloque de génesis) tuvo asociada una recompensa de 50 bitcoins. Esta recompensa por bloque se mantiene por unos pocos años y luego se reduce a la mitad. Desde su creación en enero de 2009, se ha pasado por 50, 25 y los actuales 12,5 bitcoins.

No hay un número máximo de bloques en la red, pero si que hay un número máximo de bitcoins que se pueden llegar a generar. Este número es de 21 millones y la reducción sucesiva del número de nuevos bitcoin por bloque hará que el último bitcoin se genere allá por el año 2140.

Al cambio actual, la recompensa por un nuevo bloque supone ganar mas de 70.000€ (¡¡y se genera uno cada 10 minutos!!). Es de entender que la competición por ser el que genere el próximo es bastante dura. Calcular un nuevo bloque tiene un coste computacional muy alto, y hay miles de mineros compitiendo por generar el próximo bloque válido.

mineria de bitcoins
Dispositivos especiales para la minería de bitcoins

Ambos factores (complejidad y competencia por ser el primero) hacen inviable que un nodo deshonesto trate de crear una versión alternativa de la cadena, alterando la visión consensuada de la verdad que representa la cadena de bloques. No hay tiempo material para que un nodo trate de recomponer una cadena mas larga a partir de un bloque alterado. Y si la cadena que el nodo deshonesto trata de propagar no es la mas larga, el resto de los nodos de la red la desecharán.

De la misma forma, si un usuario con N bitcoins lanza simultáneamente dos transacciones tratando de transferir dos veces esos N bitcoins, pueden plantearse dos escenarios:

  • Que las dos transacciones se traten de incluir en el mismo bloque gracias a un minero deshonesto. Asumiendo que ese minero fuera capaz de crear el siguiente bloque (que es mucho asumir), el resto de los nodos de la red verían que ese bloque es inválido, lo desecharían y trabajarían sobre la versión anterior de la cadena.
  • Que cada transacción se mande a un nodo vecino diferente. Los dos darían inicialmente su transacción por valida y tratarían de propagarla por la red. Una cualquiera de las dos versiones acabaría siendo incluida en un bloque. Cuando esto ocurra, el nodo que tenga el nuevo bloque y la otra transacción descubrirá la trampa y invalidará la segunda transacción.

Por este tipo de controles y verificaciones, el hecho de que nuestra transacción haya sido añadida a un nuevo bloque no la confirma definitivamente. ¿Por qué? Pues por que puede acontecer que la generación de la cadena en la que aparece este bloque no termine siendo la versión definitiva de la cadena de bloques.

Se considera que cuando ya se han añadido 6 bloques mas al que contiene nuestra transacción, podemos dar la transacción por confirmada de forma definitiva. Esto ocurre como una hora después de haber lanzado la transacción a la red. Bastante mas rápido que los mecanismos interbancarios actuales.

El término de minero puede llevar a engaños. Un minero normalmente se encarga de extraer algo que ya existe (una materia prima como el oro o el coltán) y ponerlo en circulación en el mercado. Posiblemente aplicando algún tipo de transformación para purificarlo.

Un minero de bitcoins no extrae nada. Crea bloques y creando bloques pone nuevos bitcoins en circulación. Los bitcoins no están en un sitio del que puedan ser descubiertos y extraídos. Son creados por los mal llamados mineros.

Si estas pensado en instalar tu propia mina de bitcoins, que sepas que a día de hoy el número de recursos que se destinan a la minería de bitcoins es totalmente apabullante. Se estima que la minería de bitcoins consume actualmente un 1% del total de energía eléctrica generada. Es una verdadera barbaridad. Y el consumo crece de forma imparable.

En sus orígenes un nodo individual tenía suficiente capacidad de cálculo como para poder generar nuevos bloques. Con la escalada del precio del bitcoin, y con el consiguiente crecimiento de la red de mineros, esto es actualmente inviable. Los nodos se juntan en pools que trabajan de forma colaborativa para añadir nuevos bloques. Los beneficios obtenidos por el pool se reparten entre sus miembros en función de los recursos computacionales que cada uno ha ofrecido.

También existen anillos en los que un único minero controla un conjunto grande de recursos de computación que hace trabajar de forma colaborativa en las tareas de minado.

Los intercambiadores

Para cerrar el círculo de los procesos que rodean a una criptomoneda, nos falta un actor mas: el intercambiador (exchange).

Si no eres Satoshi Nakamoto, ni un minero, pero posees bitcoins, alguien te los ha tenido que transferir anteriormente. Una posibilidad es que los hayas intercambiado por un bien que tu posees o un servicio que tu prestas. Por ejemplo, por que fabricas o arreglas bicicletas.

La otra posibilidad es que hayas comprado bitcoins pagándolos con otra moneda. Lo que no deja de ser otro intercambio de unos bienes por otros.

Los intercambiadores realizan esa labor. Poseen bitcoins y los ofrecen por un número determinado de unidades de tu moneda. De la misma forma que se hace cualquier otro intercambio de divisas, y de la misma forma que funcionan los mercados de materias primas. Eso si, nunca te darán los bitcoins en una bolsa. Las operaciones de intercambio se hacen a través de tu monedero, usando una dirección generada por ti.

Cada intercambiador publica unas tasas de cambio de pongamos Euros a Bitcoins, y además cobra una comisión por la operación (a veces incluida en la propia tasa de cambio).

Nosotros somos libres de comprar o vender nuestros bitcoins a través de cualquier intercambiador. Normalmente los elegimos por la confianza que nos merecen y/o por las comisiones que nos cobran.

bitcoin exchanges que operan en europa
Algunos exchanges que operan en Europa. Fuente: https://bitcoin.org/en/exchanges#europe

Las tasas de cambio varían de exchange a exchange y dentro de un mismo exchange, de un minuto al siguiente. En el momento de escribir este artículo, la tasa de cambio entre el Euro y el bitcoin es de 5.856,77 € (EUR) por bitcoin (BTC).

Las cantidades en bitcoins se expresan con una precisión de 8 decimales (por el diseño de la base de datos). Por tanto la cantidad mas pequeña que se puede manejar es 0,00000001 BTC que es lo que se llama un satoshi. Un satoshi es una cantidad muy pequeña (0,000059€). Una comisión de 3299 satoshis, que es la del ejemplo de la transacción, sigue siendo muy poco dinero (0,19€).

Por comodidad y por que sea comparable a la mayoría de las divisas, los monederos suelen trabajar en mili-bitcoins. Un mBTC equivale en estos instantes a 5,86€ o $6,99, que son cantidades mucho mas manejables para los humanos (lo que puede costar un menú de hamburguesa).

La tasa de cambio del bitcoin ha tenido una evolución histórica brutal. Sobre todo en los últimos dos años, a medida que esta moneda ha ido ganando popularidad.

evolución cambio BTC USD
Evolución de la tasa de cambio entre el bitcoin y el dolar, desde la creación del bitcoin.

El primer pago que se hizo en bitcoins fue de 10.000 BTC por un par de pizzas. A el cambio actual, cada pizza costó ¡¡29 millones de euros!! Posiblemente hayan sido las pizzas mas caras de la historia.