Actualizaci贸n de Safe Network Dev 馃嚜馃嚫 29 septiembre 2022

Esta es una traducci贸n autom谩tica. El original en ingl茅s est谩 aqu铆: Update 29 September, 2022

Hemos simplificado el c贸digo y eliminado muchos problemas t茅cnicos al eliminar todos los procesos de subprocesos m煤ltiples asincr贸nicos innecesarios en el c贸digo del nodo. Al mismo tiempo, persisten algunos problemas con las comunicaciones lentas, que creemos que pueden ser causados 鈥嬧媝or Quic, por lo que estamos investigando eso.

Aparte de la correcci贸n de errores, el nuevo c贸digo s铆ncrono sn_sdkg ahora est谩 listo para la integraci贸n. @anselme nos explica eso esta semana.

Progreso general

Qi_ma est谩 analizando c贸mo los ancianos verifican la 鈥渆dad del nodo鈥 de un nodo cuando deciden reubicarlo en una nueva secci贸n, ya que observamos un comportamiento an贸malo all铆, incluidos los nodos 鈥渮ombies鈥 que pueden unirse a la red.

@ChrisO est谩 experimentando con Quinn, que es una implementaci贸n de Rust del protocolo Quic para establecer y mantener conexiones entre pares. Desafortunadamente, Quic es algo as铆 como una caja negra, y creemos que algunos de los problemas de conectividad que estamos experimentando pueden deberse a la forma en que funciona, espec铆ficamente que las comunicaciones a menudo son lentas, lo que causa problemas cuando se agota el tiempo de espera de los procesos. Chris tiene una caja de arena de Quinn configurada y est谩 viendo lo que sucede cuando le enviamos diferentes tipos de mensajes. Al mismo tiempo, @bzee est谩 analizando la estructura de las comunicaciones qp2p para confirmar que estamos usando a Quinn de la manera m谩s eficiente posible. El problema clave es recibir flujos simult谩neos de forma asincr贸nica mientras se permiten esperas en las respuestas (devolver un observador para ver los mensajes de respuesta en el mismo canal).

@roland est谩 trabajando en pruebas de fuzz para la nueva caja sn_sdkg, que @anselme describe en detalle a continuaci贸n.

Integraci贸n sn_sdkg

La generaci贸n de claves distribuidas (tambi茅n conocida como DKG) es la forma en que los ancianos de la secci贸n generan la clave de la secci贸n de una manera segura que mantiene la clave de la secci贸n en secreto. Al final de DKG, cada anciano conoce solo su propia clave secreta compartida, de esa manera nadie ve la clave secreta de la secci贸n completa. Este es un mecanismo para mitigar el rango de acci贸n de los ancianos potencialmente malos: as铆 es como Safe Network puede garantizar que, mientras tengamos menos de 5/7 ancianos malos, no puedan firmar nada con autoridad de secci贸n. Se requiere autoridad de secci贸n para cambiar datos, promocionar o indicar nodos y acu帽ar tokens, por lo que esto es muy importante.

Recientemente, hemos estado trabajando en un nuevo DKG que es m谩s resistente a la p茅rdida de paquetes y que no usa temporizadores, por lo que no puede fallar debido a tiempos de espera y tr谩fico de red lentos. Esta publicaci贸n describe c贸mo funciona este nuevo DKG. Para esta implementaci贸n, utilizamos la caja sn_sdkg de generaci贸n de claves distribuidas s铆ncronas, que se basa en el algoritmo de generaci贸n de claves s铆ncronas de poanetwork en su caja hbbft.

C贸mo funciona DKG

Los ancianos activan DKG cuando notan que los miembros m谩s antiguos no son los ancianos, o cuando una secci贸n se divide y necesitan elegir candidatos para ancianos. Al darse cuenta de esto, los ancianos actuales les piden a los candidatos que inicien una nueva sesi贸n de DKG con un mensaje DkgStart, para que puedan generar la siguiente clave de secci贸n.

El primer paso en nuestro DKG es generar claves BLS temporales, que se utilizan para el cifrado en el proceso DKG. Cada nodo en Safe Network tiene una clave ed25519, pero aunque esas claves son excelentes para las firmas, no podemos cifrarlas de manera segura. Necesitamos otra forma.

Dado que nuestros nodos no tienen claves BLS (los ancianos tienen una clave compartida BLS pero no una clave BLS simple), generamos una clave 煤nica solo para esta sesi贸n DKG y la descartamos despu茅s de su uso. Sin embargo, necesitamos que los otros nodos conf铆en en esta clave BLS porque es completamente nueva, por lo que antes de que suceda algo m谩s, cada candidato transmite su clave p煤blica BLS reci茅n generada en un mensaje que contiene su firma (hecha con su clave ed25519 confiable) sobre la nueva clave p煤blica BLS 煤nica que usar谩n para esta sesi贸n DKG.

Una vez que los candidatos tengan todas las claves p煤blicas de BLS para esta sesi贸n de DKG, pueden comenzar a votar. La votaci贸n tiene 3 etapas:

  • Partes: cada nodo env铆a una Parte que se usar谩 para la generaci贸n final de la clave, contiene datos encriptados que se usar谩n para generar su clave compartida.
  • Acks: los nodos verifican las Partes y env铆an sus Acks (reconocimientos) sobre las Partes. Estos Acks tambi茅n se utilizar谩n para la generaci贸n de claves.
  • AllAcks: todos se aseguran de tener el mismo conjunto de Acks y Partes enviando su versi贸n de los conjuntos. 隆Esta 煤ltima parte est谩 ah铆 para asegurarse de que los candidatos terminen generando la misma clave de secci贸n!

Una vez finalizada la votaci贸n, los candidatos pueden generar sus acciones de clave secreta junto con la nueva clave p煤blica de la secci贸n de Parts y Acks.

Chismes y eventual terminaci贸n

En una red, los mensajes se pueden perder y eso puede generar situaciones en las que a algunos candidatos les faltan votos y otros esperan una respuesta a votos que nunca llegaron. Para contrarrestar este problema, 隆tenemos chismes! De vez en cuando, si un nodo no ha recibido ning煤n mensaje DKG nuevo cuando espera alguno, enviar谩 todos sus votos a los dem谩s. Esto tiene dos prop贸sitos:

  • uno es para informar a los dem谩s de los votos, y conseguirlosp para acelerar con los votos que podr铆an haber perdido
  • el otro es para mostrar a los otros participantes que a nuestro nodo le faltan votos, para que otros puedan responder a su vez con sus votos y ayudarnos a alcanzarlos

De hecho, si un nodo recibe un mensaje de chisme que le falta informaci贸n, responder谩 con su conocimiento. Esto sucede incluso despu茅s de la finalizaci贸n (finalizaci贸n de la ronda de votaci贸n), porque a veces, cuando un nodo finaliza (y, por lo tanto, deja de chismear porque no espera m谩s votos), seguir谩 recibiendo chismes de otros nodos que no llegaron all铆. a煤n. En ese caso, el nodo informado responder谩 a este chisme con su conocimiento para que los otros nodos tambi茅n puedan llegar a la terminaci贸n. Eventualmente, a trav茅s de este proceso, cada candidato llega a la terminaci贸n.

DKG simult谩neos

En esta implementaci贸n, adoptamos DKG concurrentes. A veces, justo despu茅s de que se activa DKG, un nuevo nodo se une a la secci贸n y parece ser un mejor candidato a mayor porque la edad de su nodo es muy alta. En este caso, el conjunto actual de mejores candidatos mayores cambia, y los mayores actuales env铆an otro mensaje DkgStart a los nuevos candidatos.

La sesi贸n anterior de DKG no se detiene, 隆ahora es una carrera entre los dos! Queremos que los ancianos sean nodos muy confiables. En cierto modo, el proceso intensivo de DKG es una prueba para comprobar que estos candidatos son aptos para ser mayores. Si varios DKG terminan al mismo tiempo, est谩 bien, el 鈥淐onsenso de traspaso鈥 se asegurar谩 de que los ancianos actuales elijan solo un ganador. Las sesiones de DKG que no ganaron la carrera pueden terminar o no, pero en realidad no importa, eventualmente se eliminar谩n cuando los nodos se den cuenta de que perdieron.

Conclusi贸n

En resumen, el nuevo DKG se enfoca en ser muy resistente a la p茅rdida de mensajes, eliminando la necesidad de temporizadores y asegur谩ndose de que todos lleguen a la finalizaci贸n sin posibles tiempos de espera. Tambi茅n hace que los DKG simult谩neos sean una funci贸n para seleccionar a los mejores candidatos en una carrera hasta la terminaci贸n entre DKG.


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.