Previniendo los Ataques de Sybil. Traducción el español. 🇪🇸

Documento Original Publicado el 29 de Octubre de 2018. Lars Brunjes.

Ver Documento Original aquí.

image

Basándome en el artículo de la semana pasada del profesor Aggelos Kiayias, (Documento traducido al español aquí) científico jefe de IOHK, quiero usar este artículo para discutir otra elección que hicimos al diseñar el mecanismo de recompensa de Cardano. El mecanismo está diseñado para incentivar a las partes interesadas a "hacer lo correcto" y participar en el protocolo de manera que se asegure su funcionamiento fluido, eficiente y seguro.

Como se explicó la semana pasada, para garantizar la equidad y la descentralización, el mecanismo de recompensas sigue tres principios:

  • Las recompensas totales para un pool deben ser proporcionales al tamaño del pool hasta que éste alcance la saturación.

  • Las recompensas dentro de un pool deben ser proporcionales a la participación de un miembro del pool.

  • Los operadores del pool deberían obtener mayores recompensas por sus esfuerzos.

Una modificación necesaria se refiere al rendimiento del pool. Si un operador de pool descuida sus "deberes" y no crea los bloques que se supone que debe crear, las recompensas del pool disminuirán en consecuencia.

Tomemos el ejemplo de Alice y Bob que manejan pools de igual tamaño. Ambos son elegidos como líderes de franja (slot) con 100 slots cada uno. Alice crea obedientemente los 100 bloques de las 100 franjas que lidera, mientras que Bob pierde 20 franjas y sólo crea 80 bloques. En este caso, el pool de Alice obtendrá recompensas completas, mientras que la de Bob obtendrá menos. Cuánto menos exactamente es controlado por un parámetro.

El Desafío

En este post, quiero concentrarme en otro desafío potencial a los principios de Cardano y explicar cómo decidimos superarlo. El desafío fue mencionado al final del post de la semana pasada: ¿Cómo evitamos que una persona cree docenas o incluso cientos de pequeños pools?

Tenga en cuenta que para las partes interesadas muy grandes es perfectamente legítimo dividir su participación en varios grupos para obtener una parte justa de las recompensas.

Un ejemplo de un ataque de Sybil

Supongamos que nuestro objetivo son 100 pools y que, por lo tanto, las recompensas máximas son del 1%. Supongamos además que Alice tiene una participación del 3,6%. Si Alice no divide su apuesta, sólo recibirá el 1% de las recompensas totales. Sin embargo, si Alice divide sus activos, poniendo un 0.9% en cuatro pools diferentes, su recompensa de cada pool no será limitada.

El desafío surge si se permite que una parte interesada pequeña pero enrevesada cree un gran número de pools (posiblemente bajo identidades ficticias). Si logra atraer a la gente a estos pools (por ejemplo, mintiendo sobre sus costos y prometiendo altas recompensas a los miembros del pool), podría terminar controlando una participación mayoritaria con muy poco interés personal en el sistema. ¿Cómo pudo pasar esto?

Imaginemos que hay alrededor de 100 pools legítimos y honestos. Si no nos protegemos de ello, un jugador malicioso podría crear de forma relativamente barata 100, 200 o incluso 500 pools con nombres falsos y reclamar bajos costes operativos y un bajo margen de beneficios. Muchas partes interesadas honestas se verían tentadas a dejar de delegar en uno de los 100 pools honestos y, en su lugar, delegar su participación en uno de los pools temáticos, que podría superar en número a los pools honestos. Como consecuencia, el operador de esos pools maliciosos sería seleccionado como líder de slot (franja) para la mayoría de los bloques y así obtener el control de la blockchain, abriéndola a todo tipo de actividades delictivas y criminales, como los ataques de doble gasto. Por supuesto, tendría que pagar por la operación de cientos de nodos, pero ese costo palidece en comparación con el costo de adquirir una participación mayoritaria comprando la mayoría de todos los Ada existentes, que estarían en el rango de cientos de millones a miles de millones de dólares.

Esto sería desastroso porque la seguridad de un sistema de Prueba de Participación (Proof of Stake - PoS) como el de Cardano se basa en la idea de que las personas con mucha influencia sobre el sistema deberían tener mucho en juego y, por lo tanto, tener todas las razones para ayudar a que el sistema funcione sin problemas.

Nuestra solución

Este tipo de ataque, en el que el atacante asume muchas identidades, se llama ataque Sybil, que debe su nombre a la novela de 1973 Sybil, de Flora Rheta Schreiber, sobre una mujer que padece un trastorno de personalidad múltiple.

¿Cómo podemos prevenir los ataques de Sybil?

Una idea podría ser hacer que el registro del pool sea muy caro. Sin embargo, para evitar los ataques, esos honorarios tendrían que ser extremadamente altos e impedir que las personas honradas crearan pools legítimos. Tal obstáculo sería malo para la descentralización; ¡queremos animar a los miembros de nuestra comunidad a crear sus propios pools y no obstaculizar su entrada! Tiene que haber una cuota modesta por la simple razón de que cada certificado de registro tiene que ser almacenado en la cadena de bloques y consumirá recursos, que tienen que ser pagados.

Nuestro análisis teórico del juego nos llevó a una solución diferente, una que no impedirá que los "pequeños" interesados comiencen sus propios pools al cargarlos con honorarios prohibitivamente altos y un alto riesgo financiero.

Al registrar un pool, el operador del pool puede decidir `prometer’ parte de su participación personal en el pool. El prometer más aumentará ligeramente las recompensas potenciales de su pool

Esto significa que los pools cuyos operadores han prometido una gran participación serán un poco más atractivos. Por lo tanto, si un atacante quiere crear docenas de pools, tendrá que dividir su participación personal en muchas partes, haciendo que todos sus pools sean menos atractivos, lo que hará que la gente delegue en pools gestionados por partes interesadas honestas.

En otras palabras, un atacante que crea un gran número de pools tendrá que dispersarse demasiado. No puede hacer atractivos todos sus pools, porque tiene que dividir sus activos en demasiadas partes. Los operadores de pools honestos agruparán todos sus intereses personales en su único pool, con lo que tendrán muchas más posibilidades de atraer a los miembros.

El grado de influencia de la participación del operador de pool en las recompensas del pool se puede ajustar mediante un parámetro configurable. Siendo un grupo de matemáticos con poca imaginación, llamamos a este parámetro’a0’. (Un colega sugirió la letra griega phi porque suena como parte del canto del repugnante gigante en Jack and the Beanstalk -‘Fee-fo-fi-fum’ - y estamos tratando de protegernos de los dañinos pools gigantes, ¡pero agradeceríamos a cualquier miembro de la comunidad que pueda inventar un buen nombre!

Poner a0 a cero significaría: Las recompensas del pool no dependen de la acumulación (stake) prometida por el operador. Elegir un valor alto para a0 resultaría en una fuerte ventaja para los operadores de pools que prometen mucha acumulación (stake) a sus pools.

Aquí tenemos un equilibrio clásico, entre la justicia y la igualdad de condiciones por un lado (a0 = 0) y la seguridad y la protección contra ataques de Sybil por el otro (a0 es grande).

Para demostrar el efecto, veamos los tres gráficos de la Figura 1.

image

Figura 1. Cómo la acumulación (stake) prometida de un operador de pool afecta las recompensas del pool.

En los gráficos, nuestro objetivo son diez pools, por lo que las recompensas (rewards) se limitarán al 10%. El tamaño del pool se traza en el eje horizontal y el eje vertical muestra las recompensas del pool. Cada gráfico muestra tres grupos hipotéticos, en los que los operadores han prometido 0%, 5% y 8% respectivamente a sus grupos (la cantidad prometida se denomina s en los gráficos).

El primer gráfico utiliza a0 = 0, por lo que la acumulación prometida (pledged stake) no tiene influencia en las recompensas del pools, y los tres pools se comportan de la misma manera: las recompensas siguen subiendo a medida que aumenta el tamaño del pool hasta que se ponen límites cuando el pool controla el 10% de la acumulación (stake).

En el segundo gráfico, vemos el efecto de a0 = 0,1. Los tres pools siguen siendo similares, especialmente para tamaños pequeños, pero con valores ligeramente diferentes. Los pools con una mayor acumulación prometida (pledged stake) disfrutan de recompensas ligeramente más altas cuando crecen.

Finalmente, el tercer gráfico muestra el efecto de a0 = 0,5. Es similar al segundo gráfico, pero las diferencias entre los tres pools son más pronunciadas. Todavía tenemos que elegir un valor "bueno" para a0. Esta elección dependerá de cantidades tales como los costos operativos previstos, las recompensas totales y, lo que es más importante, el nivel de seguridad deseado.

Quisiéramos mantener un 0 lo más pequeño posible, garantizando al mismo tiempo altos niveles de seguridad contra los ataques de Sybil.

En cualquier caso, es importante tener en cuenta que la introducción de a0 no impide que "pequeñas" partes interesadas gestionen pools exitosos porque alguien con una gran idea siempre puede llegar a la comunidad, convencer a otros e invitarlos a trabajar juntos y reunir recursos para comprometerse con el pool. Al final, la gestión de un pool sólido y fiable y el trabajo en estrecha colaboración con la comunidad serán más importantes que la simple posesión de una gran cantidad de acciones (stake).

También hemos empezado a pensar en sustituir la dependencia de las recompensas del líder del pool por un sistema de reputación. Esto permitiría a las personas con pocas acciones (stake) hacer que sus pools sean más atractivos al hacerlos funcionar de forma fiable y eficiente durante un largo periodo de tiempo. Esto no se implementará en la primera iteración, pero está sobre la mesa para futuras versiones de Cardano.

También puede leer el informe técnico de IOHK Especificación de Diseño para la Delegación e Incentivos en Cardano para una descripción más amplia y detallada del sistema.

2 Likes