Actualización de Safe Network Dev 🇪🇸 9 de diciembre de 2021

Esta es una traducción automática. El original en inglés está aquí: Update 09 December, 2021

Odiamos decepcionar, pero desafortunadamente la cúspide resultó ser un poco menos complicada de lo previsto, por lo que aún faltan algunos días para cualquier red de prueba. Le informaremos tan pronto como esté listo; realmente podría ser cualquier día, pero no tentaremos al destino con predicciones.

La semana pasada, David Rusu hizo una demostración de las transacciones confidenciales del anillo (Ring CT) al equipo. Era un material fascinante, pero bastante pesado en las matemáticas, por lo que esta semana tenemos una versión simplificada con el mínimo de álgebra en un intento de dar un poco de antecedentes y explicar la dirección que estamos tomando con las transacciones privadas de DBC. .

Progreso general

David Rusu, @danda y @Anselme se han quedado atrapados en varios aspectos de la implementación de la firma en anillo, incluidas las pruebas de pago.

@ChrisO ha estado luchando valientemente con GitHub Actions para intentar que la red de prueba sea digna de ser lanzada, pero no ha estado jugando a la pelota en los últimos días.

@bochaco ha estado trabajando junto a @chrisO con el objetivo de reforzar las pruebas CLI fallidas restantes, y hemos estado aplastando cada vez más casos extremos en torno a las divisiones de sección.

Todo el equipo ha estado analizando la membresía DKG: ¿cuál es la forma más eficiente de garantizar que los ancianos puedan realizar un seguimiento de los adultos en sus secciones y cómo podemos protegernos contra los ataques de venta de llaves, donde un adversario compra con éxito el control de una sección?

Anillo de firmas y caja fuerte

Queremos gastar un DBC. Para ello debemos demostrar que somos el propietario. Pero para aumentar la privacidad de nuestras transacciones DBC, no queremos que la casa de la moneda sepa con precisión quiénes somos, lo que sucedería si usáramos una clave estándar. Además, la Casa de la Moneda también necesita saber que este DBC aún no se ha gastado.

Para lograr estos objetivos, buscamos usar firmas de anillo, basándonos en el trabajo de Ring CT realizado por Monero, y agregando un toque seguro de multisig y comprobante de pago.

¿Qué es una firma de anillo?

Las firmas de anillo son un método de seguridad probabilístico en lugar de criptográficamente difícil, pero como Monero ha demostrado, sigue siendo muy efectivo para anonimizar transacciones.

Una firma de anillo es una forma de ocultar una clave pública (como nuestra clave de propietario de DBC) entre muchas otras claves de señuelo. Un anillo es solo una palabra para un grupo, por lo que en Safe nuestra llave está en el anillo con un montón de señuelos elegidos al azar de un grupo de llaves que la Casa de la Moneda conoce.

Una firma hecha por cualquier llave en el anillo es válida, pero la menta no puede decir qué llave en el anillo realmente firmó una transacción, solo que una de ellas lo hizo. Cuanto mayor sea el grupo de claves señuelo, más difícil será para un observador del sistema adivinar la clave real que firmó una transacción.

Usamos la firma del anillo para firmar un mensaje, como una solicitud de una menta para volver a emitir un DBC para que podamos gastarlo. A partir de esta firma, la casa de la moneda puede decir que el mensaje es válido, pero no quiénes somos. También puede verificar que nuestra clave no se haya utilizado antes para evitar el doble gasto.

La firma del anillo en sí contiene (entre otras cosas) un valor de cegamiento (número aleatorio) para cada uno de los señuelos y uno para nuestra clave, además de una “imagen clave” para nuestra clave. Una imagen de llave es una representación de nuestra llave que oculta su verdadera identidad.

Algunas cosas a tener en cuenta:

  • Las llaves de señuelo han sido vistas por la Casa de la Moneda antes. Podrían ser claves de propiedad de otros DBC no utilizados o algunas otras claves públicas válidas.

  • Cada firma de anillo solo se puede usar una vez.

  • La imagen clave se almacena en el libro de gastos, por lo que la menta puede decir que ya se ha gastado.

  • La creación de nuestra imagen clave requiere nuestra clave secreta.

Entonces, ¿cuál es nuestra clave secreta? Para explicar esto tenemos que adentrarnos en la criptografía de curva elíptica (ECC).

Criptografía de curva elíptica

ECC es un tipo de criptografía asimétrica que utilizan muchas criptomonedas, incluido bitcoin. Como todos los criptosistemas asimétricos, depende de que los cálculos sean fáciles en una dirección y muy difíciles en la otra, es decir, funciones unidireccionales.

En ECC el cálculo es cómo llegar de un punto de una curva a otro. Así es como funciona

Digamos que tenemos una curva de la forma: y2= x3 + ax + b.

Estamos usando la curva BLS12-381 (específicamente blstrs) que tiene este tipo de forma:

bed2a2bab8d53dbd3bf0b05085704f6eac1de859

La curva es enorme y cubre un campo finito Fq donde q es un número primo muy grande, lo que significa que hay un número enorme (pero finito) de puntos posibles en la curva. Todas las operaciones aritméticas sobre puntos en la curva son módulo q. En la aritmética modular, una vez que un valor es mayor que ‘q’, vuelve al principio, como con un reloj: 3 + 10 ‘módulo 12’ = 1.

Cuando multiplicamos un punto de la curva (A) con otro punto de la curva s, llegaremos, aparentemente al azar, a otro punto (B) que también esen la curva Hacer esa multiplicación es muy rápido y fácil, pero revertirla (resolver qué ‘s’ multiplicamos el punto ‘A’ para llegar al punto ‘B’) normalmente llevará miles de años, ya que básicamente tienes que iterar a través de todas las opciones posibles. hasta dar con la correcta. No hay un patrón obvio de dónde aparecen los puntos sucesivos en la curva, y no hay una manera fácil de aplicar ingeniería inversa al proceso.

Hay algunos puntos especiales en esta curva llamados generadores. Un generador ( G ) tiene la propiedad de que si sigues añadiéndolo a sí mismo (G, G+G, G+G+G ..) eventualmente definirá todos los puntos posibles de la curva. Creamos un par de claves eligiendo una G y multiplicándola por s, otro punto en la curva que solo nosotros conocemos.

  • sG es nuestra clave pública, s es nuestra clave secreta.

Bien, tenemos nuestra clave pública sG (que en nuestro ejemplo es nuestra clave de propietario de DBC) y nuestra clave secreta. Ahora tenemos que hacer una imagen clave I. La fórmula para hacer esto es:

  • I = sHp(sG)

Nuestra imagen clave es nuestra clave secreta s multiplicada por un hash de nuestra clave pública sG. Nuestra imagen clave “yo” es otro punto de la curva.

Tenga en cuenta que, dado que se requiere nuestra clave secreta s para crear I, solo nosotros podemos crearla. I se almacena en el libro de gastos.

Así que ahora podemos probar que nuestra identidad es válida con ‘I’ aunque nuestra clave pública esté codificada y multiplicada por nuestra clave secreta, y nuestra clave pública esté cegada y mezclada con todas las demás claves ocultas de señuelo. La menta solo sabe que una de esas claves es la correcta y si nuestra imagen clave se usa nuevamente, se encontrará en el libro de gastos y se bloqueará.

Próximos pasos

David Rusu está integrando Ring CT en el código DBC. El siguiente paso será hacer que funcione con BLS y luego ver el comprobante de pago. @danda y @Anselme han sentado las bases aquí. La idea es tener facturas que tengan claves públicas de pago y Compromisos de Pedersen en ellas. El pago DBC se volverá a emitir para que tenga exactamente el mismo Compromiso de Pedersen que el de la factura. De esta forma podemos probar que hemos emitido la cantidad correcta y al beneficiario correcto. Podemos publicar tanto la factura como el pago DBC públicamente para que todos lo vean, proporcionando prueba de que hemos pagado esta factura. Esto es en gran medida un trabajo en progreso.


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.