Elrond: Preguntas y respuestas sobre seguridad
La seguridad de nuestra red es de suma importancia para nosotros por lo que estamos comenzando una serie de artículos en los que se habla sobre la robustez de nuestro diseño. Para empezar, este artículo responde a dos preguntas importantes que surgieron durante nuestros recientes intercambios de impresiones con desarrolladores.
P: ¿Cómo se puede reducir el riesgo si un grupo malicioso crea un bloque firmado con transacciones dañinas que se cruzan entre fragmentos ( o “shards” en inglés )?
Empezaré explicando los requisitos mínimos de nuestro sistema.
El primer día del lanzamiento, el protocolo Elrond contará, al menos, con 800 validadores, 400 por cada fragmento y otros 400 para la meta cadena. Tenemos el requisito de que cualquier fragmento debe contener al menos 400 validadores o de lo contrario no se creará el fragmento o se fusionará con otro.
Unos cuantos aspectos destacados más:
· Requisito de BFT / Supuesto de que el 75% de los nodos totales son buenos actores.
· Las probabilidades se calculan suponiendo que el 25% de los nodos son maliciosos. A nivel de fragmento aceptamos un máximo del 33% de nodos maliciosos. Los cálculos se realizan con 10 fragmentos y 4000 nodos de los que 1000 son maliciosos.
· El validador inicial para la asignación de los fragmentos es aleatorio. La fuente de aleatoriedad proviene de la meta cadena. Cuando entra un nuevo validador, se asigna al azar a un fragmento existente. Como máximo, el 30% de los nodos son reorganizados al final de cada periodo.
· El tamaño del grupo de consenso en la meta cadena es de 400. El líder cambia en cada ronda (5 segundos), para firmar un bloque, tienen que firmarlo ⅔+1 que son 267 validadores.
· El tamaño del grupo de consenso en un fragmento es de 63. Se selecciona al azar de entre el búfer de 400 cambiando en cada ronda. ⅔*63 + 1 es igual a 43 que son los validadores que se necesitan para firmar un bloque.
· La semilla aleatoria es una cadena de semillas: imparcial, impredecible e inalterable. El líder del bloque actual firma la semilla aleatoria del bloque anterior con su clave privada, utilizando el esquema de firma única de BLS, ese número mediante un algoritmo hash se convierte en la semilla aleatoria para la siguiente selección de grupo.
· Firma única BLS — se corrige un mensaje firmado con un resultado de clave privada.
· Bloque definitivo: el bloque N es definitivo sólo si el bloque N-1, el bloque N-2 …. el bloque N-K están firmados. La meta cadena sólo registra los últimos bloques. Actualmente hemos elegido K = 1.
La probabilidad de que una súper mayoría maliciosa (>67%) sea seleccionada para la misma ronda en el mismo consenso es de 10^-9, incluso, si el 33% de los nodos del fragmento son maliciosos. En ese caso, pueden proponer un bloque y firmarlo — llamémoslo BLOQUE M, pero no será registrado por la meta cadena. La meta cadena registra el BLOQUE M sólo si el BLOQUE M+1 está construido encima de él. Para crear el BLOQUE M+1, el siguiente grupo de consenso tiene que estar de acuerdo con el BLOQUE M. Sólo un grupo malicioso estará de acuerdo con el BLOQUE M, por lo que el siguiente grupo debe tener de nuevo una súper mayoría maliciosa. Como la semilla aleatoria para la selección de grupos no puede ser manipulada, la probabilidad de seleccionar un grupo de super mayoría maliciosa es de ~10^-9 — para ser exactos 5.38 * 10^-10.
La probabilidad de firmar dos bloques maliciosos consecutivos equivale a seleccionar dos subgrupos con al menos (⅔*63 + 1) miembros del grupo malicioso consecuentemente. La probabilidad de esto es: ~10^-18.
Además, los grupos seleccionados consecuentemente deben estar en connivencia, de lo contrario, no se firmarán los bloques.
Demostramos que el protocolo es probadamente seguro contra transacciones no válidas.
P: ¿Cómo se mitiga la posibilidad de tomar el control de un fragmento? ¿Es posible adueñarse de un fragmento?
El protocolo está diseñado de tal manera que es probadamente seguro y la probabilidad de que se pueda tomar el control de un fragmento es extremadamente baja: 2,88*10^-78. Una arquitectura de fragmentos tiene que ser construida de tal manera que haga imposible que puedan adueñarse de un fragmento.
Soluciones a la toma de control de un fragmento:
Solución alternativa, incluso para estos casos imposibles. Estado: investigación realizada, dos posibles soluciones, implementación planificada tras la primera prueba de lanzamiento de la red.
Solución 1:
En la creación de cada bloque, el líder agregará una prueba de que el dinero no fue creado de la nada. Esta prueba será verificada por la meta cadena y, también, por cada fragmento al que se destine.
Solución 2:
Cuando el líder propone un bloque, agrega en el encabezado también una prueba de merkle para algunas cuentas que cambiaron su balance durante la ejecución del bloque. La selección de estas cuentas debe ser determinista, por ejemplo, tomar las cuentas de la primera transacción en cada mini bloque y proporcionar una prueba agregada que vaya desde todas estas cuentas hasta el hash raíz registrado en el bloque. Cuando un bloque inválido es propuesto por una mayoría maliciosa, la raíz es manipulada con un resultado inválido (después de incluir cambios inválidos en el árbol de estados).
Al proporcionar la prueba combinada de merkle para un número de cuentas, esto permite que un nodo honesto plantee un desafío para esa prueba. Los nodos honestos proporcionarán el bloque de transacciones, el árbol de merkle anterior con todas las cuentas afectadas antes de aplicar el bloque problemático y los estados del contrato inteligente. Si las pruebas no se presentan en el plazo establecido, el desafío se considera incompleto y todos los mensajes serán eliminados. No se produce ningún recorte, el bloque impugnado se considera válido.
El coste de un desafío inválido son todas las monedas del nodo ( o “stake” en inglés )? .
Esto permitirá que la meta cadena intente aplicar los cambios ya que ya tiene un árbol de estados anterior (sólo para las cuentas afectadas) y será capaz de detectar la inconsistencia, ya sea una transacción inválida o la raíz inválida. Esto puede ser rastreado y el grupo de consenso puede ser recortado. Al mismo tiempo, el que desafía puede ser recompensado con parte de la cantidad recaudada. Necesitamos comparar el tamaño de dicha prueba para determinar el máximo de transacciones permitidas en el bloque. Además, si el problema se refiere a una operación de contrato inteligente, entonces la ejecución de un contrato inteligente es necesaria, pero, para ello, podemos asegurarnos de que no se ha creado ningún fondo sin validar la exactitud de la ejecución del contrato inteligente.
La solución se optimiza aún más enviando la prueba reducida del árbol de merkle sólo en el desafío, el que desafía presenta tanto la prueba reducida antes de aplicar el bloque inválido como el bloque en sí.
Sin embargo, un grupo malicioso puede incluso ocultar el bloque de otros nodos no maliciosos. En este caso, los nodos honestos, incluso si supieran que se han producido nuevos bloques (al ver nuevas cabeceras registradas por meta cadena), no podrían plantear desafíos porque no tienen acceso a los datos de los bloques. Es imposible probar eso.
La solución es hacer obligatoria la propagación de cada bloque producido al fragmento hermano y hacer que confirmen la recepción y envíen la confirmación a la meta cadena. En este caso, podríamos tener desafíos planteados también desde el fragmento hermano, ya que esos nodos tienen acceso a los bloques y también podrían verificarlos. Otra ventaja con esto es que hay otro canal donde los nodos honestos pueden solicitar los datos si son negados por sus propios nodos de fragmentación. La sobrecarga de comunicación se reduce aún más al enviar sólo el fragmento interno del mini bloque al fragmento hermano. Los mini bloques de fragmentos cruzados se envían siempre sobre diferentes temas accesibles a los nodos interesados. Al final, los desafíos pueden ser planteados por múltiples nodos honestos.
Otra protección está dada por la configuración de los temas y mensajes P2P. La comunicación de un fragmento hacia la meta cadena se realiza a través de un conjunto definido de temas / canales — La meta cadena no aceptará ningún otro mensaje de otros canales.
Esta solución introduce un cierto retraso en la meta cadena sólo en el caso de desafíos, que son muy escasos en número y altamente improbables, ya que si se detectan (alta probabilidad de ser detectados) los nodos arriesgan todas las monedas que acumulan. El consenso de la meta cadena ejecutará la verificación de múltiples pruebas de este tipo procedentes de diferentes fragmentos. Sólo se registran los bloques de los fragmentos donde no hay desafíos pendientes y para los demás con desafíos intentamos procesarlos tan pronto como sea posible con una prioridad en base al orden de llegada, y hacemos el recorte, ya sea para el contrincante si hubo una falsa alarma o para el grupo si el desafío fue validado.
Además, si se validan múltiples desafíos de este tipo, la meta cadena puede desencadenar un comando de fin de ciclo temprano. En este caso, los nodos maliciosos son cortados instantáneamente y el 30% de los nodos totales son reorganizados — aquellos que todavía tienen suficientes monedas. Esto asegura que ninguna adquisición de fragmentos bloquee el protocolo durante un largo período de tiempo y que haya suficientes nodos en cada fragmento que puedan garantizar la seguridad. De lo contrario, si cortamos unas cuantas veces y no terminamos el período, cada vez que quitamos 43 nodos del fragmento nos quedamos con menos nodos y la seguridad general del fragmento disminuye.
Así que, descrita la solución en caso de que ocurra lo imposible, ahora demostramos que la probabilidad de que se forme un grupo de súper mayoría malicioso dentro de un fragmento seleccionado es prácticamente nula.
Para tomar el control de un fragmento, el grupo malicioso necesita tener ⅔+1 miembros en un solo fragmento del búfer de consenso de 400. Esto equivale a 267 validadores. Tomando en consideración las suposiciones anteriores, el 25% de los nodos totales son maliciosos, la probabilidad de que los grupos maliciosos tengan la mayoría en un fragmento es de 2.88*10^-78.
Si consideramos que el 33% del total de los nodos de la red son maliciosos, la probabilidad de tener 267 nodos maliciosos (ataque para tomar el control de la meta cadena) es de 2.84*10^-47. Lo mismo, si consideramos tener 400 nodos maliciosos dentro de un fragmento (ataque para tomar el control total), en los que no hay ningún nodo honesto capaz de plantear un desafío, la probabilidad es prácticamente 0 (10^-211).
Si hay menos miembros maliciosos que ⅔+1, pero más de ⅓ de los validadores en un solo fragmento (menos de 267, más de 133), entonces el fragmento sólo se estancará, no creará ninguna transacción, ya que ninguno de los bloques obtendrá su estado definitivo. Los nodos buenos no se construirán sobre bloques malos.
Si hay incluso menos de ⅓ de los validadores en un fragmento llegamos a la situación descrita y explicada en la primera pregunta.
En conclusión, hemos demostrado que el sistema es seguro frente a los ataques de apropiación de fragmentos.
Los medios oficiales de Elrond:
· Elrond Github: https://github.com/ElrondNetwork
· Plataforma Comunitaria de Elrond: https://community.elrond.com
· Twitter: https://twitter.com/elrondnetwork
· Página web oficial: www.elrond.com