avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Cómo funciona el protocolo Bitcoin (Parte 1)

Creado el: 2017-01-19 18:04:02, Actualizado el: 2017-01-19 18:11:24
comments   0
hits   1625

Cómo funciona el protocolo Bitcoin (Parte 1)

El año pasado escribí aquí 5 ideas sobre Bitcoin, y parece que es el primer artículo sobre Bitcoin que escribo aquí, pero hoy voy a hablar de los protocolos de Bitcoin.

Michael Nielsen es un científico, escritor y programador pionero en el estudio de la computación cuántica, para más detalles, consulte su propia introducción. La traducción de este artículo se debe a que el traductor cree que los artículos y discusiones sobre Bitcoin tienen muchos, muchos apoyos y muchos opositores. Pero la mayoría se detiene en el pensamiento conceptual, de precios y subjetivos, quiero deshacerme de los precios actuales de Bitcoin y su apariencia superficial, y a través de este artículo, darles a todos una descripción detallada del funcionamiento del protocolo Bitcoin.

Solo dejo que la gente sepa lo que es, donde se ajusta al espacio del dinero electrónico, no tratando de convencerlos de que es bueno. Otra de sus frases es: “Si no me crees o no lo consigues, no tengo tiempo para tratar de convencerte, lo siento”.

  • ### Este es el texto original:

Hay miles de artículos que tratan de explicar Bitcoin, una moneda en línea, peer-to-peer. La mayoría de los artículos tienen un poco de detalle sobre el protocolo subyacente. Incluso los más profundos se atascan en lugares clave.

Comprender el protocolo en profundidad es difícil, porque es fácil dar a Bitcoin por sentado y pensar en cómo usarlo para hacer dinero con otras especulaciones, pensar si es una burbuja, si Bitcoin significa el fin de los impuestos, etc. Es muy divertido pensar en estas cosas, pero estas ideas limitan seriamente tu comprensión. Y entender el protocolo de Bitcoin en sí mismo abrirá perspectivas que otros canales no pueden alcanzar.

En un artículo posterior explicaré los scripts de Bitcoin y los contratos inteligentes. En este artículo me centraré en los detalles específicos del protocolo de Bitcoin. Para entender este artículo, necesitarás estar familiarizado con la clave pública y las firmas digitales relacionadas.

Bitcoin está basado en la criptografía, lo que puede sorprenderte, no es que Bitcoin sea una moneda? ¿Es una forma de enviar mensajes secretos? En realidad, la mayor parte de los problemas que Bitcoin quiere resolver son sobre la protección de las transacciones, asegurando que las personas no puedan robar cosas de otros o hacerse pasar por otros, etc. En el mundo físico de los átomos, garantizamos la seguridad a través de cerraduras, firmas, cajas fuertes bancarias, etc. En el mundo de la información, garantizamos la seguridad a través de la criptografía.

La estrategia de este artículo es construir Bitcoin de una manera muy simple. Comenzaremos con una moneda digital muy simple, que llamaremos por ahora la moneda de Infocoin, para diferenciarla de Bitcoin. Por supuesto, nuestra primera versión de Infocoin tendrá muchos defectos, por lo que pasaremos por varias generaciones, cada una de las cuales presentará uno o dos nuevos conceptos.

Este método es un poco más lento que el que se usa para explicar Bitcoin directamente desde el principio. Pero incluso si puedes entender el principio de Bitcoin, es difícil entender por qué Bitcoin fue diseñado de esta manera. La ventaja de una explicación lenta de la síntesis paso a paso es que te permite tener una mejor comprensión de cada elemento de Bitcoin.

Por último, debo decir que soy relativamente nuevo en el mundo de Bitcoin. Tuve una atención superficial en 2011, pero el verdadero estudio serio de los detalles fue a principios de 2013.

  • El primer paso: firmar la carta de intenciones

    • #### ¿Cómo se diseña una moneda?

    A primera vista, una moneda digital puede parecer imposible. Supongamos que una persona llamada Alice tiene una moneda digital que quiere gastar. Si Alice puede usar una serie de caracteres como dinero, ¿cómo podemos evitar que use la misma serie de caracteres repetidamente? Si podemos resolver este problema, ¿cómo podemos evitar que otras personas falsifiquen una serie de caracteres y las roben a Alice?

    Estas son solo dos de las muchas cuestiones que se deben resolver con información como moneda. En la primera edición de Infocoin, buscamos una manera de hacer que Alice entregue una cadena de caracteres como dinero y una manera de protegerla de ser falsificada. Supongamos que Alice quiere dar un infocoin a otra persona.

    Este método no es muy popular, pero tiene algunas ventajas. Cualquier persona en el mundo puede usar la clave pública de Alice para verificar que Alice es realmente la persona que firmó. Ninguna otra persona puede generar el resultado de esa firma (la firma solo puede generarse a partir de la clave privada que posee Alice, en principio, vea la firma digital mencionada anteriormente), por lo que Alice no puede decir con arrepentimiento que no, no le di a Bob la infocoin).

    Aún no he dicho qué es el dinero en este acuerdo. Debo decirlo claramente: el dinero es el mensaje en sí mismo. Es decir, la secuencia de nombres que firmó representa a los caracteres que me dice que Alice le dará a Bob un infocoin.

  • Los números de serie dan a las monedas una identidad única.

El problema con nuestra primera edición de Infocoin es que Alice puede enviar repetidamente a Bob el mismo mensaje firmado. Supongamos que Bob recibe 10 mensajes de este tipo. Me pregunto, Alice, si le daría a Bob un Infocoin.

Lo que queremos es que la infocoin tenga una identidad única. Se necesita una etiqueta o un número de serie. Alice puede firmar en el mensaje que Alice le da a Bob una infocoin con el número de serie 8740348. Luego, Alice puede firmar en otro mensaje que Alice le da a Bob una infocoin con el número de serie 8770431, de modo que Bob y otras personas puedan saber que hay dos infocoins diferentes.

Para que esto funcione, necesitamos una fuente de números de serie confiable. Una forma de generar números de serie es crear una institución como un banco. Este banco generará números de serie para infocoins, registrará quién posee qué infocoin y verificará la autenticidad de las transacciones.

Más en detalle, supongamos que Alice va a un banco y dice: “Quiero sacar un infocoin de mi cuenta”. El banco le quita un infocoin de su cuenta y le da un nuevo número de serie nunca usado, supongamos que es 1234567. Luego, cuando Alice quiere enviar un infocoin a Bob, ella firma este nuevo mensaje: “Alice le dará a Bob un infocoin de la serie 1234567”. Pero Bob no solo acepta el infocoin, sino que también se pone en contacto con el banco y confirma dos cosas: primero, el infocoin de la serie 1234567 realmente pertenece a Alice.

  • ### Hacer de todos un banco.

La solución anterior parece tener mucho potencial. Sin embargo, podríamos hacer algo más ambicioso. Podríamos eliminar a los bancos de este acuerdo. Esto cambiaría drásticamente las propiedades de la moneda.

La idea es que todos trabajen juntos para convertirse en un banco. En particular, supongamos que cada persona que usa infocoin mantiene un registro completo de qué infocoin pertenece a quién.

Ahora, supongamos que Alice le va a dar un infocoin a Bob. Ella en el cubo de mensajes me dice que Alice le va a dar a Bob una firma en un cubo de infocoin con el número de serie 1234567. Y Bob puede usar su propia cadena de bloques para comprobar que el infocoin es el cubo que Alice me dio.

Todavía tenemos el problema de dónde proviene el número de serie de coins, pero esto es fácil de resolver, así que lo explicaré más adelante. El problema más difícil es que el protocolo permite que Alice repita el gasto de su infocoin. Ella puede publicar un mensaje firmado de que Alice le va a dar a Bob un número de serie de coins de infocoin de 1234567, y al mismo tiempo puede publicar un mensaje firmado de que Alice le va a dar a Charlie un número de serie de coins de infocoin de 1234567. Bob y Charlie utilizaron su propia cadena de bloques para comprobar que la infocoin realmente provenía de Alice.

Llamamos a este problema el problema del doble gasto de la horquilla, y a primera vista parece difícil de lograr. Después de todo, si Alice envía un mensaje a Bob primero y luego Bob envía un mensaje a todos los demás (incluyendo a Charlie), los demás actualizan su blockchain. En este caso, Charlie no será engañado por Alice.

La solución más sencilla es que cuando Alice le envía a Bob un infocoin, Bob no debe comprobar la transacción por sí solo. En cambio, debe publicar la transacción en toda la red de infocoins para que otros ayuden a juzgar si la transacción es razonable. Si todos deciden que la transacción es razonable, Bob puede aceptar el infocoin y luego todos actualizan su blockchain. Este tipo de protocolo evita la duplicación, porque si Alice quiere enviar el mismo infocoin a Bob y Charlie al mismo tiempo, otros en la red lo notarán y le dirán a Bob y Charlie que hay un problema con la transacción, y la transacción no se permitirá.

Más específicamente, supongamos que Alice quiere darle a Bob un infocoin. Como antes, ella le da una firma a un mensaje, y me dice que Alice le dará a Bob un código de infocoin con el número de serie 1234567 y le firmará el mensaje con el nombre correcto. También como antes, Bob hace una verificación con su propia blockchain, que la moneda realmente pertenece a Alice. Pero el protocolo es diferente, Bob no acepta directamente esto, sino que publica el mensaje de Alice a toda la red.

El protocolo todavía tiene muchas incertidumbres. Por ejemplo, ¿cuántos individuos son suficientes si hay suficiente gente publicando el mensaje? No puede ser toda la red de infocoin, ya que no sabemos quién está en la red de infocoin de antemano.

  • ### Prueba de trabajo Proof-of-work

Supongamos que Alice quiera duplicar la moneda en el acuerdo mencionado anteriormente, y que necesite controlar toda la red de infocoin. Supongamos que ella utilice un sistema automático para crear una gran cantidad de cuentas con diferentes identidades en la red de infocoin, supongamos que hay mil millones. Como antes, ella intenta duplicar la moneda, dándole la misma moneda a Bob y Charlie, pero cuando Bob y Charlie preguntan a la red de infocoin para verificar la transacción, el metálico de Alice inunda toda la red, les dice a Bob y Charlie que pueden pasar por la transacción y que es posible que engañen a uno de ellos o ambos para que acepten la transacción.

Hay una manera inteligente de usar un método llamado “Proof-of-work” para verificar el funcionamiento de las cuentas. El método no es intuitivo y requiere una combinación de dos conceptos, 1) el proceso de hacer que las transacciones se verifiquen artificialmente cuesta mucho dinero en costos de cálculo; 2) recompensar a los que ayudan a verificar la transacción.

Este es el punto de la prueba de trabajo. Pero para entender realmente la prueba de trabajo, necesitamos profundizar en detalles más específicos.

Supongamos que Alice publica un mensaje a toda la red. Supongamos que Alice le da a Bob un infocoin con el número de serie 1234567. Cuando los demás en la red escuchan este mensaje, cada uno lo agrega a una lista de transacciones pendientes que aún no han sido aprobadas por toda la red. Por ejemplo, un hombre llamado David en la red podría tener la siguiente lista de transacciones pendientes:

Cómo funciona el protocolo Bitcoin (Parte 1)

David examinó su propia cadena de bloques y vio que las transacciones mencionadas anteriormente eran legítimas. Él quería ayudar a difundir el mensaje de verificación a toda la red. Sin embargo, antes de eso, el protocolo de verificación de transacciones requería que David resolviera un enigma de cálculo llamado prueba de trabajo. Si no obtiene la solución del enigma, los demás miembros de la red no aceptarán su verificación.

Para explicar esto, usamos una función de hash fija que todo el mundo conoce en la red y la incluimos en el protocolo mismo. Bitcoin usa una conocida función de hash SHA-256, pero cualquier función de hash criptográfica puede usarse aquí. Damos a David un marcador de transacción en espera de este grupo, el L, para que pueda ser citado posteriormente.

Cómo funciona el protocolo Bitcoin (Parte 1)

El problema que David va a resolver es encontrar un número aleatorio x, y cuando añadimos este x detrás de L y hashamos esta combinación, el resultado que obtenemos comienza con varios zeros. La dificultad de este problema se puede ajustar ajustando el número de zeros iniciales. Una prueba de trabajo simple para una herramienta de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas de herramientas

Y esto no es válido cuando vemos que x es igual a 1.

Cómo funciona el protocolo Bitcoin (Parte 1)

Y luego intentamos x = 2, y luego x = 3, 4, 5… y al final, cuando descubrimos que x = 4350, tenemos

Cómo funciona el protocolo Bitcoin (Parte 1)

Este número aleatorio x nos da un resultado de cuatro hashes que comienzan con cero. Esto es suficiente para resolver un simple problema de demostración de que el hash funciona.

Lo que hace que este problema sea difícil de resolver es que los resultados de la función de hash de la clave siempre son aleatorios, y cualquier cambio pequeño en el valor de la entrada cambiará completamente el resultado de la salida de la función de hash completa, por lo que es difícil de predecir. Así que si necesitamos que la salida comience en 10 ceros, David necesitará un promedio de 1610 ≈ 1012 x diferentes para encontrar el valor adecuado. Esta es una tarea muy desafiante que requiere mucha capacidad computacional.

Obviamente, podemos controlar la dificultad de los problemas de prueba de trabajo estableciendo cuántos ceros se necesitan. De hecho, el protocolo de Bitcoin tiene un mejor control de la dificultad de los problemas mediante una pequeña modificación de la prueba de trabajo anterior. Ya no se trata de establecer cuántos ceros iniciales se necesitan, sino de establecer que la salida de hash del bloque sea menor o igual a un valor objetivo, que se ajusta automáticamente para garantizar que cada bloque de Bitcoin (bloque) se resuelva en un promedio de 10 minutos.

Bueno, supongamos que David tiene la suerte de encontrar un nonce x que funcione, ¡felicidades! ¡Será recompensado por encontrar la respuesta! Él publicará que ha demostrado que las transacciones dentro de este bloque son legítimas, y al mismo tiempo publicará el valor de x que ella encontró, y los otros participantes en el infocoin pueden demostrar que x es una solución válida que funciona.

Para que el trabajo demuestre el funcionamiento de este programa, los participantes de la red deberían necesitar un incentivo para ayudar a verificar las transacciones. Sin el incentivo, nadie estaría dispuesto a gastar su propio poder computacional para ayudar a verificar las transacciones. Si los participantes de la red no estuvieran dispuestos a gastar el poder computacional, el sistema entero no funcionaría.

En el protocolo de Bitcoin, este proceso de verificación se conoce como “mining” (minería). La verificación exitosa de cada bloque de transacción recibe bitcoins como recompensa. Al principio, era una recompensa de 50 bitcoins. Pero por cada 210.000 bloques verificados (es decir, aproximadamente cada 4 años), la recompensa se reduce a la mitad. Hasta ahora solo ha ocurrido una vez, es decir, ahora la recompensa por verificar un bloque es de 25 bitcoins.

Se puede pensar en la prueba de trabajo como un proceso de verificación de transacciones competitivas. Cada participante gasta una parte de la potencia de cómputo. La probabilidad de que un minero gane es aproximadamente igual a la proporción entre el tamaño de la potencia de cómputo que controlan y la potencia de cómputo de toda la red. Por ejemplo, si un minero controla el uno por ciento de la potencia de cómputo de toda la red, su probabilidad de ganar es aproximadamente el uno por ciento.

Por supuesto, incluso si los mineros deshonestos tienen una pequeña oportunidad de destruir toda la cadena de bloques, no tenemos la confianza suficiente para tomarla como moneda.

Voy a analizar el problema de los binarios ahora mismo, pero antes de eso, quiero agregar un detalle importante en el concepto de Infocoin. Idealmente, queremos que la red Infocoin pueda unificar el orden en que ocurren las transacciones. Si no tenemos un orden unificado, no es muy claro quién tiene qué infocoin en un momento específico. Para ayudar a resolver esto.

Cómo funciona el protocolo Bitcoin (Parte 1)

Por casualidad, una cadena de bloques puede tener ramificaciones. Esto se debe a que, a veces, dos mineros verifican casi al mismo tiempo las transacciones de un bloque. Se publican en la red al mismo tiempo, y algunos actualizan su cadena de bloques de una manera y otros actualizan su cadena de bloques de otra manera.

Cómo funciona el protocolo Bitcoin (Parte 1)

Esto crea una situación que queremos evitar, en la que la secuencia de las transacciones no es clara y no se sabe quién tiene qué infocoin. Afortunadamente, hay una forma sencilla de mover las ramificaciones. La regla es que si se produce una ramificación, las personas en la red mantienen las dos ramificaciones y, en cualquier caso, los mineros solo trabajan en la cadena de bloques más larga.

Supongamos que tenemos una sucursal, y algunos mineros reciben el bloque A primero, mientras que otros reciben el bloque B primero. Los mineros que reciben el bloque A seguirán minando en su sucursal, mientras que otros seguirán minando en la sucursal del bloque B. Supongamos que los mineros en la sucursal B sean los primeros en llegar al siguiente bloque:

Cómo funciona el protocolo Bitcoin (Parte 1)

Cuando reciben este mensaje, la persona en la rama A notará que la rama B es ahora la más larga, por lo que se convertirá en la rama de B. El trabajo en la rama A se detendrá rápidamente, por lo que todos trabajarán en la misma cadena de bloques ordenada.

De la misma manera, si el minero en la rama A es el primero en llegar al siguiente bloque, el que trabaja en la rama B se detiene y pasa a la rama A.

Cualquiera que sea el resultado, este proceso garantiza que la cadena de bloques tenga un orden uniforme. En Bitcoin, una transacción no se considera confirmada hasta que 1) esté en el bloque de la rama más larga, y 2) haya al menos 5 bloques verificados después de ella. En este caso, decimos que la transacción tiene 6 columnas de confirmación. Esto da tiempo a toda la red para unificar el orden de los bloques.

Ahora que entendemos la secuencia de tiempo, volvamos a pensar en lo que ocurriría si una persona deshonesta quisiera duplicar el gasto. Supongamos que Alice quiere dar a Bob y Charlie la misma transacción al mismo tiempo. Una posibilidad es que ella verifique un bloque con dos transacciones al mismo tiempo.

Pero otra posibilidad es que ella intente publicar dos transacciones por separado. Ella podría publicar una transacción para un grupo de mineros y otra para otro grupo de mineros, y ella quiere que ambas transacciones sean verificadas. Afortunadamente, en este caso, como acabamos de decir, la red solo confirmará una de las transacciones.

Otra posibilidad es que Alice = Bob, es decir, Alice trata de darle una moneda a Charlie, mientras que ella se la da a sí misma, ya que ella puede tener varias cuentas. En este caso, la estrategia de Alice es esperar a que Charlie acepte la Infocoin, es decir, después de que la transacción haya sido confirmada 6 veces en la cadena de bloques más larga.

Cómo funciona el protocolo Bitcoin (Parte 1)

Desafortunadamente, en este momento Alice ya está seis pasos por detrás de la cadena de bloques más larga. Es muy difícil para ella mantenerse al día con la rama más larga. Los otros mineros no la ayudarán, ya que todos necesitan trabajar en la rama más larga para ser recompensados. A menos que Alice pueda combinarse más rápido que cualquier otra persona en la red para resolver la prueba de trabajo (es decir, probablemente tenga más del 50% de la capacidad de cálculo de toda la red).

Por supuesto, esto no es muy estricto para decir que Alice no puede ser falsa. Esto es solo una conclusión razonable. El libro blanco original de Bitcoin no realizó un análisis de seguridad riguroso, sino una conclusión informal similar a la mía.

En la primera mitad, Michael deja de lado el concepto de Infocoin para dar un vistazo más detallado al protocolo de Bitcoin a través de la negociación de bitcoins. Si lo ves aquí, puedes seguir mi blog, y mi microblog.

También puedes seguirlo en Twitter, si te parece de ayuda, por ejemplo, por medio de un mensaje a Michael Nielsen, el autor de este artículo, en 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ, o por el primer capítulo de su próximo libro sobre redes neuronales y aprendizaje profundo.

El artículo fue adaptado de la obra de Jean-Luc Godard.