Primero te ignoran, luego se ríen de ti, despues luchan contra ti, y al final ganas. - Mahatma Gandhi.
Una implementación de Bitcoin es un código que los particulares pueden
ejecutar en sus ordenadores para convertirlos en nodos Bitcoin.
La implementación de referencia es el código de fuente abierta conocido como Bitcoin
Core, que puede descargarse desde
https://bitcoincore.org/en/download/
Los nodos Bitcoin interconectados constituyen la red Bitcoin:
La función de un nodo es verificar de manera independiente la validez de transacciones, rechazando aquellas que no siguen las reglas de Bitcoin.
Una transacción Bitcoin consiste en un mensaje firmado digitalmente que ordena la transferencia de una determinada cantidad de unidades monetarias.
Las firmas digitales se generan a partir de una Clave Privada
y su correspondiente Clave Pública.
Una Clave Privada es un número aleatorio entre 0 y 2^256 (aproximadamente el
número de átomos en el universo conocido), por lo que su entropía es de 256 bits.
La Clave Pública se deriva de la Clave Privada a través de una función unidireccional,
lo que significa que es imposible obtener una Clave Privada a partir de una Clave Pública.
Una Clave Privada puede cifrar datos que solo su Clave Pública correspondiente puede
descifrar, y viceversa.
La firma digital de un mensaje consiste en cifrar el mensaje con la Clave Privada y
añadir un texto que incluya el mensaje original (no cifrado) junto con la Clave Pública.
La verificación de que el propietario de la Clave Privada ha autorizado el mensaje se
consigue descifrando el mensaje con la Clave Pública y confirmando que el mensaje
resultante coincide con el original.
Las Direcciones Bitcoin son Claves Públicas
codificadas, diseñadas para ser más
legibles y resistentes a errores tipográficos.
La generación y almacenamiento de Claves Privadas, junto con sus correspondientes
Claves Públicas y Direcciones,
son procesos sencillos que pueden ser facilitados por programas llamados
Monederos.
Los nodos mantienen una mempool, que es una lista de solicitudes de
transacciones, y almacenan una copia de
el libro mayor distribuido conocido como Blockchain, que
contiene transacciones confirmadas.
Cada nodo obtiene los saldos actuales, denominados conjunto de UTXOs,
de su propia copia de la Blockchain.
En el caso de transacciones conflictivas, la validez debería determinarse por orden cronológico.
Pero los nodos no pueden demostrar matemáticamente el orden de solicitud, y
como las solicitudes de transacción se propagan como cotilleos entre nodos y pueden
publicarse desde cualquier nodo,
diferentes nodos reciben estas órdenes en diferentes momentos y en un orden
cronológico variable.
Por lo tanto, si los nodos difieren en qué versión de la transacción debe reconocerse
como válida, se produce un doble gasto, lo que da lugar a
a la coexistencia de diferentes sistemas monetarios.
La innovación clave de Bitcoin para resolver este problema es el mecanismo conocido
como Prueba de Trabajo. Este mecanismo permite prescindir de la
necesidad de una autoridad central al rotar
probabilísticamente el poder de ejecutar solicitudes de transacción.
Los distintos nodos mineros
ganan ese poder en función de su fuerza computacional relativa.
Funciona como una lotería descentralizada continua en la que los los participantes adquieren "boletos" utilizando un recurso imposible de falsificar: la energía.
Los sistemas alternativos a la Prueba de Trabajo dependen de recursos dentro de su
propio
sistema, lo que los hace inseguros. Estos sistemas se verifican mediante datos que
pueden falsificarse a bajo coste y son vulnerables a ataques donde una sola
entidad controla clandestinamente la mayoría de los nodos.
En consecuencia, estos sistemas requieren que una autoridad emplee recursos humanos,
lo que lleva a la burocracia y los privilegios.
Los mecanismos de consenso que no implican trabajo implican en cambio la gobernanza.
Una vez que una solicitud de transacción se incluye en un bloque de datos que es
verificado,
copiado y propagado de forma independiente por cada nodo, se considera ejecutada.
Sin embargo, es posible la coexistencia de dos bloques en competencia durante algunos minutos.
Este problema se resuelve cuando se crea un nuevo bloque, ya que cada nuevo bloque debe estar vinculado
al último bloque anterior,
y los nodos siguen la cadena con más trabajo acumulado, que suele ser la más larga.
En consecuencia, la probabilidad de que un bloque sea descartado disminuye con su
profundidad en la cadena, y cada bloque posterior aumenta la probabilidad de inmutabilidad,
lo que se conoce como confirmación.
Las transacciones de los bloques descartados vuelven a la lista de solicitudes de
transacción si no se incluyen en los nuevos bloques.
El creador de cada bloque recibe una recompensa, compuesta por comisiones de
transacción
y un subsidio a través de una transacción llamada coinbase.
Cada solicitud de transacción indica la tasa a pagar para priorizar su ejecución.
El subsidio se compone de nuevas unidades de bitcoin, cuya emisión se reduce a la mitad
cada 210.000 bloques (unos 4 años). Esto resulta en una
inflación monetaria decreciente para alcanzar un máximo de 21 millones de bitcoins.
La integridad de la información contenida en el registro de bloques es fácilmente
verificable gracias al uso de
funciones hash criptográficas. Estas funciones unidireccionales
transforman cualquier entrada de datos digitales en
datos de tamaño fijo denominados hash.
Los hashes son completamente diferentes entre sí, con sólo ligeras diferencias en
los datos de entrada.
En Bitcoin, la función hash más comúnmente utilizada es SHA256, que produce un
hash de 256 bits. Por ejemplo, el identificador (ID) de transacción es el doble hash SHA256 de
los datos de la transacción,
y el identificador de bloque es el doble hash SHA256 de los datos de la cabecera del bloque.
Datos contenidos en el encabezado del bloque:
1. # El hash del ID del bloque anterior.
2. # El hash combinado de los hashes
de todas las transacciones, conocido como la Raíz de un Árbol de Merkle.
3. N° Nonce y hash objetivo.
4. T Marca de tiempo.
Cada bloque consta de su cabecera y de las transacciones junto con sus respectivos hashes:
1.
El hash del ID del bloque anterior:
Forma una cadena en la que el hash de cada nuevo bloque incluye todo el historial de
transacciones.
Cualquier alteración de un bloque lo invalida a él y a todos los bloques posteriores.
Similar a un mosquito en ámbar, cuanto más profundo está un bloque en la cadena,
más inamovible se vuelve.
2. La raíz de un árbol de Merkle:
Proporciona una forma sencilla de verificar la integridad de las transacciones.
3. Nonce y objetivo de hash:
Nonce:
Para minar un bloque, hay que encontrar un nonce que, combinado con el resto de los datos
de la cabecera del bloque, dé como resultado un hash (ID del bloque) inferior a un umbral
especificado, conocido como objetivo de hash.
Por ejemplo, si el objetivo es obtener un hash que empiece por 00 a partir de datos que
contengan el texto "bitcoin", se podrían realizar intentos con "bitcoin-1", "bitcoin-2",
y así sucesivamente hasta encontrar un nonce exitoso.
¡Pruébalo aquí!.
En este ejemplo, el nonce sería 53.
El ID de bloque es así una prueba de trabajo fácilmente verificable.
Los mineros utilizan el gasto de energía para proponer transacciones, mientras que la
ejecución real de las transacciones se produce de forma descentralizada a través de nodos.
Objetivo de hash:
Su función es mantener una tasa media de producción de bloques de 10 minutos. Esto
garantiza una propagación y validación de bloques comparativamente rápida, reduciendo los
bloques huérfanos y desincentivando la centralización de la minería. El diseño impide
que los grandes mineros obtengan ventajas significativas construyendo sobre sus propios
bloques.
Además, un flujo de datos mínimo minimiza los costes de operación de los nodos y facilita
la replicación de la información.
4. Marca de tiempo:
Es la hora aproximada en que cada bloque fue minado por su respectivo minero.
Cada 2016 bloques, la red calcula la diferencia de tiempo entre la primera y la última
marca de tiempo para ajustar el objetivo de hash en función de los cambios en la potencia
minera total.
El objetivo de hash puede multiplicarse o dividirse por un máximo de 4 para limitar el
impacto de ciertos ataques de doble gasto.
Las marcas de tiempo no son exactas y no aumentan necesariamente en el tiempo de un bloque a otro. Para ser aceptada por un nodo, una marca de tiempo debe ser posterior a la mediana de las 11 marcas de tiempo anteriores y anterior dos horas en el futuro según la hora actual del nodo.
Gracias a este mecanismo, por primera vez en la historia, la inflación de un bien monetario es predecible.
La tecnología Bitcoin utiliza la electricidad para evitar consumir recursos humanos. Libera tiempo humano.
Cuando podemos asegurar una red financiera mediante la informática en lugar de mediante contadores, reguladores, investigadores, policías y abogados, pasamos de un sistema manual, local y de seguridad inconsistente a uno automatizado, global y mucho más seguro. — Nick Szabo.
Los mineros de Bitcoin utilizan la energía de la misma manera que los bomberos usan agua para apagar un fuego.
La minería de Bitcoin gravita hacia fuentes de energía que desbloquean energía
varada, que de lo contrario sería desperdiciada. Los mineros de Bitcoin proporcionan una carga muy
flexible e interrumpible, capaz de operar en cualquier lugar.
A largo plazo, a medida que aumente la competencia y disminuya la rentabilidad de la
minería, sólo seguirá siendo económicamente viable el uso de la energía sobrante.
La tecnología Bitcoin permite descentralizar el control sobre un sistema monetario,
minimizando la gobernanza financiera. Bitcoin funciona en base a reglas sin gobernantes.
Preguntarse "¿quién controla Bitcoin?" es similar a preguntar "¿quién controla un idioma?".
Los cypherpunks rechazan la gobernanza, por lo que la ausencia de ella ha sido siempre el
objetivo. Esta ausencia aumenta la inmutabilidad de la
seguridad de la red y la credibilidad de su política monetaria.
"Sí: apártate un poco, que me estás quitando la luz del sol". - La respuesta del filósofo Diógenes a la oferta de Alejandro Magno de concederle cualquier deseo.
En Bitcoin, el consenso surge cuando diferentes ordenadores ejecutan simultáneamente el
mismo protocolo. Al maximizar el papel del protocolo de consenso, se minimiza
drasticamente el consenso social.
El diseño central de Bitcoin es inmutable, solo aquellas innovaciones tecnológicas
que mejoran la seguridad están justificadas para incluirse gradualmente
en su código. Avanzar lentamente es un dogma.
La naturaleza de Bitcoin es tal que una vez publicada la versión 0.1, el diseño central quedó grabado en piedra para el resto de su vida. - Satoshi Nakamoto.
Debemos tratar el software de Bitcoin con el mismo respeto que tratamos el software de un reactor nuclear. - Hugo Nguyen.
Esto es difícil. Esto es sutil. Si te frustra lo lento que avanza Bitcoin, déjame decirte, Bitcoin avanza demasiado rápido. La criptografía es difícil y aterradora, y tenemos que asegurarnos de que nos movemos despacio. - Andrew Poelstra.
Las actualizaciones de seguridad de Bitcoin siguen un proceso meticuloso:
1. Investigación: Aunque la implementación de nuevas
características en Bitcoin es increíblemente lenta (por
buenas razones), el ritmo de la investigación es abrumador.
- Andrew Poelstra.
2. Propuesta: Las actualizaciones se proponen para ser revisadas por
otros desarrolladores, para su crítica, su despliegue
en sidechains/test-nets y desarrollo iterativo.
3. Consenso: Si las propuestas generan interés, hay un consenso
abrumador entre los participantes de la red, y los contribuyentes de software más activos las
aceptan unánimemente, las actualizaciones se implementan y prueban.
4. Despliegue de Código Abierto: Las actualizaciones se despliegan
como código abierto, lo que permite a los usuarios verificarlas de manera independiente.
5. Aplicación: Las actualizaciones son aplicadas por los
nodos. Cada operador de nodo
debe instalar manualmente las actualizaciones si decide adoptarlas.
El término "fork" se refiere a un cambio en las reglas de consenso:
- Soft Fork: Endurece las reglas de consenso. Los bloques considerados
válidos por los nodos que ejecutan la versión antigua
pueden considerarse inválidos por aquellos que ejecutan la nueva versión. No requiere
una actualización simultánea de toda la red.
- Hard Fork: Relaja las reglas de consenso. Los bloques considerados inválidos por los
nodos que ejecutan la versión antigua pueden ser considerados válidos por los que ejecutan
la nueva versión. Requiere que todos los nodos se actualicen, lo que la convierte en una
solución de último recurso contra un problema extremo de seguridad en la blockchain.
Cuanto mayor es el riesgo procedimental y el costo mental, menos incentivos hay para realizar una actualización.
En el caso de un fallo catastrófico y general en la tecnología de Bitcoin, desarrolladores influyentes, con suerte compartiendo principios comunes, podrían contribuir a desplegar código que migre las reglas básicas de Bitcoin a una nueva tecnología. Este escenario, a menudo conocido como "la opción nuclear", sugiere que en tales circunstancias, el concepto de Bitcoin probablemente perduraría a pesar de los cambios en la tecnología.
Si SHA-256 se rompiera por completo, creo que podríamos llegar a un acuerdo sobre cuál era la cadena de bloques honesta antes de que empezaran los problemas, fijarla y continuar desde ahí con una nueva función hash. - Satoshi Nakamoto.
El gran logro de la tecnología Bitcoin es hacer valer los derechos de propiedad de forma automática en un sistema monetario.