¿Cómo funciona el protocolo Bitcoin?

El autor:Un sueño pequeño., Creado: 2017-01-19 18:04:02, Actualizado: 2017-01-19 18:11:24

¿Cómo funciona el protocolo Bitcoin?

El año pasado escribí aquí 5 ideas sobre Bitcoin y parece ser el primer artículo aquí sobre Bitcoin, hoy aquí presentamos el protocolo de Bitcoin.

Este artículo es una traducción del artículo de Michael Nielsen sobre el protocolo de Bitcoin, el artículo que el traductor cree que es el más claro escrito sobre el funcionamiento del protocolo de Bitcoin. Michael Nielsen es un científico, escritor y programador pionero en el estudio de la computación cuántica. Los detalles se pueden ver en su propia introducción. La traducción del artículo se debe a que el traductor cree que el artículo y la discusión sobre Bitcoin tiene muchos, muchos apoyos.

Nakamoto nunca se fue a convencer a nadie, sino que publicó el artículo en línea para que otros lo juzguen. Él mismo dijo que "It would help to condense the article and make it less promotional sounding as soon as possible". Just letting people know what it is, where it fits into the electronic money space, not trying to convince them that its good.

  • He aquí el texto original:

    Miles de artículos han tratado de explicar Bitcoin, una moneda en línea "peer-to-peer"; la mayoría de los artículos han escrito sobre el protocolo subyacente y han omitido muchos detalles; incluso los artículos más profundos están atascados en los puntos clave. El objetivo de este artículo es explicar lo que hay detrás del protocolo de Bitcoin de la manera más clara y fácil de entender. Empezamos con el primer principio, construyendo una comprensión teórica amplia del protocolo de Bitcoin, y luego profundizamos en los detalles de la transacción, examinando los datos en Bitcoin.

    Comprender el protocolo en profundidad es difícil, porque es fácil dar por sentado Bitcoin y pensar en cómo usarlo para especular, pensar si es una burbuja, pensar si Bitcoin significa el fin de los impuestos, etc. Estas ideas son interesantes, pero estas ideas limitan seriamente tu comprensión. Y entender el protocolo de Bitcoin en sí mismo abrirá otras perspectivas inalcanzables. Por ejemplo, el protocolo es la base del lenguaje de script incorporado en Bitcoin, que te permite crear nuevos instrumentos financieros con Bitcoin, como contratos inteligentes.

    Voy a explicar los scripts de Bitcoin y los contratos inteligentes en un artículo posterior. En este artículo me centraré en los detalles específicos del protocolo de Bitcoin. Para entender este artículo, probablemente necesitarás estar familiarizado con las contraseñas de claves públicas y las firmas digitales asociadas. También probablemente estarás familiarizado con las funciones hash (que convierten la entrada de longitud arbitraria en la salida de longitud fija).

    La base de Bitcoin es la criptografía, lo que puede sorprenderlo, ¿no es que Bitcoin es una moneda? ¿Es una forma de enviar información secreta? De hecho, la mayor parte de los problemas que Bitcoin quiere resolver se trata de proteger las transacciones para garantizar que las personas no roben cosas de otras personas o se hagan pasar por otras personas, etc. En el mundo físico compuesto por átomos, nos aseguramos de seguridad con cerraduras, firmas, cajas de seguro bancarios, etc. En el mundo de la información, nos aseguramos de seguridad con la criptografía.

    La estrategia de este artículo es una construcción de Bitcoin por capas. Vamos a comenzar con una moneda digital muy simple, que llamamos temporalmente Infocoin, para distinguirla de Bitcoin. Por supuesto, nuestra primera versión de Infocoin tendrá muchos inconvenientes, por lo que pasaremos por varias iteraciones, introduciendo uno o dos nuevos conceptos en cada iteración.

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

    Por último, debo decir que soy relativamente nuevo en el mundo de Bitcoin. En 2011 tuve un poco de atención, pero realmente estudié los detalles con seriedad a principios de 2013.

  • El primer paso: firmar el documento de intención

    • ¿Cómo diseñar una moneda?

      A primera vista, una moneda digital parece imposible. Supongamos que una persona que llamamos Alice tiene algunas monedas digitales 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?

      Estos son solo dos de los muchos problemas que se van a resolver con la información como moneda. En la primera edición de Infocoin, intentamos que Alice entregue una cadena como dinero, y pensamos en una manera de protegerla de ser falsificada. Supongamos que Alice va a dar una infocoin a otra persona, Bob.

      Este método no es muy conocido, 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ó. Nadie más puede producir el resultado de esa firma. (Esta firma solo puede ser generada por la clave privada que Alice tiene, por lo que el principio es la firma digital mencionada anteriormente), por lo que Alice no puede decir que no, no le di a Bob el infocoin.

      Todavía no he dicho exactamente qué es el dinero en este protocolo. Lo que está claro es que el dinero es el mensaje en sí mismo. Es decir, la serie de firmas representa un personaje que mi madre, Alice, va a dar a Bob.

  • El número de serie para dar una identificación única a la moneda

    El problema de nuestra primera versión de Infocoin es que Alice puede enviar repetidamente a Bob el mismo mensaje firmado. Supongamos que Bob recibe 10 mensajes como: "Me, Alice, quiero darle a Bob un infocoin". ¿Es que Alice le dio a Bob 10 infocoins diferentes?

    Lo que queremos es que el infocoin tenga una identificación única. Necesita una etiqueta o un número de serie. Alice puede firmar en el mensaje que Alice quiere dar a Bob un infocoin con el número de serie 8740348.

    Para que esto funcione, debemos tener 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 el infocoin, registrará quién tiene qué infocoin y verificará la autenticidad de la transacción.

    Más en detalle, supongamos que Alice va a un banco y dice: "Oh, voy a sacar un infocoin de mi cuenta"; el banco le quita un infocoin de su cuenta, y le da un nuevo número de serie que nunca ha usado, supongamos que es 1234567. Entonces, cuando Alice quiere enviarle un infocoin a Bob, ella me firma este nuevo mensaje diciendo: "Alice va a darle a Bob un infocoin con el número de serie 1234567"; pero Bob no solo acepta el infocoin, sino que también se pone en contacto con el banco para confirmar dos cosas: primero, que el infocoin con el número de serie 1234567 realmente pertenece a Alice; y segundo, que Alice no ha gastado ese infocoin; y luego los registros del banco lo actualizan para mostrar que ese infocoin pertenece a Bob y no a Alice.

  • Que todos sean bancos.

    La solución anterior parece tener mucho potencial. Sin embargo, podemos hacer cosas más ambiciosas. Podemos eliminar a los bancos del acuerdo. Esto cambia drásticamente las propiedades de la moneda. Esto significa que no habrá una organización separada a cargo de la moneda.

    El método es que todos cooperen para ser bancos. En particular, supongamos que cada persona que usa el infocoin mantiene un registro completo, que incluye a quién pertenece el infocoin. Puedes imaginarlo como un libro público compartido, que registra los registros de transacciones de todos los infocoins.

    Ahora, supongamos que Alice quiere dar un infocoin a Bob. Ella me dice que Alice quiere firmar un infocoin para Bob con el número de serie 1234567. Y luego expide el mensaje firmado a Bob, Bob puede verificarlo con su propia cadena de bloques. OK, es cierto que ese infocoin es el que Alice me dio.

    Todavía tenemos el problema de dónde viene el código de la secuencia, 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 gaste repetidamente su infocoin. Ella puede publicar un mensaje firmado para que Alice le dé a Bob un código de la secuencia 1234567, y también puede publicar un mensaje firmado para que Alice le dé a Charlie un código de la secuencia 1234567. Bob y Charlie usan su propia blockchain para verificar que el infocoin realmente fue enviado por Alice.

    Llamamos a este problema el problema del doble gasto de la parrilla ("parrilla doble"), y a primera vista, parece que es difícil de lograr. Después de todo, si Alice envía el mensaje a Bob primero y luego Bob envía el mensaje a todos los demás (incluyendo a Charlie), los demás actualizan su blockchain. En este momento, Charlie no será engañado por Alice. Por lo tanto, parece que el doble gasto solo es posible en un corto período de tiempo. Sin embargo, incluso si este tiempo es corto, el problema también es indeseable.

    ¿Cómo se resuelve el problema? La forma más sencilla es que cuando Alice le envía a Bob el infocoin, Bob no debe verificar la transacción solo. En lugar de eso, debe publicar la transacción pendiente a toda la red de infocoin para que otros puedan ayudar a juzgar si la transacción es razonable. Si juntos deciden que la transacción es razonable, Bob puede aceptar la infocoin y todos pueden actualizar su blockchain.

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

    Este protocolo tiene muchos factores de incertidumbre ahora. Por ejemplo, ¿qué significa que una vez que hay suficientes personas que publican esta noticia, cuántos son suficientes? No puede ser toda la red de infocoin, ya que no sabemos de antemano quién está en la red de infocoin. Tampoco puede ser una parte fija de los usuarios.

  • Prueba de trabajo

    Supongamos que Alice quiere doblar en el protocolo anterior, y que necesita controlar toda la red de infocoin. Supongamos que usa un sistema automático para crear muchas cuentas con diferentes identidades en la red de infocoin, supongamos que hay mil millones. Como antes, ella intentó doblar y dar el mismo infocoin a Bob y Charlie, pero cuando Bob y Charlie le preguntaron a la red de infocoin para verificar la transacción, los caballos de batalla de Alice inundaron toda la red, diciéndoles a Bob y Charlie que podían pasar por la transacción y que podrían engañar a uno o ambos de ellos o aceptar la transacción.

    Hay una manera inteligente de comprobar el trabajo de los cobradores con un método llamado Proof-of-work cobradores. El método no es intuitivo y requiere una combinación de dos conceptos: 1) hacer que el proceso de verificación de transacciones cueste mucho dinero en computación; 2) recompensarlos por ayudar a comprobar 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: "Yo" y "Alice va a dar a Bob un mensaje de infocoin con el número de orden 1234567. Cuando otros en la red escuchan el mensaje, todos lo agregan a una lista de transacciones pendientes, que aún no han sido aprobadas por toda la red. Por ejemplo, una persona en la red llamada David podría tener la siguiente lista de transacciones pendientes:

    img

    David comprueba su propia blockchain y ve que las transacciones anteriores son razonables. Él quiere ayudar a difundir este mensaje de verificación a toda la red. Sin embargo, antes de eso, el protocolo de verificación de transacciones requiere que David resuelva una dificultad de cálculo llamada prueba de trabajo.

    Entonces, ¿qué tipo de problema quiere resolver David? Para explicar esto, lo incluimos en el protocolo con una función hash fija que todos conocen en la red. Bitcoin utiliza una función hash SHA-256 conocida, pero cualquier función hash criptográfica puede usarse aquí. Le damos a este grupo de transacciones pendientes una etiqueta, L, por favor, para que pueda ser citada más adelante. Este grupo de transacciones pendientes también es equivalente a un bloque dentro de la blockchain.

    img

    El problema que David va a resolver es encontrar un número aleatorio de x, y cuando agregamos este x después de L y la combinación de hash, el resultado que obtenemos comienza con varios cero iniciales. La dificultad de este problema se puede ajustar ajustando el número de cero iniciales. Una prueba de trabajo simple de hash necesita solo 3 o 4 hashes iniciales de cero, una prueba de trabajo difícil de hash puede necesitar más hashes iniciales de cero, por ejemplo, 15 ceros consecutivos.

    Y esto no funciona cuando x es igual a 1.

    img

    Y luego vamos a tratar de x es igual a 2, y luego x es igual a 3, 4, 5... y finalmente, cuando encontramos x es igual a 4350, obtenemos

    img

    Este número aleatorio de x nos da un resultado que es un hash de cuatro cero iniciales. Esto es suficiente para resolver un simple problema de prueba de hash de trabajo de hash.

    Lo que dificulta este problema es que el resultado de la función de hash de código es siempre aleatorio, y cualquier cambio mínimo en el valor de la entrada será completamente diferente del resultado de la función de hash entera, por lo que es difícil de predecir. Así que si necesitamos que el resultado de la salida comience con 10 ceros, David necesitará en promedio 1610 ≈ 1012 diferentes x para encontrar el valor adecuado.

    Obviamente, podemos controlar la dificultad de la prueba de trabajo al especificar cuántos ceros se requieren. De hecho, el protocolo de Bitcoin tiene un mejor control de la dificultad de la prueba de trabajo al modificar ligeramente la prueba de trabajo anterior. Ya no se especifica cuántos ceros iniciales se requieren, sino que el resultado del hash del bloque es menor o igual a un objetivo, que se ajusta automáticamente para garantizar que cada bloque de Bitcoin tenga un promedio de 10 minutos para resolver.

    Bien, supongamos que David es afortunado y encuentra una x adecuada (nonce), felicítalo! (él será recompensado por encontrar esta respuesta). Él publicará que ha demostrado que las transacciones en el bloque son válidas, y al mismo tiempo publicará el valor de x que encontró, y los otros participantes en el infocoin pueden demostrar que la prueba de trabajo de x es válida.

    Para que el programa funcione, los participantes de la red deberían necesitar un mecanismo de incentivos para ayudar a verificar las transacciones. Sin el incentivo, nadie estaría dispuesto a gastar su computadora para ayudar a verificar las transacciones. Si los participantes de la red no están dispuestos a gastar la computadora, el sistema no funcionará. Por lo tanto, podemos recompensar a cualquier persona que haya verificado las transacciones con éxito dándoles algunas formas de infocoin.

    En el protocolo de Bitcoin, este proceso de verificación se conoce como "mining" o "minería"; en ese momento, los ganadores de cada bloque de transacción recibirán bitcoins como recompensa. En un principio, el premio será de 50 bitcoins por cada 210.000 bloques verificados (es decir, aproximadamente cada 4 años), pero la recompensa se reducirá a la mitad. Hasta ahora, esto ha ocurrido solo una vez, es decir, ahora la recompensa obtenida por la verificación de un bloque es de 25 bitcoins. El proceso de reducción a la mitad continuará hasta aproximadamente 2140; entonces, la recompensa de la minería se reducirá a 10-8 bitcoins.

    Puedes ver la prueba de trabajo como un proceso de comprobación de transacciones competitivas. Cada participante gasta una parte del poder de cálculo de la computadora. Las probabilidades de que un minero gane son aproximadamente iguales a la proporción entre el tamaño del poder de cálculo que controla y el poder de cálculo de la red entera. Por ejemplo, si un minero controla un por ciento del poder de cálculo de la red entera, entonces su probabilidad de ganar es aproximadamente un por ciento.

    Por supuesto, aunque haya muy pocas posibilidades de que mineros deshonestos destruyan toda la blockchain, no tenemos la confianza suficiente para usarla como moneda.

    Voy a analizar el problema de las dos flores de inmediato, pero antes de eso, quiero añadir un detalle importante en el concepto de Infocoin. Idealmente, esperamos que la red Infocoin pueda unificar el orden en que ocurren las transacciones. Si no tenemos un orden uniforme, entonces no está muy claro quién tiene qué infocoin en un momento determinado. Para ayudar a resolver esto, pedimos que el nuevo bloque tenga que contener un puntero hacia arriba, que en realidad es el resultado del hash de un bloque.

    img

    En casos fortuitos, se generan ramificaciones en una cadena de bloques. Esto se debe a que, a veces, dos mineros verifican transacciones de bloques casi al mismo tiempo. Se publican al mismo tiempo en la red, algunos actualizan su cadena de bloques de una manera y otros de otra.

    img

    Esto crea una situación que queremos evitar: en este caso, el orden de las transacciones no está claro, y tampoco se sabe quién tiene qué infocoin. Afortunadamente, hay una forma sencilla de mover las ramas. La regla es la siguiente: si se produce una situación de ramas, la gente en la red continúa manteniendo dos ramas, y en cualquier caso, los mineros solo trabajan en la cadena de bloques más larga.

    Supongamos que tenemos una rama, algunos mineros reciben primero el bloque A, y otros mineros reciben primero el bloque B. Los mineros que reciben el bloque A continuarán minando a lo largo de su rama, mientras que otros minarán a lo largo de la rama del bloque B. Supongamos que los mineros en la rama B excavan con éxito el siguiente bloque:

    img

    Cuando reciben este mensaje, la gente en la rama A se da cuenta de que la rama B es la más larga ahora, por lo que se transfiere a la rama B. El trabajo en la rama A se detiene rápidamente, por lo que todo el mundo trabaja en el mismo orden en la cadena de bloques. Entonces el bloque A se ignora. Por supuesto, todas las transacciones pendientes en el bloque A se mantienen pendientes y luego se colocan en el nuevo bloque en la rama B, por lo que todas las transacciones finalmente se verifican.

    Del mismo modo, si el minero en la rama A excava el siguiente bloque primero, 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) existe en el bloque en la rama más larga y 2) al menos 5 bloques verificados se verifican después de ella. En este caso, decimos que la transacción tiene 6 confirmaciones.

    Ahora que entendemos el orden de tiempo, volvemos a pensar qué pasaría si una persona deshonesta quisiera gastar dos veces. Supongamos que Alice le da al mismo tiempo a Bob y Charlie la misma transacción. Una posibilidad es que ella verifique un bloque con dos transacciones al mismo tiempo. Supongamos que ella tiene el uno por ciento de capacidad de cálculo, entonces es probable que tenga más suerte de verificar este bloque.

    Pero otra posibilidad es que ella intente publicar dos transacciones por separado. Ella puede publicar una transacción para una parte de los mineros y otra para otra parte de los mineros, y ella quiere que ambas transacciones sean verificadas. Afortunadamente, en este caso, como acabamos de decir, la red finalmente confirma solo una de las transacciones.

    Otra posibilidad es que Alice = Bob, es decir, que Alice intenta dar una moneda a Charlie, y que ella también se la da a sí misma, ya que ella misma puede tener varias cuentas. En este caso, la estrategia de Alice es esperar hasta que Charlie acepte el Infocoin, es decir, probablemente después de que la transacción se confirme 6 veces en la cadena de bloques más larga.

    img

    Por desgracia, a esta altura, Alice está 6 pasos más tarde que la cadena de bloques más larga. Ella tiene dificultades para 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 los demás en la red cuando se demuestre su capacidad de resolución (es decir, probablemente tenga más del 50% de la capacidad de cálculo de la red entera).

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

    En la segunda parte, el autor Michael deja de lado el concepto de Infocoin para explicar el protocolo de Bitcoin en más detalle a través de la visión de la transacción de Bitcoin.

    Además, si te parece útil, sugiero que le des un consejo al autor original de este artículo, Michael Nielsen, su dirección es 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ, también puedes seguirlo en Twitter.

En la actualidad, la mayoría de las personas no tienen acceso a la información.


Más.