¿Por qué un adversario tiene que controlar el 50 % de la potencia informática para duplicar el gasto?

Si las transacciones en un bloque son válidas, para agregar ese bloque en la cadena de bloques, se debe encontrar una prueba de trabajo. He leído el artículo de bitcoin de Satoshi.

Si la dificultad de la prueba de trabajo requiere, digamos, 2^52 cálculos (13 ceros hexadecimales) en promedio, y dado que cada nodo de la red funciona de forma independiente, ¿por qué el poderoso adversario no puede superar la longitud de la cadena de bloques actual y presentar su versión de cadena de bloques a la red? Específicamente, ¿por qué el atacante tiene que controlar el 1 por ciento o el x por ciento de la potencia computacional de la red, cuando los nodos honestos de la red no están trabajando en colaboración para encontrar la prueba de trabajo?

Si el adversario puede encontrar una prueba de trabajo más rápido que el homólogo honesto más poderoso, puede calcular una cadena de bloques más larga y transmitirla a la red.

Supongamos que hay 2 ^ 20 nodos en la red, cada uno de los cuales calcula 2 ^ 40 hashes por segundo en promedio. Luego, cada nodo requeriría 68 minutos para encontrar una prueba de trabajo (probando 2^52 hashes). La potencia informática total de la red es número de nodos * potencia informática de cada nodo = 2^20*2^40 = 2^60.

Si el adversario opera a la velocidad de 2^45 hashes por segundo, necesita solo 2^7 = 2 min para encontrar una prueba de trabajo (2^52 hashes).

Ahora, la potencia informática de la red es 2^60, sin embargo, cada nodo está tratando de encontrar una prueba de trabajo de forma independiente. La potencia informática del adversario en comparación con la red es 32.000 veces menor. La cantidad de poder de cómputo controlado por el adversario es 1/32000 = 0.00001%, pero aun así puede calcular la cadena de bloques más larga.

Por favor, ayuda, si estoy asumiendo que algo está mal aquí. Los nodos honestos de la red no funcionan en colaboración. Por lo tanto, el atacante no necesita controlar el 50 % de la potencia de cómputo en la red y tiene que gastar potencia de cómputo un poco más que la potencia de cómputo promedio de los nodos honestos.

2^12 es 4096, por lo que cada computadora con 2^40 hashes por segundo requeriría 68 minutos, no 16.
De acuerdo, ¿puedes responder la pregunta?
Me quedé un poco marginado en el medio, pero lo acabo de hacer. :)
Concepto erróneo: "Si el adversario puede encontrar una prueba de trabajo más rápido que el compañero honesto más poderoso, puede calcular una cadena de bloques más larga y transmitirla a la red". debería ser: "más rápido que TODOS los compañeros honestos combinados".
Probablemente ya haya respondido a continuación, pero "Los nodos honestos en la red no funcionan en colaboración". sí, en realidad lo hacen. Esa es la belleza de PoW. :)
@Jannes: Sí, he abordado ambos puntos en mi respuesta. :)
@Murch Sí, debería haber leído la respuesta primero. Genial (otra vez). Ya votado. Gracias.
Cada nodo en la red está trabajando con diferentes entradas a una función hash pero tratando de lograr el mismo objetivo. Entonces, de alguna manera, todos los nodos están trabajando juntos.

Respuestas (2)

Hay dos suposiciones en su pregunta que no son completamente correctas.

1) Cada nodo requeriría 68 minutos para encontrar una prueba de trabajo (probar 2^52 hashes).

El proceso de encontrar un nuevo bloque no es una tarea lineal de trabajo que deba acumularse. Más bien es un proceso aleatorio. En lugar de un montón de trabajo por el que estás pasando que tiene un tamaño fijo, podrías considerarlo como una lotería: cada intento puede ganar , pero en promedio se necesitan 2^52 intentos para ganar. Esta distinción es muy importante, porque…

2) Los nodos honestos de la red no trabajan en colaboración.

…¡permite que la red colabore sin coordinarse!
Cada entidad minera está tratando de confirmar un bloque diferente . Esto es así, porque cada uno está tratando de reclamar la recompensa del bloque por sí mismo, por lo tanto, al menos una transacción, la transacción coinbase , debe diferir.¹
Entonces, dado que hemos establecido que estamos viendo un proceso aleatorio, y todos están trabajando en diferentes datos, nos damos cuenta de que los nodos honestos no están duplicando el trabajo de los demás. Por lo tanto, todos los nodos honestos están pasando por muchas más entradas juntas que el adversario y, de hecho, están colaborando para encontrar un nuevo bloque.
Como cpast ha señalado en los comentarios., también es muy importante darse cuenta de que nadie pierde el progreso al cambiar. Por lo tanto, solo se pierde el tiempo que el bloque requiere para propagarse a través de la red, y todos cambiarán al nuevo bloque con el que acaban de encontrar como padre tan pronto como lo reciban. Finalmente, esto significa que necesitamos comparar el poder de minería de la red honesta con el poder de minería del adversario para ver quién puede crear la cadena mayor. Y como tú mismo has dicho, con tus números ejemplares la red es 2^15 veces más poderosa que el adversario.

¹ Además, pueden trabajar con diferentes conjuntos de transacciones, las transacciones estarán en un orden diferente para diferentes mineros, la marca de tiempo cambia cada segundo y agregan más datos aleatorios para probar diferentes entradas.

¿La probabilidad de encontrar una prueba de trabajo para cualquier bloque, donde cada nodo está trabajando en un bloque diferente, es equivalente a la probabilidad de encontrar una prueba de trabajo para el bloque dado, cada nodo trabajando en el mismo bloque pero con un nonce diferente?
SHA-256 es un algoritmo hash criptográfico. Eso significa que nadie puede predecir qué entradas conducirán a un hash exitoso. Especialmente, es irrelevante cuán grande es el cambio entre dos entradas, ya que sus salidas no tienen una relación reconocible entre sí. Por lo tanto, no importa lo que cambie en la entrada siempre que haya algún cambio. Entonces, siempre que nadie duplique las mismas entradas, trabajar en diferentes bloques o diferentes nonces es equivalente.
Finalmente lo tengo.
Acabo de descubrir el curso en línea de Princeton " Introducción a las criptomonedas y las criptomonedas ", que cubre las funciones criptográficas de hash y las colisiones en los primeros minutos. Parece que se está acumulando como prueba de trabajo, pero tengo que irme a trabajar ahora. ;)

Porque es irrelevante cuánto tiempo le toma a un nodo honesto individual extraer un bloque. Los nodos honestos funcionan de forma independiente, pero si alguno de ellos extrae un bloque, todos pasan al siguiente bloque. No todos los nodos intentan lo mismo; cada uno de los 2^20 nodos honestos busca diferentes valores hash, por lo que mientras un nodo individual solo tiene éxito cada 16 minutos en promedio, alguien tendrá suerte y tendrá éxito después de una minúscula fracción de segundo (por ejemplo, hay un 1/16 posibilidad de que un minero honesto tenga éxito en el primer minuto, por lo que con 16 mineros honestos esperaría que alguien tuviera éxito en ese momento).

pero si un nuevo bloque es extraído con éxito por algún nodo honesto, se agrega a la cadena de bloques y, por lo tanto, todos los nodos honestos deben considerar esto calculando su hash e incluyéndolo en el. Por lo tanto, para los nodos honestos, la prueba de trabajo comienza nuevamente desde cero debido al orden de los bloques en la cadena de bloques. El atacante, por otro lado, puede extraer, digamos, 5-6 bloques en 10 minutos y transmitirlos a la red, formando así la cadena más larga.
Pero la cadena honesta extrae otro bloque en otra fracción de segundo. Cada hash tiene la misma probabilidad de ser válido, pero los honestos obtienen 32.000 hashes frente al malo. La "prueba de trabajo" no es algo en lo que progresas y luego tienes que empezar de nuevo, es algo en lo que es probable que obtengas un hash válido en el minuto 1 como en el minuto 60.
Además, el atacante tiene que aumentar su cadena de bloques cuando extrae un bloque; incluso si "comenzar desde cero" fuera algo, el atacante también tendría que hacerlo.
Entiendo que todos los nodos de la red no intentan lo mismo. pero digamos que un nodo A honesto encuentra una prueba de trabajo para un bloque y la transmite a la red. Si se encuentra una prueba de trabajo válida, todos los pares en la red lo confirman agregando ese bloque a la cadena de bloques. Dado que los bloques en la cadena de bloques están ordenados, los pares deben incluir el hash del bloque recién incluido en su prueba de trabajo y el cálculo comienza nuevamente desde cero. ¿Me equivoco? Además, asumo que el atacante está trabajando de forma independiente y extrae 6 bloques nuevos y los transmite juntos en la red.
Además, cada bloque debe agregarse una vez cada 10 minutos en promedio. De lo contrario, se incrementa la dificultad de la prueba de trabajo. ¿Cómo es que una fracción de segundo es suficiente para extraer un bloque?
@Curious Una consecuencia de 2^20 personas que pueden extraer un bloque cada 16 minutos significa que se extrae un bloque cada 2^-16 minutos, o más de 64k extraídos por minuto. Tus números son los que llevaron a eso.
Entonces, la fuerza se debe a que cada nodo honesto en la red está trabajando de forma independiente en diferentes bloques (diferentes transacciones) para encontrar una prueba de trabajo. Si cada nodo honesto trabaja en el mismo bloque (las mismas transacciones), en este caso, ¿el atacante puede explotar su rápido poder de cómputo?
Creo que he entendido tu punto. Pero la red bitcoin extrae cada bloque en 10 minutos en promedio. Entonces, qué difícil debe ser la prueba de trabajo para lograr esto. ¿También depende del número de nodos en la red?
Y pareces malinterpretar la minería. "Empezar de nuevo" no tiene sentido, porque no tienes un trabajo significativo atado a tus esfuerzos fallidos. La minería es como la lotería; cada hash es un ticket. El hecho de que hayas comprado un montón de billetes perdedores no significa que estés a punto de conseguir uno ganador; cuando pasan a la siguiente serie de boletos, no pierde ningún valor que haya almacenado en los boletos perdedores anteriores, porque de todos modos no tenían valor.
Sí, la dificultad aumenta de modo que esperaría que un hash (número calculado en diez minutos por toda la red) sea válido. Y el atacante no puede trabajar con el mismo bloque (cuando lo extrae, también tiene que agregar un bloque, seis hashes de un bloque no equivalen a seis bloques), pero también extrajo muchos menos bloques que la red honesta (que extrajo decenas de miles antes de obtener uno).
¿La dificultad también depende del número de nodos en la red? Entonces, básicamente, la probabilidad de encontrar una prueba de trabajo válida en un momento dado es la suma de la probabilidad de todos los nodos en la red.
¿La probabilidad de encontrar una prueba de trabajo para cualquier bloque, donde cada nodo está trabajando en un bloque diferente, es equivalente a la probabilidad de encontrar una prueba de trabajo para el bloque dado, cada nodo trabajando en el mismo bloque pero con un nonce diferente?