Informe técnico de Bitcoin de Satoshi Nakamoto: un recorrido completo y sencillo

Cuando leí por primera vez el documento técnico original de bitcoin publicado por Satoshi Nakamoto (2008), aclaró muchas preguntas fundamentales que tenía sobre la criptomoneda y las cadenas de bloques en general. El documento, como confirmarán muchos profesionales de blockchain y criptografía bien leídos, es un punto de partida fantástico para cualquiera que busque aprender más sobre la tecnología.

El objetivo de esta publicación es guiarlo a través del documento técnico mientras lo hace lo más digerible posible para cualquier persona que sea nueva en el campo. Intentaré simplificar algunas partes manteniendo la precisión del contenido.

No nos detengamos más y zambullámonos.

PDF: Bitcoin: un sistema de efectivo electrónico peer-to-peer.

Antes que empecemos…

Una cadena de bloques es un libro mayor o una base de datos. Se distribuye y mantiene a través de una gran cantidad de nodos (computadoras) en contraste con lo que está en manos de una sola autoridad o partido. El objetivo de la tecnología detrás de las criptomonedas como Bitcoin es hacer posible llegar a un acuerdo (consenso) sobre la validez de los datos en la base de datos y la de los datos que se agregarán a la base de datos. Los datos, en este caso, se refieren principalmente a datos de transacciones en línea que determinan la propiedad de activos digitales como criptomonedas o tokens.

Todo el libro mayor distribuido se mantiene actualizado y verificado, y todos los participantes de la red están de acuerdo con su validez. Sin sumergirse de inmediato en el funcionamiento técnico, los protocolos de blockchain como el que subyace a Bitcoin, permiten que este acuerdo y validación se logre sin la necesidad de un intermediario externo, como un banco.

En el pasado, dicha fiesta era necesaria para verificar la propiedad del dinero (es decir, esta persona puede gastar este dinero). La fiesta también se aseguró de que un pago en línea solo se gastara una vez. (es decir, ese dinero en particular no se utiliza en otra transacción). El último problema es lo que se conoce como el problema del doble gasto .

Este siempre ha sido un problema importante para la transacción de activos digitales. Es posible duplicar el código que compone el activo y utilizarlo en múltiples transacciones.

El nombre "blockchain" proviene de la forma en que se almacenan los datos. ¿Los datos se recopilan en bloques? que se agregan a una cadena ⛓️ de bloques previamente validados. Con esto como introducción, vayamos directamente al tema y profundicemos en el famoso documento técnico.

Resumen

El resumen del documento técnico es bastante profundo a la derecha de la apuesta y sirve como un pequeño resumen del documento. ¿No se preocupe si esto se le pasa por la cabeza inicialmente? ‍. Ya cubrimos la mayor parte de lo que necesita saber y lo agregaremos en la siguiente sección.

La única conclusión aquí debería ser que el documento propone un sistema de efectivo electrónico peer-to-peer. El sistema nos permite realizar pagos en línea directamente entre nosotros. No es necesario que un banco resuelva los problemas de propiedad y doble gasto. ? →? →? ‍ y ❌?

"Una versión puramente peer-to-peer de efectivo electrónico permitiría que los pagos en línea se envíen directamente de una parte a otra sin pasar por una institución financiera".

Introducción

"El comercio en Internet ha llegado a depender casi exclusivamente de instituciones financieras que actúan como terceros confiables para procesar pagos electrónicos".

En el momento de redactar el documento técnico de Bitcoin, las instituciones financieras eran necesarias para verificar la propiedad y eliminar el problema del doble gasto. Esto, junto con la necesidad de que las transacciones sean reversibles (las instituciones financieras tienen que lidiar con disputas de mediación), aumenta los costos asociados con una transacción. Esto significa que existe un tamaño mínimo de transacción necesario para que estas instituciones financieras la ejecuten. Su tarifa debe cubrir los costos de transacción al menos, de lo contrario, no tiene ningún sentido. Si no ha quedado claro antes: ¿los bancos disfrutan mucho haciendo dinero ?.

"... limitando el tamaño mínimo de transacción práctica y eliminando la posibilidad de pequeñas transacciones ocasionales".

Esto elimina la opción de una gran cantidad de oportunidades de transacción que teóricamente existen pero que prácticamente no son factibles. Una aplicación sorprendente que no es posible debido a este tamaño mínimo de transacción es el microconsumo de contenido en línea, ya sean artículos web, videos, música, etc. En lugar de tener que pagar una suscripción mensual, que puede valer la pena o no según el uso que haga el consumidor, las micro-transacciones permitirían al usuario realizar pagos automatizados increíblemente pequeños a medida que se consume el contenido.

Esto cambiaría radicalmente la forma en que usamos Internet. Pagar artículos de Medium por palabra, videos de YouTube por segundo, música de Spotify por minuto o incluso consumir ancho de banda de Internet por megabyte.

Otra posible aplicación sería la de realizar micropagos directamente entre dispositivos de Internet de las cosas. Un ejemplo simple aquí sería un automóvil estacionado que paga por su lugar de estacionamiento por minuto. Existen innumerables aplicaciones de microconsumo / transacciones, muchas de las cuales solo se harán más evidentes en el futuro. Esto simplemente no es posible si necesitamos un intermediario externo.

“Con la posibilidad de reversión, la necesidad de confianza se extiende. Los comerciantes deben ser cautelosos con sus clientes, molestándolos para obtener más información de la que de otro modo necesitarían ".

Otro motivo por el que la necesidad de confianza no es ideal a la hora de realizar transacciones online es que para obtener dicha confianza se debe recabar información personal, ya sea por los bancos o por los comercios a través de los cuales se realizan los pagos. Esta información es almacenada por estas organizaciones (a menudo en un solo servidor), lo que les da control sobre los datos personales y hace que los datos sean propensos a fugas o piratería.

Durante la última década se han producido increíbles hacks de datos (piense en Yahoo y Equifax) y cada día son más importantes. Lo que Bitcoin pretende lograr es, de alguna manera, replicar la simplicidad de una transacción en persona en un entorno en línea.

Si Andy le entrega a Brenda un billete de $ 10 ?, Brenda no tiene que saber nada sobre Andy (como información personal, puntajes de crédito, patrimonio neto, etc.). Lo único que tiene que saber es que los $ 10 pasaron de estar en posesión de Andy a estar en su posesión y que los $ 10 no se duplicaron mágicamente (? →? ‍ → ??) y Andy tiene otra réplica (exacta) para gastar. .

"En este documento, proponemos una solución al problema del doble gasto utilizando un servidor de marca de tiempo distribuido de igual a igual para generar una prueba computacional del orden cronológico de las transacciones".

Para que esto sea posible, la persona (o personas, o cosa) bajo el nombre Satoshi Nakamoto presenta un sistema de pago electrónico que utiliza prueba criptográfica? ‍? que permite a sus miembros llegar a un acuerdo (consenso) sin necesidad de un tercero intermediario.

2. Transacciones

"Cada propietario transfiere la moneda al siguiente firmando digitalmente un hash de la transacción anterior y la clave pública".

En el mundo de Bitcoin, aquellos que poseen Bitcoins tienen lo que se llama una "billetera". Esto funciona de manera similar a una billetera clásica en el sentido de que "contiene" su Bitcoin. Asociada a la billetera hay una clave pública . Esta es una dirección que se puede utilizar para enviar Bitcoin, al igual que alguien tiene una dirección de correo electrónico o un número de cuenta bancaria.

Además, hay otra clave (MUY importante) que está asociada con una billetera que se llama clave privada , que funciona como su contraseña. Firmar con esta clave privada es la única forma en que alguien puede demostrar que es propietario de la billetera, y es lo que les permite enviar Bitcoins en esa billetera. ¿Pierde esta clave (y dependiendo del tipo de billetera, sus palabras clave), pierde su BTC ?.

Tenga en cuenta que el orden en realidad es el siguiente:

  • Cuando se configura una billetera, esa billetera genera una clave privada aleatoria.
  • A partir de esa clave privada (utilizando un algoritmo de firma digital de curva elíptica) se genera una clave pública (tenga en cuenta que no es posible volver a convertirla en su clave privada; es un algoritmo unidireccional).
  • A partir de esa clave pública (algo que discutiremos en la sección de Privacidad) se genera una dirección de billetera.

Ser propietario de Bitcoins no significa que realmente tenga monedas en su billetera. Un Bitcoin no es un fragmento de código que usted posee o que está almacenado en algún lugar. El valor del BTC asociado con una billetera (llamémoslo ABC123) se basa en cuántas transacciones en la cadena de bloques dicen "Dirección EJEMPLO890 ... envía x cantidad de BTC a la dirección ABC123", así como cuántos dicen "Dirección ABC123 ... envía x cantidad de BTC a la dirección EJEMPLO453 ”.

En otras palabras, la cadena de bloques de Bitcoin almacena una cantidad increíble de datos que especifican quién envió cuánto a qué dirección. Estos datos (quién envía, qué cantidad, quién recibe) se almacenan en transacciones individuales. La propiedad de Bitcoin se calcula observando todas las transacciones que llegan a una dirección y las que salen.

Ahora, si la dirección ABC123 quiere gastar los BTC que se han recibido de otra dirección, ¿tiene que demostrar que está autorizado a hacerlo firmando la transacción con su clave privada ? (Esos datos condicionales, solo puede usarlos si está firmado la clave privada correcta: se puede encontrar en la transacción anterior a la que se solicita). Se genera una nueva transacción, se envía el BTC y comenzamos de nuevo. K EEP en cuenta que esta es una versión simplificada; algunos detalles se agregarán más adelante.

Conclusión básica: los bitcoins no son monedas reales, son solo una combinación de transacciones que demuestran que tiene BTC para gastar. Las claves privadas se utilizan para firmar transacciones y verificar la propiedad.

“El problema, por supuesto, es que el beneficiario no puede verificar que uno de los propietarios no gastó dos veces la moneda”. “La única forma de confirmar la ausencia de una transacción es estar al tanto de todas las transacciones”.

¿Confirmar la ausencia de una transacción se realiza transmitiendo cada transacción a toda la red? y crear un historial compartido de todas las transacciones anteriores (cronológicamente).

3. Servidor de marca de tiempo

"Un servidor de marca de tiempo funciona tomando un hash de un bloque de elementos para marcar con la hora y publicando ampliamente el hash ..."

La idea aquí es recopilar las transacciones que se han transmitido públicamente en bloques, marcarlas con el tiempo (¿agregar un valor de tiempo?), Agregar algunos datos más relevantes (llegaremos a esto más adelante) y luego ejecutarlos a través de un algoritmo de hash SHA256 ⏩ .

Lo que esto hace básicamente es convertir el bloque y sus datos en una cadena de caracteres que se pueden usar para identificar de manera única ese bloque (solo esa combinación de datos le dará ese valor hash). Cada nuevo bloque (antes de agregarse y ejecutarse a través de un SHA256) ahora puede hacer referencia al hash del bloque anterior en la cadena, creando una cadena de bloques en orden cronológico. De esta forma, todo el mundo puede ver qué bloques (y sus transacciones) han tenido lugar en el pasado y en qué orden.

Esta cadena de bloques que están vinculados a través de su valor hash es lo que constituye la cadena de bloques real ("blockchain" se usa a menudo para referirse a protocolos y sistemas completos, pero en realidad es la cadena de bloques en sí, la base de datos real).

4. Prueba de trabajo y 5. Red

Todo bien. ¡Parece genial! Sin embargo, ¿cómo nos aseguramos de que los datos que se agregan a la cadena sean realmente correctos? ¿Alguien puede simplemente agregar bloques con transacciones que no existen? ?

"Para implementar un servidor de marca de tiempo distribuido de igual a igual, necesitaremos utilizar un sistema de prueba de trabajo ..."

Lo que se necesita es un sistema que exija que se realice algún trabajo antes de poder agregar o sugerir un nuevo bloque a la cadena de bloques. Al igual que el infame CAPTCHA en la web, el objetivo es crear una barrera donde sea más difícil (e inviable) enviar spam al sistema (o en el caso de Bitcoins, sugerir datos falsos). Bitcoin hace esto de la siguiente manera.

Mencioné anteriormente que las transacciones se transmiten a toda la red. En este punto, aún no se han agregado a la cadena. Los mineros (aquellos que van a realizar el “trabajo” para agregar el bloque a la cadena) van a realizar el hash mencionado anteriormente. Recopilan estas transacciones y las colocan en un bloque (como Merkle Root, lo discutiremos más adelante) junto con la marca de tiempo antes mencionada, el hash del bloque anterior y algunos otros datos relevantes como la altura del bloque (qué bloque # en la cadena), y más.

Una vez recopilados todos estos datos en un bloque, los ejecutan a través del algoritmo hash SHA256. Una vez más, lo que esto hace básicamente es convertir todos esos datos en una cadena de caracteres que identifica de forma única ese bloque y sus datos. Cambie una cosa pequeña en los datos del bloque y todo el hash cambia (no hay un patrón conocido para esto, pero no es aleatorio; cámbielo nuevamente y obtendrá exactamente el mismo hash).

Mire cómo cambia el hash cuando agrego el número "1" a la cadena de caracteres.

La cadena de bloques de Bitcoin no exige solo un hash; quiere un hash que comience con (en el momento de escribirlo) diecisiete ceros ?.

Por ejemplo: 000000000000000006fb217d70740a895ce4966e2826325e31061bc433d7b186

¿Cómo obtienen los mineros ese hash? Necesitan agregar un número a los datos del bloque que se llama 'nonce' (lo agregan como yo agregué el “1”). ¿Nadie sabe qué número se necesita para encontrar el hash correcto? ‍. La única forma de encontrarlo es mediante prueba y error: adivinando.

"... implementamos la prueba de trabajo incrementando un nonce en el bloque hasta que se encuentra un valor que le da al hash del bloque los bits cero requeridos".

Este proceso, adivinar el nonce correcto, es lo que se conoce como 'minería' ⛏️. Los mineros con los recursos de CPU más grandes (la mayor potencia de cálculo) tienen la mayor probabilidad de ser los primeros en encontrar ese nonce correcto.

Mientras más del 51% de la potencia de la CPU esté en manos de nodos honestos, será imposible que un minero malintencionado gane constantemente el proceso de minería y agregue datos falsos a la cadena. La cadena más larga es siempre la que se toma como cadena veraz.

“… La prueba de dificultad en el trabajo está determinada por un promedio móvil que tiene como objetivo un número promedio de bloques por hora. Si se generan demasiado rápido, la dificultad aumenta ".

Este proceso de agregar un nuevo bloque a la cadena de bloques ocurre cada 10 minutos aproximadamente. Esto se mantiene estable por el protocolo que ajusta la dificultad de minería (número de ceros iniciales), también llamada "bomba de dificultad". - en consecuencia, a medida que la potencia computacional crece con el tiempo.

6. Incentivo

¿Por qué los mineros harían todo ese esfuerzo y pagarían mucho dinero para obtener el poder computacional de la mina?

Una vez que se acuerda el bloque, se agrega una transacción adicional al comienzo del bloque (a menudo denominada 'transacción de base de monedas') que asigna BTC recién creado a la dirección de billetera del minero ganador, recompensándolo por el trabajo realizado y proporcionando una forma de distribuir monedas en circulación ?. Además de eso, cada transacción en el bloque tiene una pequeña tarifa de transacción asociada, al menos ese era el objetivo, que también va para el minero ganador.

"Una vez que un número predeterminado de monedas ha entrado en circulación, el incentivo puede pasar por completo a las tarifas de transacción y estar completamente libre de inflación".

Vamos a saltarnos la parte 7 (Recuperación de espacio en disco) y la parte 8 (Verificación de pago simplificada) y discutiremos brevemente estas secciones al final. Aunque son una parte importante del funcionamiento de Bitcoin, en aras de comprender el núcleo del documento, no lo son tanto.

9. Valor de combinación y división

“Para permitir que el valor se divida y combine, las transacciones contienen múltiples entradas y salidas. Normalmente, habrá una sola entrada de una transacción anterior más grande o varias entradas que combinan cantidades más pequeñas y, como máximo, dos salidas: una para el pago y otra para devolver el cambio, si lo hay, al remitente ".

Algo que ya mencionamos un poco antes es cómo se realizan las transacciones y cómo se calcula el valor de la dirección.

El valor de BTC mantenido en una dirección es básicamente la suma de todas sus transacciones de entrada potenciales (es decir, el valor de todas las transacciones hacia esa dirección que no se han gastado ). Cuando el titular de la dirección quiere gastar sus BTC, no puede simplemente tomar exactamente esa cantidad y enviarla. Tienen que usar sus transacciones de entrada como piezas completas para hacerlo (algo así como la forma en que necesita pagar con un billete de dólar completo y no puede cortarlo en pedazos para pagar). Entonces, ¿qué significa eso en el sentido práctico?

Andy ha vuelto? pero ahora tiene una billetera con 0.5BTC. Este valor proviene de tres salidas de transacciones no gastadas (UTXO) (o transacciones de entrada futuras; la función UTXO como referencia para la transacción de entrada para una nueva transacción):

a) 0,15 BTC

b) 0.27 BTC

c) 0.08 BTC

Andy quiere enviar 0.38 BTC a Brenda (¿afortunada Brenda…?). Cuando genere esta transacción, el protocolo Bitcoin tomará las entradas necesarias que juntas sean iguales o mayores que (≥) el pago a Brenda y las usará como piezas completas para generar dos transacciones de salida.

En nuestro ejemplo, las operaciones de entrada a y b se utilizan (0,15 + 0,27 = 0,42) para generar la transacción de salida pago de 0.38BTC a Brenda, así como otra transacción de salida a la propia dirección de Andy que devuelve el cambio (0.42-0.38 = 0,04). Ambas transacciones de salida pueden funcionar como nuevas transacciones de entrada para pagos futuros de los titulares de la dirección.

Nota: También hay una tarifa de transacción / minero involucrada que se saca de la ecuación. Entonces, el cambio que se devuelve es un poco menor.

Conclusión básica : las transacciones de salida requieren transacciones de entrada completas que juntas son al menos iguales o mayores que el valor de salida. Cualquier exceso (Entradas - (pago + tarifa de minero)) se devuelve como cambio y se puede utilizar como una nueva transacción de entrada.

10. Privacidad

Ya discutimos la existencia y el uso de billeteras, claves públicas y claves privadas anteriormente. En la situación en la que un tercero almacena nuestra información (como un banco), la privacidad se obtiene al limitar el acceso a esa información mediante el manejo de permisos y la protección de los servidores en los que se almacena.

Sin embargo, como se mencionó anteriormente, estos proporcionan un único punto de falla y ataque, lo que lo hace propenso a pérdidas y piratería. Entonces, ¿cómo hace Bitcoin para brindar privacidad si todas las transacciones se transmiten abiertamente a toda la red? ?

"La necesidad de anunciar todas las transacciones públicamente excluye este método, pero la privacidad aún se puede mantener interrumpiendo el flujo de información en otro lugar: manteniendo las claves públicas en el anonimato".

¿La idea aquí es mantener la clave pública anónima? ️. Mientras las personas no puedan asociar una clave pública con una persona en particular, no hay forma de revelar su identidad.

Una forma de hacer esto que se usa actualmente en el protocolo es a través de la generación de direcciones de billetera, con una billetera que puede contener múltiples direcciones. En lugar de mostrar claves públicas en los datos de la transacción, se utilizan direcciones de billetera. Al igual que las claves públicas se crean en base a claves privadas usando un algoritmo unidireccional, lo mismo se hace para generar una dirección de billetera a partir de una clave pública (usando el SHA256 seguido de un RIPEMD160). Lo que nos queda (después de ejecutarlo a través de un BASE58CHECK para hacerlo más legible) es una dirección de billetera que se usa en los datos de la transacción.

"Como firewall adicional, se debe usar un nuevo par de claves para cada transacción para evitar que se vinculen a un propietario común".

Sin profundizar en muchos detalles, se pueden generar múltiples direcciones a partir de una sola clave privada implementando un contador y agregando un valor creciente para crear claves subprivadas (que se pueden usar para crear claves públicas que a su vez se pueden usar para generar direcciones de billetera). De esta manera, una sola clave privada puede dar acceso a una billetera que tiene transacciones que entran y salen de múltiples direcciones (esto se conoce como billetera determinista).

Muchos software y servicios de Bitcoin manejan esta creación automática de direcciones de billetera al ejecutar una transacción, lo que hace que sea casi imposible revelar las identidades detrás de una transacción de transmisión pública.

Caminaremos brevemente por las piezas sobrantes del documento técnico y luego lo envolveremos.

7. Recuperación de espacio en disco

"Una vez que la última transacción en una moneda está enterrada bajo suficientes bloques, las transacciones gastadas antes de que se puedan descartar para ahorrar espacio en el disco".

Cuando una transacción está enterrada bajo suficientes bloques, lo que significa que el sistema la ha validado completamente, no es necesario que siga almacenando todos los datos de la transacción en el bloque. Esto es posible sin romper el hash al incluir solo la raíz Merkle de todas las transacciones en el hash del bloque, y no los datos de transacciones individuales. Para obtener más información sobre Merkle Trees ?, consulte Wikipedia.

En resumen, todas las transacciones tienen un hash y esos hash se emparejan antes de volver a usarlos, y así sucesivamente hasta que llega al hash principal de todas las transacciones, llamado Merkle Root.

8. Verificación de pago simplificada

Para verificar un pago, un usuario solo necesita poder vincular la transacción a un lugar en la cadena consultando la cadena de bloques más larga y tirando de la sucursal de Merkle en la que existe la transacción. Si ese usuario puede hacerlo, puede confiar en que la transacción ha sido válida dado que la red la ha incluido y se han construido más bloques sobre ella.

11. Cálculos

Esto se sumerge en el trasfondo más matemático de por qué la red será segura cuando más de la mitad de la red consta de nodos honestos.

Básicamente, siempre que haya más nodos honestos que nodos maliciosos, a medida que la cadena crece, se vuelve cada vez más difícil para un atacante generar una cadena alternativa que le permita recuperar los pagos que haya realizado. Cuantos más bloques se agreguen a una transacción en particular, menor será la probabilidad de que un atacante pueda alcanzar una cadena alternativa.

Es por eso que a menudo vemos el número 6 cuando hablamos de confirmaciones (bloque), que básicamente se refiere a 6 bloques que se agregan después de que se incluyó la transacción, y funciona como el umbral de confirmación completo.

Hecho

¡Alli estamos nosotros! ? Hemos cubierto prácticamente todo el documento técnico original de Bitcoin. Este artículo ha funcionado como la génesis de las tecnologías blockchain que vemos hoy. Obtener una mejor comprensión de su contenido definitivamente lo ayudará a comprender el ecosistema actual de la industria.

Realmente espero que este artículo te haya ayudado. Si es así, agradeceríamos mucho los aplausos y hágamelo saber en la sección de comentarios a continuación cuáles son sus pensamientos sobre el artículo. Me encantaría escuchar lo que piensas. Cualquier sugerencia, corrección o retroalimentación es muy apreciada.

Todo lo mejor,

Valentijn | @vvdhout