Actualización de Safe Network Dev 🇪🇸 12 mayo 2022

Esta es una traducción automática. El original en inglés está aquí: 12 May 2022

Muchas gracias a @stout77 por otra imagen de portada :bowing_man:


Actualización 12 de mayo de 2022

Una de las características más simples pero también más fundamentales e importantes en el diseño de Safe Network es la Edad del nodo. Esencialmente, Node Age reemplaza sistemas como Prueba de trabajo para recompensar el buen comportamiento, castigar el mal y hacer la vida muy difícil para un atacante de Sybil. Proporciona una medida importante de la calidad y la confiabilidad continua de cada nodo, y es nuestro tema destacado esta vez.

Progreso general

A raíz de nuestro innovador trabajo con DBC, en el que @davidrusu y otros han llevado el concepto de “efectivo digital” en una dirección completamente nueva, haciéndolo bizantino tolerante a fallas y, por lo tanto, apto para una red descentralizada, nos complace anunciar que David Rusu estará al frente de una nueva división de Safe Labs. Este será nuestro paraguas de I+D para criptografía, redes y más de última generación. La investigación estará principalmente orientada a la seguridad en lugar del cielo azul, pero queremos obtener experiencia de donde sea que exista de una manera más formal y estructurada.

@Anselme finalizó un PR para verificar el SAP en el traspaso y comenzó a investigar los comportamientos bizantinos en el traspaso (el proceso de redistribución de datos en un evento de abandono).

David Rusu hizo una presentación sobre tipos de datos replicados sin conflictos (CRDT) en una reunión de Toronto CompSci y mencionó lo que ha estado haciendo en MaidSafe (¡naturalmente!). Mucho interés en el tema y muchos contactos por hacer. Va a volver por otro en los árboles CRDT.

@Bochaco completó un PR para verificar el permiso en el lado del cliente al realizar operaciones en registros (datos mutables) y también está trabajando en la API del cliente de libros gastados.

Y @Chriso ha estado analizando las fallas de la red de prueba causadas por la eliminación temporal de características como capacidad máxima.

Probando internamente, Metricbeat nos ha mostrado algunos nodos que se acercan lentamente a un uso muy alto de memoria durante un día más o menos. Al sumergirnos, nos dimos cuenta de que parecía haber un punto muerto bastante extremo (centrado en la limpieza de las conexiones). Tenemos algunas opciones de corrección aquí, por lo que solo estamos buscando y probando para ver qué tiene más sentido allí.

Mientras tanto, @Qi_ma dio una charla al equipo sobre Node Age.

Edad del nodo

Cada nodo en la red tiene una dirección que se decide como su ID, que en realidad es una clave que se genera cuando se une a la red. Este ID de nodo es esencialmente un número aleatorio muy grande. Sus primeros bits (p. ej., 0101101…) determinan en qué sección estará el nodo y, por lo tanto, qué datos buscará, mientras que los últimos ocho bits (p. ej., 00000101) indican la “Edad del nodo”, en este caso 5.

Cuando un nodo se acepta por primera vez en la red, se le asigna una Edad del nodo de 5, por lo que su ID termina en …00000101 (el nodo que se une debe seguir generando claves ED25519 hasta que obtenga una con la terminación y el prefijo correctos, generalmente un proceso sub-segundo).

Cuanto más tiempo permanezca el nodo como participante activo en la red, más crecerá la “Edad del nodo” del elemento, hasta un máximo poco probable de 255. Pero hay un par de problemas: (1) su “Edad del nodo” solo aumentará si demuestra ser confiable para almacenar fragmentos de datos y entregarlos cuando se solicita durante un cierto período de tiempo. (2) Cada vez que se incremente su Edad del nodo, debe moverse a otra sección.

Pero Safe Network no tiene concepto de tiempo, entonces, ¿cómo podemos rastrear cuánto tiempo se ha estado comportando el nodo? La respuesta es que usamos eventos de abandono (cambios en la membresía de la sección) como un indicador de tiempo.

Churn ID - El Decisor

Cada sección contendrá 7 ancianos (nodos de toma de decisiones) y más de 60 adultos (nodos de almacenamiento). Cada vez que un nodo se desconecta o se une a la sección, lo que sucede con frecuencia con los adultos, los mayores votan sobre lo que ha sucedido. Cada evento de abandono tiene una identificación de 256 bits, que es la firma BLS combinada de 5 de los 7 ancianos. Este “ID de abandono” también es efectivamente un número aleatorio y no se puede predecir de antemano.

Si el nuevo nodo demuestra ser disfuncional dentro de los primeros eventos de abandono, será expulsado y deberá solicitar unirse nuevamente. No tiene sentido desperdiciar recursos en un peso muerto.

Por otro lado, si nuestro nuevo nodo realiza sus funciones correctamente durante algunos eventos de abandono, queremos recompensarlo y aumentar su edad en 1, pero no queremos tener que rastrearlo y registrar cuándo se unió, etc. utiliza el churn ID como una especie de billete de lotería.

El ID de abandono (un número aleatorio, recuerde) proporciona dos funciones en lo que respecta a los nodos. En primer lugar, proporciona una forma para que los nodos aumenten su Edad del nodo y, en segundo lugar, dado que no queremos que los nodos construyan su reputación en una sola sección debido al riesgo de comportamiento malicioso, el ID de abandono también decide qué sección aleatoria a la que se unirá el nodo recién ascendido.

Posibilidad de ascenso

Si el churn ID es módulo divisible por 2 exp Node Age (churn ID % 2^age == 0)Me ascienden. Entonces, para nuestra nueva edad de nodo 5, si la “ID de abandono” es divisible por 32, lo que ocurrirá en promedio una vez cada 32 abandonos, su “Edad de nodo” aumentará a 6 y se moverá a una nueva sección. Luego, probablemente tendrá que esperar otras 64 rotaciones en su nueva sección antes de volver a ser promovida; la promoción se vuelve exponencialmente más difícil cuanto más tiempo permanece. Esto significa que los Ancianos, los 7 nodos más antiguos de la sección, han existido durante mucho tiempo y han demostrado su valía en muchas secciones diferentes antes de alcanzar su estado de votación.

¿Como funciona? En cada evento de abandono, los ancianos dividen el “ID de abandono” por edad, comenzando con el más antiguo (255) y bajando hasta el más joven (5). Cuando una de esas edades coincide con un conjunto de nodos en nuestra sección, reubicamos hasta elder_count/2 nodos que tienen esa Edad del nodo. Por lo general, solo habrá uno en ese rango de edad, pero en el caso de un exceso, seleccionamos los nodos con un ID de nodo más cercano al ID de abandono.

Los nodos también pueden ser degradados por comportamiento disfuncional (mal desempeño en comparación con sus pares). En este caso, la Edad del nodo se reduce a la mitad antes de que se reubiquen.

Beneficios de la edad del nodo

Este esquema tiene tres beneficios principales. El primero es la resistencia de Sybil. Para controlar una sección, un atacante deberá controlar al menos tres ancianos. El proceso de convertirse en anciano es largo y difícil, y es imposible saber en qué sección terminará. Cuando la red es grande, una proporción de 7 ancianos por más de 60 adultos hará que los ataques de Sybil sean extremadamente difíciles. Además, los nuevos nodos solo pueden unirse a una sección cuando se necesita más almacenamiento, por lo que los atacantes no pueden inundar la red con nuevos usuarios.

El segundo objetivo es evitar el trabajo indebido. Si un nodo falla, es probable que lo haga pronto, por lo que lo eliminamos antes de que pueda progresar más.

La tercera es la aleatorización general. Obligar a los nodos a saltar de una sección a otra para ganar confianza también tiene la ventaja de distribuir la capacidad de manera uniforme.

Flujo de reubicación

@Qi_ma ha estado trabajando en la implementación de Node Age, incluidos los flujos de mensajes entre los ancianos de la sección, el candidato a la promoción y los ancianos de la sección de destino. Dio una charla al equipo esta semana. Aquí está una de sus diapositivas.

Ancianos en la sección fuente

  • Acordar un evento de churn (cambio de membresía) y firmarlo (ID de churn)
  • Consultar si hay candidatos para reubicación
  • Elija a los candidatos más antiguos
  • Calcule sus secciones de destino a partir de su ID de nodo combinado con la ID Churn
  • Aumenta su edad en 1
  • Emitir un voto para que cada uno sea reubicado
  • Cuando se hayan reunido suficientes votos compartidos, informar a cada nodo candidato

Nodo candidato

  • Recibe mensaje de los ancianos
  • Reconoce iniciar proceso de reubicación
  • Genera una nueva ID con los bits iniciales correctos (sección) y los bits finales (su nueva era)
  • Bootstraps a la nueva sección [tiene autoridad para hacerlo desde su sección original]

Ancianos en la sección de destino

  • Verifique que el conocimiento de la sección fuente esté actualizado (el SAP)
  • Actualícelos si no y dígales que vuelvan a enviar
  • Verifique que las firmas de reubicación y los detalles estén en orden
  • Votar por el candidato que se une
  • Si todo va bien, el candidato se une a la nueva sección

Enlaces útiles

No dude en responder a continuación con enlaces a las traducciones de esta actualización para desarrolladores y los moderadores las agregarán aquí.

Como proyecto de código abierto, siempre estamos buscando retroalimentación, comentarios y contribuciones de la comunidad, así que no sea tímido, únase y creemos la red segura juntos.