Actualización de Safe Network Dev 🇪🇸 28 julio 2022

Esta es una traducción automática. El original en inglés está aquí: Update 28 July, 2022

Esta semana redondeamos nuestro análisis de cómo podemos validar las secciones e incluso la propia red utilizando claves de firma BLS para crear un enlace que se remonta a ‘Génesis’, con la membresía actual vinculada al prefijo de la sección a través de 'PrefixMap, ` y cómo AntiEntropy (AE) lo actualiza periódicamente.

Progreso general

@Joshuef está viendo un buen progreso con los problemas de memoria, algunos de los cuales pueden deberse a bloqueos provenientes de traceroute. Junto con algunas mejoras en la prueba DBC de @bochaco, CI está comenzando a verse más saludable nuevamente.

@Bochaco también está analizando h3 y WASM y cómo podrían integrarse en el cliente. Hay un buen video en h3 (HTTP/3) aquí - buen hallazgo @19eddiejohn75.

@Roland ha escrito un PR para mover SectionChain al PrefixMap (ver más abajo). Necesitará algunas pruebas primero.

Y @oetyng tiene dos grandes cambios en curso: extracción de almacenamiento de datos y simplificación del flujo de mensajes de envío.

Extracción de almacenamiento de datos
Moviéndonos hacia una estructura nodo más simple, hemos extraído previamente el módulo comms. Ahora estamos en el módulo datos. Esto fue inicialmente en el impulso para eliminar bloqueos dentro de la estructura del nodo, pero estamos buscando más beneficios. El desacoplamiento permite ejecutar estos componentes de forma aislada, lo que facilita y acelera la prueba. Además, podemos configurar versiones más pequeñas de una red, combinando algunos módulos y otros no. Para la estructura nodo, estamos sacando la mayor parte de E/S de ella, lo que está un paso más cerca de una potencial API de “función pura” del nodo. Esto tiene como objetivo facilitar el razonamiento sobre el código y los efectos de los cambios, reduciendo el riesgo de errores.

Enviar simplificación de mensajes
Este refactor elimina más de 400 líneas de código y reduce la cantidad de lugares donde llamamos a varias funciones de envío con diferentes parámetros. Esos parámetros resultaron no ser necesarios, y las diferentes funciones de envío tampoco fueron necesarias, al reelaborar un poco las cosas. Además, esto coloca la firma y la creación de instancias de la estructura WireMsg en un solo lugar.

Cómo encaja todo

Más sobre BLS

Usamos la generación de claves distribuidas (DKG) como una manera eficiente de llegar a un acuerdo entre los ancianos. Una vez que hemos agregado cinco de los siete recursos compartidos, creamos una nueva clave de sección, que es una clave pública y también una clave privada virtual que en realidad no existe, porque este es un sistema sin propietario. No queremos que nadie esté a cargo cuando lleguemos a un acuerdo.

Pero cada anciano individual, o de hecho cualquier nodo, también puede usar sus propios pares de claves BLS para crear cualquier cantidad de claves compartidas, y estas pueden usarse en un mecanismo basado en distribuidores. En este sistema, hay un propietario que controla la clave secreta y ese propietario es libre de crear y distribuir acciones en un sistema n-de-m. Por ejemplo, el propietario de un sitio web podría distribuir claves compartidas a tres empleados de confianza y requerir que al menos dos firmen cualquier cambio en el sitio.

No usaríamos un mecanismo basado en distribuidores para el consenso descentralizado, ya que específicamente no queremos que haya un propietario de la clave secreta, pero podemos usarlo para implementar el intercambio de datos.

Más sobre PrefixMap, SectionChain y SAP

El PrefixMap es simplemente una estructura que asigna todos los prefijos de sección (00, 01…) a sus proveedores de autoridad de sección (SAP) actuales.

El SAP es una lista de ancianos en la sección, con sus ID, IP y puertos, además de la clave de sección BLS actual. Por lo tanto, proporciona toda la información que un nodo o cliente necesita para unirse a la red.

Mapa de prefijos

Prefijo                   SAVIA

00 → {[A(IP, puerto), B(IP, puerto), ….F(IP, puerto)], Sec_key}
01 → {[G(IP, puerto), H(IP, puerto), ….M(IP, puerto)], Sec_key}

….

Cada nodo y cliente tiene una copia del PrefixMap: se les envía uno tan pronto como se conectan, o pueden obtener uno de amigos, o donde sea. Pero no todos los PrefixMap están actualizados, por lo que el cliente o nodo que se pone en contacto con una sección debe primero actualizar su PrefixMap con el SAP actual a través de AntiEntropy (AE). Solo cuando tiene un SAP actualizado puede empezar a hacer negocios con la sección.

Pero, por supuesto, también tiene que saber que PrefixMap es genuino. Para esto, necesita verificar que el SAP esté firmado por una clave de sección válida (la clave actual menos 1), y también que esa clave de sección sea válida, porque ha sido firmada por la anterior, etc. Todo el camino hacia abajo a la tecla Génesis.

Así que la otra parte de PrefixMap es SectionChain. Esta es una estructura de árbol binario que vincula todas las claves de sección BLS hasta ‘Génesis’. Actualmente, este es un elemento separado y sincronizamos entre la clave en SAP y la cadena, pero planeamos unirlos, momento en el que tendremos que pensar en algunos nombres mejores.

En ese punto, PrefixMap/SectionChain, o como lo llamemos eventualmente, será un DAG con la clave Génesis en la raíz y la cadena de SectionKeys y tLa clave actual y la membresía en las hojas.

La otra cosa a mencionar es que si un cliente o nodo se vuelve a conectar a la red, no necesita actualizar toda la SectionChain nuevamente, solo la parte que es nueva. Entonces, la sección a la que se está conectando envía ese nuevo bit de la cadena, llamado ProofChain o parte de la cadena, al nodo que se vuelve a conectar para que simplemente pueda agregarlo a su SectionChain existente.

Con este diseño, incluso si alguien lograra robar la clave ‘Génesis’ y hacerse pasar por la red, esto importaría cada vez menos a medida que la red crezca y el DAG tenga más y más sucursales, porque tendremos que rastrear el llaves todo el camino de regreso a ‘Génesis’ de nuevo cada vez con menos frecuencia.


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.