Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org
Resumen Una versión puramente peer-to-peer de dinero electrónico permitiría en línea pagos para ser enviados directamente de una parte a otra sin pasar por un institución financiera. Las firmas digitales proporcionan parte de la solución, pero la principal los beneficios se pierden si todavía se requiere un tercero de confianza para evitar el doble gasto. Proponemos una solución al problema del doble gasto utilizando una red peer-to-peer. La red marca el tiempo de las transacciones mezclándolas en una cadena continua de prueba de trabajo basada en hash, formando un registro que no se puede cambiar sin rehacer la prueba de trabajo. La cadena más larga no sólo sirve como prueba de la secuencia de eventos presenciados, pero prueba de que provino del grupo más grande de potencia de CPU. Como siempre que la mayoría de la potencia de la CPU esté controlada por nodos que no están cooperando para atacan la red, generarán la cadena más larga y superarán a los atacantes. El La red en sí misma requiere una estructura mínima. Los mensajes se transmiten en un mejor esfuerzo base, y los nodos pueden salir y volver a unirse a la red a voluntad, aceptando el más largo cadena de prueba de trabajo como prueba de lo que sucedió mientras no estaban.
Bitcoin: A Peer-to-Peer Electronic Cash System
Este documento es considerado como la piedra angular de la criptomoneda y su impacto en la comunidad ha sido enorme.
El white paper de Bitcoin describe el funcionamiento del sistema de criptomoneda, incluyendo su tecnología subyacente, su seguridad y su capacidad para permitir transacciones financieras sin intermediarios. Además, este documento ha sido fundamental para el desarrollo y crecimiento de la comunidad Bitcoin.
Si estás interesado en aprender más sobre Bitcoin y cómo funciona, te recomiendo que leas este white paper. Es una lectura esencial para cualquier persona que quiera entender cómo funciona esta criptomoneda revolucionaria.
¡No te pierdas esta oportunidad de aprender más sobre Bitcoin en español! Descarga el white paper hoy mismo y comienza a explorar el mundo de las criptomonedas.
1. Introducción
El comercio en Internet ha llegado a depender casi exclusivamente de las instituciones financieras que actúan como terceros de confianza para procesar pagos electrónicos. Si bien el sistema funciona lo suficientemente bien para la mayoría de las transacciones, todavía adolece de las debilidades inherentes del modelo basado en la confianza. Las transacciones completamente irreversibles no son realmente posibles, ya que las instituciones financieras no pueden evitar la mediación de disputas. El costo de la mediación aumenta los costos de transacción, limitando la tamaño mínimo práctico de transacción y eliminando la posibilidad de pequeñas transacciones casuales, y existe un costo más amplio en la pérdida de la capacidad de realizar pagos irreversibles por servicios irreversibles. Con la posibilidad de reversión, se extiende la necesidad de confianza. Los comerciantes deben tenga cuidado con sus clientes, acosándolos para obtener más información de la que de otro modo necesitarían. Un cierto porcentaje de fraude se acepta como inevitable. Estos costos e incertidumbres de pago se puede evitar en persona mediante el uso de moneda física, pero no existe ningún mecanismo para realizar pagos a través de un canal de comunicaciones sin una parte de confianza. Lo que se necesita es un sistema de pago electrónico basado en prueba criptográfica en lugar de confianza, Permitir que dos partes dispuestas realicen transacciones directamente entre sí sin la necesidad de un confiable tercero. Las transacciones que no son computacionalmente prácticas para revertir protegerían a los vendedores contra el fraude, y los mecanismos de custodia de rutina podrían implementarse fácilmente para proteger a los compradores. En En este artículo, proponemos una solución al problema del doble gasto utilizando un sistema distribuido peer-to-peer. servidor de sellos de tiempo para generar pruebas computacionales del orden cronológico de las transacciones. El El sistema es seguro siempre que los nodos honestos controlen colectivamente más potencia de CPU que cualquier otro. grupo cooperante de nodos atacantes.
2. Transacciones
Definimos una moneda electrónica como una cadena de firmas digitales. Cada propietario transfiere la moneda al siguiente firmando digitalmente un hash de la transacción anterior y la clave pública del próximo propietario y añadiéndolos al final de la moneda. Un beneficiario puede verificar las firmas para verificar la cadena de propiedad.
El problema, por supuesto, es que el beneficiario no puede verificar que uno de los propietarios no haya gastado dos veces la moneda. Una solución común es introducir una autoridad central de confianza, o casa de moneda, que controle cada transacción por doble gasto. Después de cada transacción, la moneda debe devolverse a la casa de la moneda para emitir una nueva moneda, y solo se confía en que las monedas emitidas directamente desde la casa de la moneda no se gasten dos veces.
El problema con esta solución es que el destino de todo el sistema monetario depende de la empresa que dirige la casa de la moneda, y cada transacción tiene que pasar por ellos, al igual que un banco. Necesitamos una manera para que el beneficiario sepa que los dueños anteriores no firmaron antes actas. Para nuestros propósitos, la primera transacción es la que cuenta, por lo que no nos importa sobre intentos posteriores de gastar dos veces. La única manera de confirmar la ausencia de una transacción es estar al tanto de todas las transacciones. En el modelo basado en la casa de la moneda, la casa de la moneda estaba al tanto de todas las transacciones y decidía cuál llegaba primero. Para lograr esto sin una parte confiable, las transacciones deben ser anunciado públicamente [1], y necesitamos un sistema para que los participantes acuerden una sola historia de la orden en que fueron recibidos. El beneficiario necesita prueba de que en el momento de cada transacción, el la mayoría de los nodos acordaron que fue el primero recibido.
3. Servidor de marca de tiempo
La solución que proponemos comienza con un servidor de marca de tiempo. Un servidor de marca de tiempo funciona tomando una hash de un bloque de elementos a los que se les marcará la hora y publicar ampliamente el hash, como en un periódico o publicación de Usenet [2-5]. La marca de tiempo prueba que los datos deben haber existido en el tiempo, obviamente, para entrar en el hachís. Cada marca de tiempo incluye la marca de tiempo anterior en su hash, formando una cadena, con cada marca de tiempo adicional reforzando las anteriores.
4. Prueba de Trabajo
Para implementar un servidor de marca de tiempo distribuido de igual a igual, necesitaremos usar un sistema de prueba de trabajo similar al Hashcash de Adam Back [6], en lugar de publicaciones en periódicos o Usenet. La prueba de trabajo consiste en buscar un valor que, cuando se codifica, como con SHA-256, el hash comienza con un número de bits cero. El trabajo promedio requerido es exponencial en el número de cero bits necesarios y se puede verificar mediante la ejecución de un solo hash. Para nuestra red de marca de tiempo, implementamos la prueba de trabajo incrementando un nonce en el block hasta que se encuentre un valor que le dé al hash del bloque los bits cero requeridos. Una vez que la CPU se ha realizado un esfuerzo para que satisfaga la prueba de trabajo, el bloque no se puede cambiar sin rehacer el trabajo. Como los bloques posteriores se encadenan después de él, el trabajo para cambiar el bloque incluiría rehacer todos los bloques después de él.
La prueba de trabajo también resuelve el problema de determinar la representación en la decisión mayoritaria. haciendo. Si la mayoría se basara en una dirección IP, un voto, cualquiera podría subvertirla capaz de asignar muchas direcciones IP. La prueba de trabajo es esencialmente una CPU, un voto. La mayoría la decisión está representada por la cadena más larga, que tiene el mayor esfuerzo de prueba de trabajo invertido en eso. Si la mayoría de la potencia de la CPU está controlada por nodos honestos, la cadena honesta crecerá más rápido y superar a cualquier cadena competidora. Para modificar un bloque anterior, un atacante tendría que rehacer la prueba de trabajo del bloque y todos los bloques posteriores y luego ponerse al día y superar el trabajo de los nodos honestos. Más adelante mostraremos que la probabilidad de que un atacante más lento lo alcance disminuye exponencialmente a medida que se agregan bloques posteriores. Para compensar el aumento de la velocidad del hardware y el interés variable en ejecutar nodos a lo largo del tiempo, la dificultad de la prueba de trabajo está determinada por un promedio móvil dirigido a un número promedio de bloques por hora. Si se generan demasiado rápido, la dificultad aumenta.
5. Red
Los pasos para hacer funcionar la red son los siguientes:
- Las nuevas transacciones se transmiten a todos los nodos.
- Cada nodo recopila nuevas transacciones en un bloque.
- Cada nodo trabaja para encontrar una prueba de trabajo difícil para su bloque.
- Cuando un nodo encuentra una prueba de trabajo, transmite el bloque a todos los nodos.
- Los nodos aceptan el bloque solo si todas las transacciones en él son válidas y aún no se han gastado.
- Los nodos expresan su aceptación del bloque trabajando en la creación del siguiente bloque en el cadena, usando el hash del bloque aceptado como el hash anterior.
Los nodos siempre consideran que la cadena más larga es la correcta y seguirán trabajando en ella. extenderlo. Si dos nodos transmiten versiones diferentes del siguiente bloque simultáneamente, algunos los nodos pueden recibir uno u otro primero. En ese caso, trabajan en el primero que recibieron, pero guarde la otra rama en caso de que se haga más larga.
El empate se romperá cuando se encuentre la siguiente prueba de trabajo y una rama se vuelva más larga; los nodos que estaban trabajando en el otro La rama luego cambiará a la más larga. No es necesario que las transmisiones de transacciones nuevas lleguen a todos los nodos. mientras alcancen muchos nodos, entrarán en un bloque en poco tiempo. Las transmisiones en bloque también toleran las caídas mensajes Si un nodo no recibe un bloque, lo solicitará cuando reciba el siguiente bloque y se da cuenta de que se perdió uno.
6. Incentivo
Por convención, la primera transacción en un bloque es una transacción especial que inicia una nueva moneda de propiedad por el creador del bloque. Esto agrega un incentivo para que los nodos admitan la red y proporciona una forma de distribuir inicialmente monedas en circulación, ya que no existe una autoridad central para emitirlas. La adición constante de una cantidad constante de monedas nuevas es análoga a los mineros de oro que gastan recursos para añadir oro a la circulación. En nuestro caso, lo que se gasta es tiempo de CPU y electricidad.
El incentivo también se puede financiar con tarifas de transacción. Si el valor de salida de una transacción es menos que su valor de entrada, la diferencia es una tarifa de transacción que se agrega al valor de incentivo de el bloque que contiene la transacción. Una vez que haya ingresado un número predeterminado de monedas circulación, el incentivo puede pasar completamente a tarifas de transacción y ser completamente inflación gratis.
El incentivo puede ayudar a alentar a los nodos a permanecer honestos. Si un atacante codicioso es capaz de reunir más potencia de CPU que todos los nodos honestos, tendría que elegir entre usarla para defraudar a la gente robándole sus pagos o usándolos para generar nuevas monedas. el deberia encuentra más rentable seguir las reglas, reglas que lo favorecen con más monedas nuevas que todos los demás combinados, que socavar el sistema y la validez de su propia riqueza.
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 se puede descartar para ahorrar espacio en disco. Para facilitar esto sin romper el hash del bloque, las transacciones se codifican en un Merkle Tree [7][2][5], con solo la raíz incluida en el hash del bloque. Luego, los bloques viejos se pueden compactar cortando las ramas del árbol. Los hashes interiores hacen no necesita ser almacenado.
Un encabezado de bloque sin transacciones sería de unos 80 bytes. Si suponemos que los bloques son generado cada 10 minutos, 80 bytes * 6 * 24 * 365 = 4,2 MB por año. Con sistemas informáticos vendiendo típicamente con 2 GB de RAM a partir de 2008, y la ley de Moore predice el crecimiento actual de 1,2 GB por año, el almacenamiento no debería ser un problema incluso si los encabezados de los bloques deben mantenerse en memoria
8. Verificación de pago simplificada
Es posible verificar los pagos sin ejecutar un nodo de red completo. Un usuario solo necesita mantener una copia de los encabezados de bloque de la cadena de prueba de trabajo más larga, que puede obtener consultando nodos de red hasta que esté convencido de que tiene la cadena más larga y obtenga la rama de Merkle vinculando la transacción al bloque en el que está marcada. No puede verificar la transacción para él mismo, pero al vincularlo a un lugar en la cadena, puede ver que un nodo de la red lo ha aceptado, y los bloques agregados después confirman que la red lo ha aceptado.
Como tal, la verificación es confiable siempre que los nodos honestos controlen la red, pero es más vulnerable si la red es dominada por un atacante. Si bien los nodos de la red pueden verificar transacciones por sí mismos, el método simplificado puede ser engañado por un atacante fabricado transacciones mientras el atacante pueda continuar dominando la red. Una estrategia para protegerse contra esto sería aceptar alertas de los nodos de la red cuando detectan un bloque, solicitando al software del usuario que descargue el bloque completo y las transacciones alertadas a confirmar la inconsistencia. Las empresas que reciben pagos frecuentes probablemente todavía querrán ejecutar sus propios nodos para una seguridad más independiente y una verificación más rápida.
9. Combinar y dividir el valor
Aunque sería posible manejar monedas individualmente, sería difícil de manejar hacer una transacción separada por cada centavo en una transferencia. 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 entradas múltiples 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 hubiera, al remitente. Cabe señalar que fan-out, donde una transacción depende de varias transacciones, y esas Las transacciones dependen de muchos más, no es un problema aquí. Nunca existe la necesidad de extraer un copia independiente completa del historial de una transacción
10. Privacidad
El modelo bancario tradicional logra un nivel de privacidad al limitar el acceso a la información al partes involucradas y el tercero de confianza. La necesidad de anunciar todas las transacciones públicamente. excluye este método, pero aún se puede mantener la privacidad interrumpiendo el flujo de información en otro lugar: manteniendo las claves públicas anónimas. El público puede ver que alguien está enviando una cantidad a otra persona, pero sin información que vincule la transacción a nadie. Esto es similar al nivel de información publicado por las bolsas de valores, donde el tiempo y el tamaño de las operaciones individuales, la «cinta», se hace pública, pero sin decir quiénes eran las partes.
Como firewall adicional, se debe usar un nuevo par de claves para cada transacción para mantenerlas de estar vinculado a un propietario común. Algunos enlaces siguen siendo inevitables con entradas múltiples transacciones, que necesariamente revelan que sus insumos eran propiedad del mismo propietario. El riesgo es que si se revela el propietario de una clave, la vinculación podría revelar otras transacciones que pertenecían a el mismo dueño.
11. Cálculos
Consideramos el escenario de un atacante que intenta generar una cadena alternativa más rápido que el honesto cadena. Incluso si esto se logra, no deja el sistema abierto a cambios arbitrarios, como como crear valor de la nada o tomar dinero que nunca perteneció al atacante. Los nodos son no aceptará una transacción no válida como pago, y los nodos honestos nunca aceptarán un bloque conteniéndolos. Un atacante solo puede intentar cambiar una de sus propias transacciones para recuperar dinero que gastó recientemente. La carrera entre la cadena honesta y la cadena atacante se puede caracterizar como un Binomial Caminata aleatoria. El evento de éxito es la cadena honesta que se extiende en un bloque, aumentando su liderado por +1, y el evento de falla es que la cadena del atacante se extiende por un bloque, reduciendo el brecha por -1. La probabilidad de que un atacante se ponga al día con un déficit dado es análoga a la de un jugador. Problema de ruina. Supongamos que un jugador con crédito ilimitado comienza con un déficit y juega potencialmente un número infinito de ensayos para tratar de alcanzar el punto de equilibrio. Podemos calcular la probabilidad de que alguna vez alcance el punto de equilibrio, o que un atacante alguna vez alcance la cadena honesta, de la siguiente manera [8]:
p = probabilidad de que un nodo honesto encuentre el siguiente bloque
q = probabilidad de que el atacante encuentre el siguiente bloque
qz = probabilidad de que el atacante lo alcance desde z cuadras atrás
Dada nuestra suposición de que p > q, la probabilidad cae exponencialmente a medida que el número de bloques El atacante tiene que ponerse al día con los aumentos. Con las probabilidades en su contra, si no tiene suerte se lanza hacia adelante desde el principio, sus posibilidades se vuelven cada vez más pequeñas a medida que se queda más atrás. Ahora consideramos cuánto tiempo debe esperar el destinatario de una nueva transacción antes de ser suficientemente seguro de que el remitente no puede cambiar la transacción. Suponemos que el remitente es un atacante. que quiere hacer creer al destinatario que le pagó por un tiempo, luego cambiarlo para devolverle el pago mismo después de que haya pasado un tiempo. El receptor será alertado cuando eso suceda, pero el el remitente espera que sea demasiado tarde. El receptor genera un nuevo par de claves y entrega la clave pública al remitente poco antes firma. Esto evita que el remitente prepare una cadena de bloques con anticipación al trabajar en continuamente hasta que tenga la suerte de avanzar lo suficiente, luego ejecutar la transacción en ese momento. Una vez que se envía la transacción, el remitente deshonesto comienza a trabajar en secreto en un cadena paralela que contiene una versión alternativa de su transacción. El destinatario espera hasta que la transacción se haya agregado a un bloque y se hayan agregado z bloques. vinculado después de él. No sabe la cantidad exacta de progreso que ha hecho el atacante, pero asumiendo que los bloques honestos tomaron el tiempo promedio esperado por bloque, el potencial del atacante el progreso será una distribución de Poisson con valor esperado:
Para obtener la probabilidad de que el atacante aún pueda alcanzarlo ahora, multiplicamos la densidad de Poisson por cada cantidad de progreso que podría haber hecho por la probabilidad de que pudiera ponerse al día desde ese punto:
Reorganizando para evitar sumar la cola infinita de la distribución…
Convirtiendo a código C…
Ejecutando algunos resultados, podemos ver que la probabilidad cae exponencialmente con z
Convirtiendo a código C…
Resolviendo para P menor que 0.1%…
12. Conclusión
Hemos propuesto un sistema para transacciones electrónicas sin depender de la confianza. empezamos con el marco habitual de monedas hechas a partir de firmas digitales, que proporciona un fuerte control de propiedad, pero está incompleto sin una forma de evitar el doble gasto. Para solucionar esto, nos propuso una red peer-to-peer usando prueba de trabajo para registrar un historial público de transacciones que rápidamente se vuelve computacionalmente impráctico para que un atacante cambie si los nodos honestos controlar la mayoría de la potencia de la CPU. La red es robusta en su simplicidad no estructurada. Nodos trabajar todo a la vez con poca coordinación. No necesitan ser identificados, ya que los mensajes son no se enruta a ningún lugar en particular y solo debe entregarse con el mejor esfuerzo posible. Los nodos pueden salir y volver a unirse a la red a voluntad, aceptando la cadena de prueba de trabajo como prueba de lo que sucedió mientras no estaban. Votan con su poder de CPU, expresando su aceptación de bloques válidos trabajando en extenderlos y rechazando bloques inválidos negándose a trabajar en a ellos. Todas las reglas e incentivos necesarios se pueden hacer cumplir con este mecanismo de consenso.
Haz una Donación
Cualquier cantidad es bienvenida y nos ayudará a seguir creando contenido interesante para ti y para todos nuestros lectores.