¿Qué #{$%@#& es el Bitcoin y cómo &#%[`¡@ funciona?

Leonardo
Coder's Pen
Published in
12 min readFeb 27, 2018

Vivimos en una época en la que el internet y la tecnología digital nos dan el poder de comunicarnos con personas en cualquier lado del mundo. Nos comunicamos en tiempo real con personas en todas las latitudes del planeta, acortando las distancias a través de celulares y PCs que tienen miles de veces más capacidad de procesamiento y almacenamiento que la que tenían los primeros computadores personales, costando una fracción del precio y decenas de veces más pequeños.

Durante las tres décadas pasadas hemos vivido una transformación digital impresionante pero hay un sector que no se ha mantenido a la par de esta evolución: el sector financiero.

Usando el sistema financiero tradicional no podemos enviar dinero con la misma facilidad con la que nos comunicamos por internet. Incluso las compras con tarjeta de crédito, relativamente instantáneas, están restringidas a un pequeño conjunto del total de la población mundial.

El Bitcoin surge como respuesta a todas las limitaciones del sistema tradicional.

Me crearé mi propia moneda, con juegos de azar y mujerzuelas

Entonces ¿Qué es el Bitcoin?

Bitcoin es la primera implementación funcional de una criptomoneda y se ha convertido en el standard de referencia para la mayoría de las criptomonedas existentes.

Cuando hablamos de Bitcoin, en mayúscula, nos referimos a una red de transacciones financieras que nos permite enviar dinero entre personas en cualquier lugar del mundo, las 24 horas del día, los 7 días de la semana, los 365 días del año, sin necesidad de un ente regulador ni de una autoridad central.

Cuando hablamos de bitcoin, en minúscula, hacemos referencia a la unidad contable usada por la red Bitcoin para registrar los montos de cada transacción. Los bitcoins son las fichas, tokens o monedas utilizados por la red para enviar y recibir dinero.

La historia de Bitcoin empieza en 2008 cuando Satoshi Nakamoto publica el whitepaper en que propone la primera versión del protocolo Bitcoin, la base del protocolo sobre el que opera actualmente la red. Cerca de un año despues, el 3 de enero del 2009, empezó a funcionar el primer nodo de Bitcoin que creó el famoso bloque génsesis con una recompensa de minado de 50 bitcoins adjudicados a Satoshi Nakamoto.

La red Bitcoin tiene 9 años en funcionamiento y el whitepaper fue publicado hace aproximadamente 10 años, sin embargo, aún no se sabe quien es Satoshi Nakamoto. Muchos especulan que en realidad no es una sola persona sino un grupo de colaboradores anónimos, probablemente algún colectivo de cypherpunks cuyo interés en la criptografía, en el anonimato y en la colaboración humana sin intervención de gobiernos o bancos los llevó a crear el Bitcoin.

En total sólo puede existir un máximo de 21 millones de bitcoins y éstos pueden ser fraccionados en unidades muy pequeñas, un usuario puede enviar transacciones de centésimas de bitcoins, milésimas de bitcoins y fracciones más pequeñas hasta llegar a la unidad mínima conocida como el satoshi, una cienmillonésima de bitcoin (1x10e-8 BTC).

El tope máximo de 21 millones y la capacidad de fraccionamiento en cantidades muy pequeñas marca una de las diferencias más radicales con el sistema monetario actual, un sistema que no permite el fraccionamiento arbitrario de las unidades de dinero, más allá de céntimos o centavos, y que está basado en la emisión de deuda prácticamente ilimitada como respaldo de una base monetaria en constante expansión.

¿Y cómo puede funcionar una red de transacciones sin intermediarios ni control centralizado?

El protocolo Bitcoin orquesta el trabajo de varios elementos para que esta red de transacciones pueda funcionar sin control central.

El Bitcoin es un sistema que no requiere de la confianza entre nodos ni usuarios, sólo se necesita confianza en un protocolo que hace funcionar en conjunto a los siguientes elementos.

El blockchain, un historial de transacciones compartido

El blockchain, tan mencionado actualmente, es una tecnología bastante sencilla alrededor de la cual hay mucho misticismo y bastante venta de humo.

Un blockchain es simplemente un historial de transacciones que registra todos los movimientos de dinero que se producen en la red Bitcoin.

El blockchain de Bitcoin es el libro mayor de transacciones donde se almacenan los créditos, débitos y el flujo del dinero usando un sistema de contabilidad de triple entrada. Es una estructura de datos en cadena, con características similares a las de una lista enlazada: cada bloque de la cadena contiene datos de transacciones y una referencia al bloque anterior, similar a los punteros en una lista enlazada.

El blockchain está replicado a lo largo de la red. Cada uno de los nodos posee una copia con el último estado del blockchain conocido por ese nodo.

Blockchain, detalle de un bloque y de una transacción, simplificados.

El minado de bloques y la prueba de trabajo

Para generar nuevos bitcoins los nodos de la red participan en el proceso de minado. Este proceso empieza cuando un nodo toma un grupo de transacciones, valida que son correctas y las empaqueta dentro de un bloque.

La validación de transacciones se hace en dos pasos: asegurarse de que el emisor tenga suficiente crédito para enviar los fondos y verificar una firma digital criptográfica que garantiza que el emisor de la transacción es dueño de los bitcoins que está enviando.

Despues de que un nodo empaqueta un lote de transacciones comienza la parte más intensa del proceso de minado. El nodo que construye un bloque debe calcular un hash SHA256 pasándole como argumento de entrada a la función de hashing una cadena producto de unir metadatos ubicados en el encabezado del bloque con un número arbitrario.

El objetivo de minar un bloque es obtener un hash con cierta cantidad de ceros al inicio. El nodo que crea el bloque empieza un proceso de cálculo de hashes y con cada intento fallido el nodo cambia el número arbitrario, usualmente increméntandolo en 1, si el nodo agota todo el rango de enteros disponibles sin encontrar un hash correcto el nodo cambiará el identificador de la transacción coinbase para invocar la función SHA256 con una entrada diferente hasta encontrar un hash satisfactorio.

La llamada transacción coinbase es la transacción donde el nodo se adjudica a sí mismo la recompensa en bitcoins por minar este nuevo bloque. Cada nodo es responsable de crear el identificador de esta transacción por eso los nodos de minado pueden usarla como una fuente adicional de variabilidad al calular los hashes de sus bloques sin afectar al resto de transacciones de la red.

El primer nodo en obtener el hash correcto para su bloque lo agrega al blockchain y propaga hacia la red este nuevo estado del blockchain. A ésto se le llama descubrir un bloque.

La cantidad de ceros con la que debe iniciar el hash define la dificultad probabilística de descubrir un nuevo bloque. Esta dificultad de ajusta con cada 2016 bloques nuevos para mantener la tasa de creación de nuevos bloques a un ritmo constante de aproximadamente 1 bloque nuevo cada 10 minutos.

Obtener un hash que cumpla con el target definido por la red es un proceso muy costoso computacional y energéticamente, conocido formalmente como mecanismo de la prueba de trabajo. Este mecanismo garantiza que para minar un bloque se tiene que invertir una cantidad significativa de tiempo de cómputo y energía eléctrica. Mientras calcular el hash correcto de un nuevo es sumamente costoso, validarlo es un cálculo sencillo que consiste en verificar que el hash identificador de un bloque sea un número menor que el nivel de dificultad de la red.

La prueba de trabajo garantiza que no se pueden falsificar transacciones porque modificar el historial del blockchain es un proceso muy caro. Mientras haya al menos 51% de nodos honestos será prácticamente imposible que un atacante agregue transacciones falsas al blockchain, ya que cualquier cambio en una sola transacción de un bloque requiere recalcular el hash de ese bloque y de todos los bloques que sean sus hijos, a medida que un bloque acumula nuevos descendientes en la cadena se hace menos y menos probable falsificarlo en el futuro.

La prueba de trabajo es el mecanismo antifraude del protocolo Bitcoin.

Consenso descentralizado en un sistema distribuido

En todos los sistemas distribuidos hay demoras en la sincronización de datos producidas por los límites en la velocidad de transferencia de información. Siempre existirá la latencia en las redes pero los datos en un sistema distribuido eventualmente llegan a un estado de consistencia.

Bitcoin tiene una gran ventaja en relación a otras arquitecturas distribuidas, los bloques minados por un nodo y verificados por otros nodos no pueden ser modificados, ésto nos da una garantía fuerte de consistencia para los bloques. Luego de que un bloque ha sido validado por una cantidad suficiente de nodos podemos estar seguros de que éste es consistente con el historial, es válido y está replicado correctamente a lo largo de la red. Con bloques más nuevos la historia es diferente, siempre existe la posibilidad de bifurcaciones e inconsistencias en el historial del blockchain. Estas divergencias se corrigen a través de un algoritmo de consistencia que usa la prueba de trabajo como mecanismo de resolución de conflictos.

Veamos un ejemplo que empieza con un blockchain sin conflictos y en el que posteriormente se produce una bifurcación, así entenderemos el algoritmo de consenso que garantiza la consistencia de datos a lo largo de toda la red.

Cuando un nodo descubre un nuevo bloque lo propaga a la red, con el número de bloque N.

Historial normal del blockchain, sin bifurcaciones

Si dos nodos descubren el mismo número de bloque aproximadamente al mismo tiempo y lo propagaran a la red se produce una bifurcación o fork.

Fork en bloque N del blockchain

Esta situación de inconstencia ocasionará conflictos si no se resuelve, tendremos múltiples estados del Blockchain que no pueden convivir juntos. Los nodos recibirán una u otra versión de la cadena, dependiendo de sus vecinos, y continuarán minando sobre la versión que conocen.

Historial bifurcado del blockchain

Eventualmente ambas versiones del blockchain se propagarán a lo largo de toda la red y cada nodo tomará la decisión de cual cadena utilizar para continuar trabajando en la versión correcta.

Para tomar esta decisión los nodos eligen siempre la cadena con la mayor cantidad de trabajo realizado, es decir, tomarán la cadena más larga.

Bifurcación resuelta, se descartó la versión N’ y el blockchain vuelve a estar en un estado consistente

El algoritmo de consenso del Bitcoin evita uno de los problemas más graves que puede tener un sistema financiero descentralizado, el problema del doble gasto por parte de usuarios que aprovechen las demoras en la sincronización del estado del blockchain para enviar múltiples transacciones usando los mimsos tokens.

Al usar Bitcoin para recibir pagos debemos asegurarnos de que una cantidad mínima de bloques nuevos se hayan agregado sobre el bloque en el que está la transacción que nos interesa. Como vimos anteriormente, falsificar más de un bloque es un proceso computacionalmente costoso y que se hace más difícil a medida que hay nuevos bloques, mientras más bloques nuevos esperemos antes de tomar como válida la transacción, menor será la probabilidad de que reescriban el blockchain, eliminando del historial el pago que acabamos de recibir.

Para saber cuantos bloques nuevos se han creado despues de que nuestra transacción se escribió en el blockchain podemos usar un explorador de bloques online como blockchain.info o programar procesos automatizados que hagan el trabajo de exploración de bloques por nosotros.

Envío de transacciones, criptografía asimétrica ECDSA, firmas criptográficas

Cuando un usuario quiere recibir un pago en Bitcoin usa un software de billetera y genera una dirección en donde recibirá los fondos. Esta dirección será la dirección de destino en una transacción que el emisor de los fondos propague a la red.

Bitcoin usa el algoritmo de firmado con criptografía de curva elíptica (ECDSA) para asegurar que sólo el dueño de una dirección pueda usar los fondos recibidos por dicha dirección.

Las billeteras Bitcoin crean direcciones que tienen dos componentes, un par de claves privada y pública producidas con el algoritmo ECDSA y la dirección pública donde se reciben las transacciones que se crea aplicando un par de funciones de hash criptoráficos a la clave pública.

Algo importante a tener en cuenta es que si respaldamos adecuadamente nuestras claves privadas tendremos acceso a nuestros bitcoins desde cualquier billetera porque nuestros fondos no se encuentran en las billeteras, nuestro dinero se encuentra registrado en el blockchain, que es público. Lo que hace una billetera es almacenar de forma segura nuestras claves privadas, mapeadas a la correspondiente clave pública y dirección, simplificar la consulta de saldos a favor y manejar el envío de transacciones.

El siguiente gráfico muestra el proceso a través del cual una billetera genera nuevas direcciones en donde recibir transacciones.

Proceso de generación de una dirección Bitcoin para recibir pagos

Existen billeteras que permiten respaldar nuestras claves privadas en forma de archivos digitales o incluso en respaldos impresos en físico; y también están las billeteras determinísticas que usan una frase semilla para generar todas nuestras claves privadas. Las billeteras determinísticas pueden ser restauradas en cualquier dispopsitivo ingresando la frase semilla que esuna frase mnemotécnica en inglés, mucho más sencilla de recordar que las claves privadas en formato hexadecimal.

Luego de generar una dirección y recibir dinero la transacción queda registrada en el blockchain el usuario que la recibió puede utilizar los fondos creando nuevas transacciones y firmándolas con su clave privada ECDSA. La firma de una transacción se construye en dos pasos, primero se calcula un hash criptográfico a partir de los datos de la transacción (Dirección del receptor, cantidad, etc..); este hash de la transacción, junto a la clave privada del emisor, se usan como parámetros de entrada del algoritmo ECSDA para crear la firma digital de la transacción.

Proceso simplificado de creación, firma y propagación de una transacción, desde una billetera Bitcoin

Para los nodos de la red es muy fácil validar que la firma de la transacción es auténtica usando la clave pública de esa transacción. A través de la criptografía asimétrica se evita la suplantación de identidad, el robo de bitcoins y el fraude, sin necesidad de que los usuarios revelen sus claves privadas.

Cuando un nodo recibe una nueva transacción valida que esta sea correcta, y si lo es la agrega al mempool, un almacén temporal en memoria compartida donde viven todas las transacciones que están esperando a ser incluídas en un nuevo bloque.

Validación de una transacción nueva, que será agregada al mempool

Los cuatro elementos mencionados: el blockchain replicado en cada nodo, el minado para la prueba de trabajo, el algoritmo de consenso basado en la prueba de trabajo y la firma de transacciones a través de la criptografía asimétrica ECDSA operan en conjunto para garantizar el correcto funcionamiento de la red Bitcoin sin necesidad de intermediarios y sin tener que confiar en ninguno de los actores de la red, solamente en el protocolo y en el software.

Gracias a esta orquestación de componentes tenemos una red con alta resiliencia, con una disponibilidad 24/7/365, resistente a fraudes y robos, que trasciende cualquier tipo de fronteras, que persiste en el tiempo mientras exista al menos un nodo con una copia actualizada del blockchain y que se mantiene funcionando con cualquier cantidad de nodos conectados, autoajustando la dificultad del minado para mantener una velocidad de operación constante.

Las criptomonedas como el Bitcoin nos permiten manejar nuestras finanzas de forma similar a como operamos en internet, acortando las restricciones y las distancias entre personas y organizaciones alrededor del mundo.

Aclaratoria: Muchos de los procesos, estructuras y diagramas de este artículo han sido simplificados para hacer más fácil su comprensión, en artículos posteriores daré detalles de exactos de estos componentes, explicando de forma más granular el funcionamiento del protocolo Bitcoin.

--

--