¿Es posible ejecutar un ataque de doble gasto en Ripple durante una división de la red?

De la especificación (énfasis añadido):

Bajo una división neta, un libro mayor puede ser cerrado por la minoría de la red, este libro mayor puede ser descartado en el futuro .

¿Significa esto que sería posible gastar dos veces, una en cada lado de la división?

Incluso si la transacción simplemente se rechaza más tarde, podría engañar a un comerciante para que acepte su pago, luego reciba la entrega y luego permita que la red rechace la transacción una vez que se resuelva la división. ¿Es esto correcto? ¿Cómo sabría la minoría de los nodos que están separados del resto de la red?

Respuestas (1)

Ripple debería ser inmune a este ataque porque una transacción no se considera validada hasta que una abrumadora mayoría de validadores (que le interesan) hayan firmado un recibo diciendo que la han procesado (al validar un libro mayor que lo incluye en ese libro mayor o en uno de sus libros anteriores). Si la red se hubiera dividido, no podría recibir recibos de una gran mayoría de validadores.

Los servidores Ripple tienen una "puerta" interna. Continúan rastreando la red, intentan llegar a un consenso, firman validaciones, etc. Pero no informan las transacciones como confirmadas a los clientes hasta que pasan esta puerta interna. Para pasar la puerta, un libro mayor debe tener suficientes validaciones de fuentes confiables. Una vez que un libro mayor alcanza ese umbral, la puerta avanza justo más allá de ese libro mayor y todo hasta ese nuevo punto se considera completamente validado.

Cualquier cosa después de la puerta está en proceso de cambio, sujeto al consenso con otros validadores. Todo lo que hay detrás de la puerta está comprometido para siempre. La gran mayoría de los validadores se han comprometido a ello.

Si está en el lado minoritario de una división (o incluso en el lado ligeramente mayoritario de una mala división), ninguna transacción pasará la puerta. La red quedará inutilizable, pero nadie confiará en una transacción que se deshace cuando se resuelve una división.

A cambio de la inmunidad a este ataque y de las rápidas confirmaciones de Ripple sin necesidad de prueba de trabajo, se paga un precio. Uno puede imaginar situaciones en las que las transacciones podrían no pasar la puerta aunque no haya división de red. Por ejemplo, si una gran cantidad de validadores de repente dejan de validar todos al mismo tiempo, puede pensar que está separado de ellos y que es posible que se necesite una intervención manual para permitir que las transacciones pasen la puerta.

Pero dado que es muy fácil convertirse en un nodo (solo se necesita una IP y una computadora), ¿una entidad grande con suficiente interés no estaría dispuesta a realizar este tipo de ataques haciéndose pasar por honestos por un tiempo (para ganar confianza) y entonces atacar con este tipo de gastos dobles? Nuevamente, todo lo que se necesita son direcciones IP, no pruebas de trabajo.
@LucaMatteis No, por dos razones. En primer lugar, las direcciones IP no son suficientes. Tienes que hacer que la gente confíe en ti y la colusión es lo único que están seleccionando puntos finales confiables para evitar. En segundo lugar, no puede gastar dos veces. Sólo se puede romper el consenso. Una vez que la puerta se mueve, todo lo que hay detrás queda comprometido para siempre. Todo lo que puedes hacer es evitar que la puerta se mueva.
Si sois la mayoría, ¿qué importa? Puedes controlar el libro mayor y gastar dos veces todo lo que quieras. El cliente en el que estás gastando el doble se dará cuenta porque su transacción desaparecerá. Pero para el resto de la red, sus nodos son tan confiables como antes. Además, con Ripple, debe asumir que el buen comportamiento pasado implica un buen comportamiento futuro, lo cual es una suposición poco confiable.
@LucaMatteis No puedes gastar dos veces. No puede cambiar nada antes de la puerta y hasta que una transacción esté detrás de la puerta, nadie confiará en sus resultados. No estoy seguro de lo que quiere decir con "cliente contra el que está gastando el doble". (Y en cualquier caso, todos los sistemas monetarios conocidos requieren esa suposición. ¿Cómo sabes que una democracia no cambiará las leyes de una manera que destruya cualquier valor que tengas?)
¿Quién es el dueño de esta puerta? ¿Está diciendo que todas las transacciones deben ser aprobadas por esta puerta central para lograr el consenso?
@LucaMatteis Cada servidor tiene su propia puerta. Lea el segundo párrafo de mi respuesta.
Pero mi punto es: ¿qué pasa si la mayoría de los servidores son deshonestos? Entonces podrían hacer cosas malas, ¿verdad?
@LucaMatteis Para ellos mismos, seguro. Pero, ¿a quién le importa si las personas deshonestas se hacen cosas malas a sí mismas? Para cualquier otra persona, los malos no pueden hacer que su puerta retroceda, por lo que no hay doble gasto. Sin embargo, pueden evitar que la puerta avance. Así que hay un posible ataque DoS.
Pero, ¿no podrían los deshonestos comportarse honestamente y otros pensarían que son como otros servidores honestos regulares? Pero detrás de escena, harían cosas malas específicamente a algunas personas (como invalidar algunas transacciones o algo más). ¿Sería esto posible?
@LucaMatteis No. Las propuestas y validaciones siempre están firmadas e inundadas. No podía salirse con la suya enviando dos versiones diferentes. Los servidores mueven su puerta en función de una mayoría calificada y no se pueden crear dos mayorías calificadas diferentes. (Puedes crear ninguno si controlas suficiente confianza, pero luego perderás rápidamente esa confianza).