¿Supermayoría para prevenir el ataque del 51%?

Yo pensaría que enmendar el protocolo bitcoin para requerir una gran mayoría, digamos 60% o 75%, para verificar la prueba de trabajo ayuda a reducir el riesgo de un ataque del 51%. Si esto es así, ¿cuáles son los principales obstáculos o cosas que no estoy contemplando?

Lo único que me vino a la mente de inmediato fue que aumentaría el horizonte temporal en el que se verifican la mayoría de las transacciones, lo que podría ser significativamente perjudicial para el ecosistema. ¿Qué otra cosa?

¿Puede explicar con más detalle cómo funcionaría el protocolo modificado? El ataque del 51% proviene del principio de que la rama más larga de la cadena de bloques se considera la rama válida. No veo cómo modificarías eso para obtener un número diferente.
Probablemente ayude a comprender lo que hace el ataque, y esta respuesta parece explicarlo bien: bitcoin.stackexchange.com/a/660/18253

Respuestas (5)

El ataque del 51% es un comportamiento emergente del sistema. No es porque haya un "50 %" enterrado en algún lugar del protocolo que pueda cambiarse a 60 % o 75 %. Alguien con más poder de hash que todos los demás combinados puede, con suficiente tiempo, construir siempre una cadena más larga que todos los demás.

Tenga en cuenta que aunque la gente a menudo habla de "ataques del 51 %", no existe un umbral mágico en el 50 %. Podrías hacer un ataque del 51 % con el 49 % de la potencia de hash, solo que sería un poco más difícil.
@jwg Bueno, el punto del 50% es importante. Con más del 50 % de potencia de hash, con el tiempo suficiente, tiene la garantía de crear una cadena de bloques más larga que cualquier otra persona. Por supuesto, como usted señala, todavía es posible, con pura suerte, crear una cadena más larga con menos del 50% de potencia de hash, pero no es probable.
@jwg es un umbral importante. Como dijo Svante, con más del 50% eventualmente extraerás todos los bloques tú mismo. Simplemente tienes que seguir trabajando en tu propia cadena en lugar de aceptar las encontradas por otros. Y dado el tiempo suficiente, su cadena será más larga y, por lo tanto, aceptada.
@Svante Estoy completamente en desacuerdo. Cualquiera es libre de aceptar sus propios bloqueos y negarse a aceptar los de los demás. Crear la cadena más larga requiere suerte al 49% o al 51%; es solo un poco más probable con el último.
@LucaMatteis mira mis comentarios a Svante
@jwg Lo que importa aquí es la probabilidad de que un atacante eventualmente exceda la cadena principal si comienza desde $ N $ bloques hacia atrás. Hay un 'umbral mágico' al 50 % en el sentido de que al 50 % de hashpower, esta probabilidad es del 100 % independientemente de $N$. Tiene razón en que por cada $N$, la probabilidad se acerca al 100 % a medida que el poder hash se acerca al 50 %, por lo que un atacante con incluso el 40 % del poder hash es extremadamente peligroso. Pero por debajo del 50 %, la probabilidad cae exponencialmente con $N$, por lo que en presencia de un atacante inferior al 50 %, puede estar seguro simplemente solicitando muchas (quizás decenas de miles) confirmaciones.
@jwg: A nivel de matemáticas, su afirmación no es correcta. A la larga , un atacante con el 51 % del poder de hash tiene muchas más probabilidades de crear la cadena más larga que un atacante con el 49 %. De hecho, con el tiempo suficiente, el 51 % de los atacantes está casi garantizado que obtendrá la cadena más larga, y el 49 % de los atacantes está casi garantizado que no lo hará. Esta es la ley de los grandes números , un teorema fundamental de probabilidad.
Esto está muy lejos de ser cierto, @NateEldredge, y es una aplicación completamente incorrecta de la Ley de los Grandes Números. La capacidad de bifurcar la cadena y aún tener la más larga no está relacionada con el desequilibrio neto en la cantidad de bloques creados , que es lo que te dice el LLN. Está relacionado con el número de bloques consecutivos que un agente puede crear .
@jwg: Me temo que no entiendo tu punto, entonces. Si tengo el 51% del poder de hash, puedo (eventualmente) crear más bloques que nadie y, si así lo decido, puedo vincularlos entre sí para que sean consecutivos. Eventualmente tengo una cadena, que consiste (de lo que tomé como mi altura inicial) en su totalidad de mis propios bloques, más larga que cualquier otra cadena. Una vez que lo libero, las personas pueden agregar sus propios bloques al final si quieren, pero si yo quiero, eventualmente puedo reemplazar sus bloques con una cadena más larga propia.
@NateEldredge mira mi respuesta donde he elaborado estos puntos.

David Schwartz tiene una buena respuesta.

Pero para explorar un poco más, puede pensar aproximadamente en el sistema de prueba de trabajo de Bitcoin, a largo plazo, como una elección para decidir cuál es la cadena de bloques "verdadera" y, por lo tanto, qué transacciones se reconocen como realizadas. Tal como está, cada minero obtiene un poder de voto en esta elección proporcional a su poder de hash (un hash, un voto), y el resultado está determinado por la pluralidad. Entonces, un minero que controla más de la mitad del poder de hash siempre puede ganar la elección y, como tal, es efectivamente un dictador: puede decidir qué transacciones se reconocen y cuáles no. Esto hace que sea muy fácil para ella defraudar a las personas, ya que puede realizar una transacción, cobrar los bienes y luego declarar que la transacción nunca se realizó y que todavía tiene su dinero.

Supongamos que pudiéramos idear alguna forma de cambiar la elección de una pluralidad a una mayoría calificada (aunque no me queda claro de inmediato cómo se podría lograr). Digamos que se requería una mayoría calificada del 75%. Esto tendría el beneficio de que un atacante con, digamos, el 70% del poder de hash ya no podría convertirse en un dictador.

Pero tendría el grave problema de que un atacante con solo el 30% del poder de hash podría montar un ataque de denegación de servicio simplemente votando de alguna forma contraria. Por lo tanto, evita que se logre una gran mayoría, no se pueden confirmar transacciones y todo el sistema monetario se detiene.

Supongo que este problema es inherente a cualquier sistema político que utilice una mayoría calificada (véase, por ejemplo, el Senado de los Estados Unidos). Bitcoin es un poco diferente en el sentido de que las preguntas que se votan no deben ser controvertidas: todos los votantes honestos deberían votar de la misma manera. Entonces, por diseño, la minoría no debería tener voz. Y bajo el sistema actual, no tienen voz en absoluto. Pero con una supermayoría, la minoría puede obstruir a la mayoría, y no queremos eso.

No me queda claro si esta analogía realmente funciona para Bitcoin. La "retención de votos" en particular no tiene mucho sentido, pero supongo que eso se deriva del hecho de que "requerir una mayoría calificada" tampoco tiene sentido en Bitcoin.
@BrendanLong: Puede que no lo haya expresado muy bien. Quise decir que el atacante puede negarse a votar por la cadena "correcta" (votando en su lugar por alguna cadena "incorrecta"). Entonces ninguna cadena obtiene una supermayoría y el sistema deja de funcionar. Estoy de acuerdo en que un sistema en el que esto realmente tuviera sentido se vería bastante diferente de Bitcoin.
Wow, eres un excelente maestro.

Creo que debería indicar exactamente lo que quiere decir con "51% de ataque". Si por ataque te refieres al doble gasto, el artículo original de Bitcoin de Satoshi destaca que extraer todos los bloques para ti mismo y obtener el 100 % de las recompensas trae más recompensas en lugar de intentar una reorganización para el doble envío, lo que podría perderá las recompensas y, por lo tanto, los mineros (que dejarían su grupo durante su intento sin recompensa de reorganizar la historia). Del papel:

Si un atacante codicioso puede 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 usarla para generar nuevas monedas. Debería encontrar más rentable seguir las reglas, esas reglas que lo favorecen con más monedas nuevas que todos los demás juntos, que socavar el sistema y la validez de su propia riqueza.

Esa declaración de Satoshi es, en el mejor de los casos, dudosa. Presupone que un atacante solo está interesado en la acumulación (en lugar de, por ejemplo, el vandalismo), y que tener una gran proporción de bloques recién extraídos es comparablemente deseable a tener una gran proporción de todas las monedas existentes. A medida que las monedas ya existentes se acumulan y las recompensas mineras disminuyen, esto se aleja cada vez más de la verdad.

He tratado de cuantificar bajo qué circunstancias se puede y no se puede hacer un ataque del 51% en los comentarios a una respuesta hermana, y un par de personas me ayudaron con los entresijos matemáticos. Así que pensé en escribir esto exactamente, en el mejor de los casos responderé la pregunta con un poco más de precisión de lo que se ha hecho, y en el peor de los casos haré que sea más fácil para alguien señalarme exactamente dónde me estoy equivocando.


Suponga que controla alrededor de la mitad de la potencia informática en la red y que desea atacar la red. Básicamente, hay dos formas de hacerlo:

  1. Puede retirar toda su potencia informática de la cadena de bloques no corrupta y dedicarla a su ataque.
  2. Puede continuar participando aparentemente en el hashing normal e intentar llegar a una situación que pueda explotar.

Primero discutamos la mecánica de estos, y luego veamos las matemáticas:

estrategia 1

Suponga que hay algunas transacciones de las que puede beneficiarse eliminando o agregando a la cadena de bloques, y no le importa si alguien se da cuenta de que está preparando un ataque. Para facilitarle la vida, diga que es una transacción única con una contraparte llamada Bob y que desea eliminarla. Supongamos que la transacción debe confirmarse N veces en la cadena legítima antes de que esté listo para atacar (por ejemplo, tuvo que esperar N confirmaciones antes de recibir el pago fiduciario a cambio de una transferencia de moneda).

Para crear una cadena alternativa, que se aceptará como la cadena más larga, debe retroceder N bloques, agregar un nuevo bloque con su modificación y luego agregar bloques a la cadena bifurcada, hasta que sea más larga que la cadena legítima. Le tomará O (N ^ 2) bloques para hacer esto. Mientras hace esto, publica cada bloque de la cadena bifurcada, lo que hace que toda la red conozca la bifurcación (llámese caso 1.a), o deja de publicar cualquier bloque, para que todos sepan que se ha retirado. tus recursos del hashing (llámalo caso 1.b).

1.a - Estrategia 1 con publicación

Tan pronto como haya hecho esto, estará expuesto a contramedidas, antes de llegar al número correcto de bloques. En el caso 1.a, la bifurcación será estudiada por otros actores en la red. La gente intentará resolver la bifurcación lo más rápido posible si no es intencional y detectar qué lado es malicioso si no lo es. (Las bifurcaciones cortas no intencionales se han resuelto en el pasado por acuerdo entre los principales grupos).

Ahora, Bob obviamente señalará la transacción (probablemente grande) que no está en su cadena y, por supuesto, puede señalarla igualmente como una transacción fraudulenta insertada por Bob y sus malvados compañeros. Sin embargo, tiene el hecho de que apareció en N transacciones vistas antes de que nadie se diera cuenta de cualquier bifurcación de su lado. Será difícil para usted explicar por qué no aparece en ningún bloque de su cadena; gran parte de la red debe haberlo visto, y dado que la bifurcación tiene O (N ^ 2) bloques de largo, la excusa es que no lo había hecho. t aún no ha llegado a lavar. (Un ataque menos sofisticado cuyo objetivo es destruir Bitcoin, en el que, por ejemplo, te pagas a ti mismo el dinero de todos, utilizando esta estrategia, fallará por completo en este punto).

Una vez que suficientes personas reconocen su lado de la bifurcación como el corrupto, simplemente 'marcan' un bloque en el otro lado, tal vez el que primero incluye la transacción con Bob. Esto significa que ese bloque será tratado como la raíz de la cadena. Esto ya se hace ocasionalmente cuando se actualiza el software del cliente, para reducir la cantidad de comprobaciones que debe realizar un cliente. El efecto será que Bitcoin mismo se bifurca, y las personas que aceptan su cadena usan un registro diferente de los que rechazan su cadena, independientemente de su longitud. Esto se puede hacer esencialmente de inmediato para los grupos y bastante rápido para otros clientes, aunque pueden sufrir un tiempo de inactividad hasta que se resuelva. Siempre que todos rechacen rápidamente su cadena, usted tiene el control de una moneda sin valor, Bitcoin A,

1.b - Estrategia 1 en secreto

¿Qué sucede si adopta la estrategia 1.b y mantiene su bifurcación en secreto hasta que sea lo suficientemente larga como para vencer a la cadena "correcta"? Presumiblemente, muchas personas notan que su poder de hashing ya no existe. Esto probablemente les preocupará y tratarán de hacer algo al respecto. La respuesta más sencilla es, de nuevo, "controlar" un bloque. Dependiendo de lo que se podría esperar razonablemente que sea N, tendrán una idea de N ^ 2 y cuánto tiempo le llevará ponerse al día. Necesitan puntos de control con los que todos (excepto usted) estén contentos, con la frecuencia suficiente para seguir frustrando su presunto ataque. Si desea seguir atacando, debe generar una nueva transacción y comenzar desde cero cada vez que lo hagan.

Idealmente, la comunidad quiere controlar los bloques que tienen un poco más de N bloques, para que todos tengan tiempo de asegurarse de que están de acuerdo con las transacciones en ese bloque, y definitivamente no quieren esperar hasta cerca de N^2 bloques. ; en caso de que consigas una cadena ganadora y empieces a publicarla antes del checkpoint. Dado que N ^ 2 es mucho más grande que N, hay muchas posibilidades de hacer esto.

Tenga en cuenta que el fracaso de esta estrategia depende de que lo extrañen de la minería. Si algún atacante tiene un grupo de minería secreto que nadie conoce y que es aproximadamente igual en tamaño a toda la minería existente, puede tener éxito con este ataque. (Llámalo un ataque al 101 %).

estrategia 2

En la estrategia 2, usted ataca la cadena, pero trata de 'mantener las apariencias' de no ser malicioso hasta que su ataque tenga éxito. La forma de hacer esto es intentar adelantar a la cadena legítima, antes de que alguien se dé cuenta de su ausencia. Si tiene (aproximadamente) la mitad de la potencia, todos los demás bloques nuevos en promedio serán suyos, pero podría haber series largas de solo sus bloques o solo de los que no son suyos.

Lo que haces es, una vez que hayas publicado tu transacción y la de Bob, intentas crear N+1 bloques, al mismo tiempo que el resto de la red crea N. Mantienes todo esto en secreto hasta que los otros mineros hayan extraído N bloques, y Bob te ha entregado la cocaína o la caricatura de Leonardo o lo que sea, y luego publicas todos los N+1, haciendo que tu cadena sea la más larga.

Si no logras llegar a N+1 antes de que el resto de la red llegue a N, descartas tu intento y vuelves a aplicar hash a la cadena adecuada. Espera un momento, luego organiza otra transacción con Bob y vuelve a intentarlo. La cantidad de tiempo que tiene que esperar depende de qué tan improbable sea que se extraigan N bloques seguidos, ninguno de ellos por usted.

Un par de puntos sobre este método. En primer lugar, mientras que en 1.a habría tenido que justificar sus bloques bifurcados ante el resto de la red y, por lo tanto, tenía un incentivo para hacer que sus cambios fueran lo más plausibles posible, aquí puede hacer los cambios que desee, incluso pagándote todo el Bitcoin que exista. Nadie verá las transacciones falsas hasta que sea demasiado tarde.

Lo que esto realmente significa es que no necesita un Bob engañado, que está feliz de seguir entregando activos que no son de Bitcoin después de una pequeña cantidad de confirmaciones, siempre que esté feliz de que le paguen en Bitcoin. Si desea sabotear la moneda, puede hacerlo y, de hecho, es libre de elegir N como cualquier número lo suficientemente pequeño como para no despertar sospechas de que está siguiendo la estrategia 1.b. Si solo desea que Bitcoin compre fiat o pague un rescate, debe ceñirse a la N de Bob.

En segundo lugar, existe una compensación entre qué tan sospechoso es su comportamiento y cuántas veces tiene que intentarlo. Si tiene mucho más del 50%, las secuencias largas de bloques sin que usted los extraiga serán más sospechosas, y es posible que tenga que hacer hash de un par de bloques en la cadena regular para que todo se vea normal. Si tienes cerca del 50%, parecerá menos sospechoso, pero te costará más ganar la carrera a N+1. Por supuesto, agrandar N ayuda a prevenir este ataque en cualquier caso.

En tercer lugar, aquí también tener mucho poder secreto podría ayudarlo, al ganarle la carrera, al mismo tiempo que hace que sea menos obvio que está haciendo hash en su bifurcación en lugar de la cadena correcta. Puede probar y juzgar cuánto vale la pena mantener la capacidad de hashing secreta lista para atacar, en lugar de usarla para que le paguen honestamente.

Análisis matemático

Acepto lo que algunas personas han dicho, que tener un poco más o menos del 50% hace la diferencia entre tener éxito definitivamente con 1.a o 1.b, y tener éxito solo con una pequeña probabilidad. Esto no se deriva de la ley débil de los grandes números, sino de la propiedad de recurrencia de los recorridos aleatorios de 1 dimensión (una diferencia entre los dos es que el último es aplicable incluso si tuviera exactamente un 50 % constante). Sin embargo, creo que he argumentado que no es lo suficientemente bueno para tener éxito eventualmente : el tiempo O (N ^ 2) que le llevará (que proviene del Teorema del límite central) debería significar que su ataque generalmente se evita.

Por otro lado, siempre que tenga cerca del 50%, debería poder tener éxito con la estrategia 2, independientemente de si tiene un poco más o un poco menos. Por supuesto, proporciones más altas y N más bajo lo ayudarán, pero los efectos ahora son más pequeños: si tiene 1/2 - h, para h pequeño y positivo, sus posibilidades serán 1/2 - O (h / sqrt (N)) . El teorema del límite central funciona en la dirección opuesta: incluso con una moneda ligeramente sesgada en tu contra, no es improbable que ganes una carrera corta con un solo lanzamiento.

También podrías estar haciendo varias cosas simples como solo comenzar un ataque si obtienes el primer bloque antes que el resto de los mineros, o solo si obtienes los primeros dos bloques, etc. Si es una buena idea y cómo ajustar exactamente este ataque depende de cuán sospechosas sean las personas y/o cuán complaciente sea Bob.

Si busca la destrucción, puede optimizar N a su propia capacidad; si tiene menos del 50%, es mucho mejor para ganar carreras cortas que largas.

Conclusión

En primer lugar, debe usar tantas confirmaciones como pueda permitirse, si cree que su transacción podría ser la que incentiva a GHash.io a volverse deshonesto. En segundo lugar, debe haber gente buscando patrones inusuales de actividad minera, especialmente grandes mineros que desaparezcan de la red.

Sin embargo, tenga en cuenta que la destrucción desenfrenada de Bitcoin ya es muy posible por debajo del 50% de concentración, y que cualquier tipo de ataque podría ocurrir fácilmente si alguien tiene grandes y secretas reservas de poder (esto se aplica a muchas altcoins si su prueba de trabajo puede hacerse de manera eficiente en el hardware de Bitcoin).

Tiene que haber una consecuencia para el atacante, lo suficientemente grande como para que sienta el golpe de su propio ataque.

Para crear la consecuencia para él: el votante (nodo confiable/nodo completo) debe tener bitcoin, y cuanto más bitcoin tenga el nodo, más poder de voto (más confiables son). Ejemplo, si el atacante realmente quiere acabar con toda la red de bitcoin, debe tener al menos el 51% de bitcoin en circulación. Si una red de bitcoin vale $ 100 mil millones. Tiene que comprar 50 mil millones de dólares. Intenta acabar con la red y perderá sus 50.000 millones de dólares. Sí, otros perderán un poco de valor, pero él perderá mucho más valor y podemos comenzar con otra criptomoneda.

No tiene que ser un poder de voto lineal de 1 bitcoin = 1. Puede ser una función. como poder de voto = root2 (bitcoin), u otras funciones.

El único problema con esto es que la mayoría de las personas usarán un nodo centralizado (porque están usando un nodo ligero y no quieren desperdiciar recursos para un nodo completo), por lo que su poder de voto puede estar centralizado en algún lugar y puede ser utilizado por el atacante a atacar (suponiendo que más bitcoin = más poder de voto). La solución a esto probablemente sea aplicar una función de ralentización (como la función raíz) para limitar su poder de voto. Pero luego, el atacante puede usar muchas billeteras de pequeño valor para socavar la gran billetera centralizada. (Todo en táctica de moderación, demasiado o muy poco no es bueno) Por lo tanto, también deberíamos reducir el poder de voto de aquellos que tienen muy poco bitcoin en su nodo: vea la imagen.

Entonces, ¿qué sucede con el nodo que no tiene un bitcoin? De todos modos, será inútil porque se extraerán de la red. Diría que no les asigne ancho de banda ni poder de voto, ya que de todos modos no están usando bitcoin y solo están desperdiciando recursos de la red. tal vez dejar que sean una referencia de baja prioridad, solo para que sean un poco útiles.

Lo mismo ocurre con los mineros. debemos asignar una función similar a la de la imagen. No queremos que los grandes mineros centralicen la red y al final tengan demasiado poder para arruinar la red. Dado que la comunidad bitcoin es por la gente y para la gente; Ese es el punto de todo el asunto de la descentralización, ¿no es así? Para que no seamos intimidados por el gran poder que quiere centralizarlo todo. Definitivamente deberíamos limitar el gran poder, así como a las personas inútiles que no usan bitcoin y se extraen de la red y ralentizan a la comunidad real en su conjunto.

Vea la imagen a continuación:poder de voto de bitcoin

¿Esto también puede ayudar a lidiar con el ataque DDOS?