¿Cómo funciona Bitcoin?

· 10 min read

Bitcoin es un concepto de moneda digital que el legendario y enigmático Satoshi Nakamoto planteó en 2009, que utiliza la tecnología blockchain como infraestructura y funciona de forma descentralizada, de persona a persona. El Whitepaper que Nakamoto escribió para explicar este concepto es lectura obligada para cualquiera que quiera entender bitcoin y las criptomonedas en general. No solo explica bitcoin como idea, sino también cómo puede funcionar un sistema con tolerancia a fallos bizantinos en un entorno descentralizado.

Ante todo, quien se interese por Bitcoin debe saber que el factor más importante para que el concepto de bitcoin cobrara vida real es la tecnología blockchain, y entender cómo funciona esa tecnología.

¿Qué es la blockchain?

La blockchain es una cadena de bloques, cada uno de los cuales contiene datos, y no está supervisada ni gestionada por ninguna autoridad central. Estas cadenas de información están protegidas criptográficamente y no se pueden silenciar gracias a su estructura descentralizada. En esencia, la blockchain utiliza dos estructuras de datos: punteros y listas enlazadas.

Punteros

Los punteros son variables que indican dónde se encuentra otra variable. Normalmente, las variables en programación contienen datos. (En el ejemplo int a = 10, la variable entera a tiene el valor 10.) Los punteros, en cambio, no guardan un valor como dato, sino que señalan la dirección de la variable que contiene ese dato.

Listas enlazadas

Las listas enlazadas son una de las unidades más importantes de las estructuras de datos y, a grandes rasgos, tienen este aspecto.

Una secuencia de bloques, cada uno con datos concretos y enlazado al siguiente mediante un puntero. La variable puntero contiene la dirección del nodo siguiente y así proporciona la conexión. Como vimos en el nodo final, el último puntero no contiene ningún dato.

Lo importante aquí es que cada puntero contiene la dirección del bloque siguiente. Entonces, ¿dónde está el puntero al primer bloque? El primer bloque se llama bloque génesis y su puntero está dentro del propio sistema.

Un puntero hash es un puntero que contiene el hash del bloque anterior.

El hash es un proceso que toma datos de cualquier longitud y, mediante una función determinada, produce un resultado siempre de la misma longitud, sea cual sea el contenido de los datos. En el caso de Bitcoin, la operación de transferencia se toma como dato y se pasa por el algoritmo SHA-256 para producir un resultado de longitud fija. Con independencia de la longitud de los datos introducidos, el algoritmo SHA-256 siempre produce un resultado de 256 bits.

En su forma más simple, la blockchain es una lista enlazada como la que se muestra a continuación.

Una blockchain es una lista enlazada en la que cada bloque contiene un dato y un puntero hash que apunta al bloque que lo precede. Entonces, ¿qué es un puntero hash? Los punteros hash se parecen mucho a los punteros normales, pero además de la dirección del bloque anterior contienen también el resultado hash de los datos de ese bloque. Esa pequeña diferencia de diseño es lo que hace que la tecnología blockchain sea tan segura.

Supongamos por un momento que un atacante quiere atacar el bloque 3 y cambiar los datos que contiene. Por la naturaleza de la función hash, el cambio más mínimo en los datos se refleja en el resultado como una diferencia enorme. La menor modificación de los datos del bloque 3 cambiará el hash almacenado en el bloque 2, el cambio del bloque 2 afectará al hash del bloque 1 y, por tanto, habría que cambiar toda la cadena, algo imposible. Ese es el método que hace que las blockchains no se puedan silenciar.

¿Qué es la minería?

La minería es el proceso necesario para crear nuevos bitcoins. La minería de bitcoin funciona con el principio de Proof of Work (POW), o prueba de trabajo. Dicho de forma sencilla: resolver un problema debe ser muy difícil, pero una vez resuelto, la validez de tu solución debe poder demostrarse con mucha facilidad.

Antes de llegar al uso del POW como concepto en Bitcoin, intentemos entender por qué las criptomonedas necesitan un sistema así.

Antes de Bitcoin se crearon distintas monedas digitales, pero al montar una red descentralizada y de persona a persona en el entorno digital, el mayor obstáculo es el problema lógico llamado problema de los generales bizantinos. Como Nakamoto logró superarlo en bitcoin mediante el POW, bitcoin pudo empezar su vida y continúa con fuerza.

El problema de los generales bizantinos

Sigamos explicando el problema de los generales bizantinos, muy utilizado también en trabajos académicos. Los generales bizantinos que planean atacar la ciudad enemiga tienen dos problemas:

Los generales están muy lejos unos de otros, así que es imposible que una autoridad central dirija el asedio.

El enemigo también tiene un ejército fuerte, de modo que el ataque deben lanzarlo todos los generales al mismo tiempo para poder tener éxito.

Mientras los ejércitos sitiadores rodean la ciudad, cada uno transmite el mensaje con la orden desde el ejército de su derecha al ejército de su izquierda, y así se mantiene la comunicación. Pero el problema es que, cuando llega la orden de atacar el miércoles, puede que un ejército no esté preparado y devuelva un mensaje diciendo que no, que se ataque el viernes. O el soldado que lleva el mensaje puede ser capturado por el enemigo, o se puede alterar el contenido del mensaje que transporta. En un entorno tan inseguro, cualquier ataque fracasará si no se logra una coordinación total.

El mismo problema lógico se aplica a las redes blockchain, que son la infraestructura de criptomonedas como bitcoin. Son redes increíblemente grandes, y ¿cómo confiar en cada una de las personas que hay en ellas? Podemos querer enviarle a alguien 4 ether, pero ¿cómo confiar en que alguien malintencionado no convierta esa cantidad en 40 ether?

Satoshi Nakamoto consiguió superar este problema lógico introduciendo el protocolo de prueba de trabajo. Veamos cómo funciona:

Cuando el ejército sitiador quiere transmitir el mensaje "atacamos el lunes" al ejército de su izquierda, debe seguir estos pasos;

Primero, al mensaje original se le asigna un valor aleatorio y de un solo uso llamado "nonce". El nonce puede ser cualquier valor del sistema hexadecimal.

Después se pasa el texto del mensaje con el valor nonce asignado por la función hash y se obtiene un resultado. En el ataque imaginario que planteamos, supongamos que los comandantes acuerdan compartir entre ellos solo los resultados de la función hash cuyos primeros 5 dígitos sean ceros.

Si el resultado de la función hash da lo deseado, envían el mensaje al siguiente general. Si el resultado no coincide con lo buscado, hay que cambiar aleatoriamente el nonce asignado y repetir el proceso hasta obtener un resultado con cinco ceros iniciales. Este sistema requiere periodos de cálculo increíblemente largos y mucha potencia de cómputo.

Si el soldado que lleva el mensaje es capturado o se altera el contenido del mensaje, el resultado del hash variará enormemente por las características de la función hash. Al revisar el mensaje, los generales verán que los cinco primeros dígitos del hash no son ceros y cancelarán el ataque.

Ahora bien, aunque es muy poco probable, cualquier función hash puede producir resultados en colisión. En teoría, con A y B como dos entradas distintas, no debería existir probabilidad alguna de que H(A) = H(B), pero en la aplicación real ninguna función hash es completamente resistente a colisiones.

Entonces, dentro de esa baja probabilidad, ¿qué pasa si el soldado que lleva el mensaje es capturado, el mensaje se altera y el hash sale exactamente como los generales esperan? Sería un proceso lento, claro, pero no imposible. Frente a eso, los generales usan su ventaja numérica.

El problema se puede superar si tres generales envían mensajes a la izquierda al mismo tiempo, en lugar de que un único general pase el mensaje por turnos de derecha a izquierda. Si los generales crean sus propios mensajes y con ellos forman un mensaje acumulado, lo pasan por la función hash, asignan un nonce al resultado y lo vuelven a introducir en la función hash, esta vez los seis primeros dígitos del resultado deben ser ceros.

En esa fase, encontrar el nonce de ese mensaje y cambiar su contenido supone una pérdida de tiempo enorme.

En cambio, la tarea de los generales que reciben el mensaje es fácil: basta con añadir al resultado hash el nonce que les han dado y comparar los resultados. Este paso es un proceso muy rápido y sencillo. Esta idea es el mecanismo de funcionamiento del principio de prueba de trabajo.

Encontrar el valor nonce que da el hash adecuado exige una potencia de cálculo y un tiempo enormes

En cambio, revisar los resultados y determinar si hay mala intención lleva muy poco tiempo.

Así es como los mineros aplican el protocolo de prueba de trabajo en la minería de Bitcoin. Usan su potencia de cálculo para resolver el problema criptográfico que tienen delante y crear el bloque siguiente. En la blockchain de Bitcoin se crea un bloque cada 10 minutos.

¿Cómo se realizan las transferencias en la red Bitcoin?

Digamos que John quiere enviarle unos bitcoins a Dave. ¿Cómo se produce esa transferencia? Las transferencias de bitcoin funcionan de forma muy distinta a las de dinero fiat. Si John quisiera darle 10 USD a Dave, sacaría físicamente el billete de 10 USD de su cartera, se lo daría a Dave y la transferencia estaría completada. Con bitcoin es distinto: no es algo que poseamos físicamente. Lo que tenemos es la prueba de que tenemos bitcoin.

Hay dos cosas que debemos saber y tener en cuenta;

Los mineros confirman y aseguran las operaciones de transferencia con los datos que colocan en el bloque que crean. Además, cobran una comisión por ese servicio.

Con las monedas fiat, no conocemos ni seguimos la historia de ningún billete que tengamos delante. No hay una forma práctica de hacerlo. En bitcoin, en cambio, cada operación de transferencia queda registrada en la red.

A la luz de esto, veamos la transferencia de bitcoin entre John y Dave. Esta transferencia tiene dos partes: entrada y salida (input-output).

Para que John pueda realizarla, debe tener bitcoin procedente de transferencias anteriores. Como hemos dicho, todas las transferencias quedan registradas en la red bitcoin.

John necesita reunir los bitcoins de las transferencias que recibió previamente con los nombres TR(0), TR(1) y TR(2), crear una nueva transferencia llamada TR(INPUT) y enviársela a Dave. Aquí TR(INPUT) se convierte en el dato de entrada de la nueva transferencia.

Así es, a grandes rasgos, una transferencia de bitcoin vista desde la entrada.

Los datos de salida contendrán simplemente la cantidad de bitcoins que Dave debe tener tras la nueva transferencia y el cambio restante, que vuelve a John como valor TR(INPUT) en su siguiente transferencia.

Si dejamos fuera la parte del cambio, este proceso incluye un único resultado de salida, pero también son posibles las transferencias con varios resultados de salida. Esta descripción muestra de forma sencilla cómo se produce una transferencia en la red bitcoin. Sin embargo, para que todo salga bien deben cumplirse ciertas condiciones.

Condiciones que deben cumplir las transferencias:

TR(INPUT) > TR(OUTPUT). La transferencia de entrada siempre debe ser mayor que la de salida. En cada transferencia, la diferencia entre la entrada y la salida (salida + cambio) se paga a los mineros como comisión. Es decir: Comisión de minería = TR(INPUT) - (TR(OUTPUT) + CAMBIO)

En el lado de la entrada debe cumplirse TR(0)+TR(1)+TR(2)=TR(INPUT). Dicho de otro modo, John debe tener bitcoin suficiente para enviárselo a Dave. Si no tiene bitcoin suficiente para procesar la operación, los mineros rechazan la transferencia.

Ahora Dave tiene que demostrar que es el propietario de los bitcoins que le han enviado. John ha cifrado su transferencia de bitcoin con la clave pública de Dave. Dave solo puede abrir ese cifrado con su clave privada.

Por su parte, John tiene que demostrar que tiene bitcoin suficiente para enviárselo a Dave. Lo hace firmando con su propia clave privada la transferencia que quiere ejecutar. Cualquiera puede abrirla con la clave pública de John y verificar que realmente dispone de la cantidad necesaria de bitcoins. Esa prueba se denomina datos de firma.

Los datos de entrada (incluidos los datos de firma) y los datos de salida se suman y se pasan por el algoritmo hash SHA-256. La salida de ese algoritmo es lo que se llama la transferencia.

Hay algo que conviene recordar: para que se produzca una transferencia de bitcoin, el minero que minó el bloque debe introducir físicamente esa transferencia en el bloque. El minero que minó el bloque puede recibir la comisión de todas las transferencias que incluyó en él. Como los volúmenes de transferencia aumentan con el tiempo, las transferencias tienen que esperar a que aparezca un bloque nuevo porque los bloques se llenan por completo. De hecho, quienes no quieren esperar pagan comisiones de minería más altas, con lo que su transferencia destaca y resulta más atractiva para los mineros.

De ahí surgió el principio replace-by-fee. Funciona así de simple: aunque John envíe 5 BTC a Dave, la operación nunca se incluye en un bloque y queda pendiente porque la comisión de minería se dejó baja. No hay forma de deshacer ni cancelar esta transacción, ya que el bitcoin gastado no se puede recuperar. Sin embargo, si John hace una transferencia a la misma dirección por la misma cantidad de BTC y fija una comisión de minería más alta, la transferencia antigua se considera inválida y la nueva pasa a esperar su procesamiento.

El futuro de Bitcoin y de las criptomonedas en general está lleno de posibilidades incontables. Las aplicaciones de blockchain no conocen fronteras, y los proyectos del sector son cada día más exitosos y más seguros.

En el recorrido que va del dinero mercancía al uso de metales preciosos como el oro y la plata, y de ahí al papel moneda y a las monedas nominales, la idea del dinero en el entorno virtual no es demasiado nueva, pero solo en la historia reciente ha llegado a ser aplicable.

Para algunos es un grupo dentro de la CIA; para otros, un extraterrestre; y quizá sea de verdad un cyberpunk llamado Satoshi Nakamoto. Sea quien sea, nos dejó solos para decidir qué hacer a continuación con sus ideas y su puesta en práctica, que cambian por completo la forma en que vemos nuestros activos y cómo los guardamos. Abrió el camino a ideas más avanzadas que la suya y convenció al mundo de adoptar una perspectiva completamente distinta.

Satoshi no se olvidó de esconder un mensaje en el bloque génesis, el bloque inicial que minó y escribió como código fijo. Dejó constancia de la fecha del 3 de enero de 2009 y adjuntó un titular del Times británico de ese día sobre los bancos responsables de la crisis económica mundial: "El ministro está al borde de un segundo rescate para los bancos". Probablemente se está burlando de la banca central con esas palabras. Se desconoce por qué Satoshi creó esa dirección no gastable en el bloque inicial. Hasta ahora se han enviado 16 BTC de forma anónima a esa dirección y, por tanto, el suministro total de 21 millones de bitcoins nunca llegará a producirse en realidad.

A Bitcoin solo le hicieron falta 9 años para alcanzar niveles capaces de asustar a los bancos centrales del mundo, y aún le queda mucho camino por delante.

Bitcoin Cómo funciona Bitcoin Satoshi Satoshi Nakamoto Nakamoto criptomonedas blockchain Qué es blockchain Minería Qué es la minería red de Bitcoin