Idioma

Cómo Generar Parámetros SNARK de Manera Segura

Zooko Wilcox | Feb 29, 2016

Existen muchos desafíos criptográficos para construir un sistema financiero abierto completamente seguro y confiable.

Actualmente, nuestra prioridad central en el proceso de desarrollo de Zcash es generar "parámetros públicos SNARK" de manera segura.

¿Cuál es el problema?

La manera sencilla de generar "parámetros públicos SNARK" produce también una especie de "residuo tóxico" criptográfico que hace que el dinero Zcash pueda ser falsificado. He aquí nuestro plan para evitar la falsificación.

Los SNARKs - un tipo de Pruebas de Conocimiento-Cero muy eficiente - son un bloque de construcción criptográfico de Zcash. Son los que permiten a los mineros de Zcash validar transacciones y rechazar transacciones inválidas sin que ninguna información privada sobre el contenido de las transacciones sea revelada a esos mineros.

Los SNARKs requieren algo llamado "los parámetros públicos". Los parámetros públicos de SNARK son números con una estructura criptográfica específica que son conocidos por todos los participantes en el sistema. Estos parámetros están incluidos en el protocolo y en el software desde el principio.

La manera obvia de construir parámetros públicos de SNARK es que alguien genere un par de claves pública/privada, similar a un par de claves ECDSA [*], y luego destruya la clave privada.

El problema es esa clave privada. Cualquier persona que obtenga una copia puede usarla para falsificar dinero. (Sin embargo, no puede violar la privacidad de ningún usuario - que alguien tenga una copia de la clave privada no pone en riesgo la privacidad de las transacciones.)

Mitigar esta amenaza es actualmente nuestra máxima prioridad en el proceso de desarrollo de Zcash. Llamamos a los materiales de la clave privada "el subproducto de residuos tóxicos" -esto es, algo que se produce como un efecto secundario no deseado de la generación de parámetros públicos y que necesitamos controlar y destruir de la forma más segura posible.

¿Qué podemos hacer al respecto?

Hemos ideado una computación multi-partes segura en la que varias personas generan, cada una, un "fragmento" del par de claves pública/privada, luego cada uno destruye su fragmento del residuo tóxico de la clave privada, y finalmente todos juntan sus fragmentos de la clave pública para formar los parámetros públicos SNARK. Si ese proceso funciona -es decir, si al menos uno de los participantes destruye con éxito su fragmento de clave privada- entonces el subproducto de residuo tóxico nunca llegará siquiera a existir.

Hemos escrito un documento sobre la ciencia criptográfica aplicada a ese proceso, que presentamos en la conferencia IEEE "Oakland" de Seguridad y Privacidad en 2015.

Estamos trabajando en la ingeniería y los detalles operacionales para ver cómo implementar esa computación multi-partes segura, utilizando un conjunto de personas bien conocidas y de confianza para servir como participantes. También estamos explorando si hay otras aplicaciones de SNARKs fuera de Zcash que tengan la misma necesidad de parámetros públicos, porque entonces podríamos generar los parámetros públicos para esas otras aplicaciones al mismo tiempo que lo hacemos para Zcash.

¿Qué más podemos hacer?

¿Entonces, esto soluciona el problema? Creemos que esta solución es lo suficientemente buena para seguir adelante con su implementación. Si funciona, eliminaría completamente el residuo tóxico de la llave privada, y haría extremadamente difícil a cualquier adversario derrotar estas medidas de seguridad.

Lamentablemente no hay manera de confirmar, después del hecho, que realmente funcionó. Siempre habrá la posibilidad de desconfiar que todos y cada uno de los participantes se hayan confabulado en secreto para compartir sus fragmentos de clave privada, o que todos y cada uno de los participantes puedan haber tenido sus computadoras comprometidas por un adversario que haya robado todos los fragmentos de la clave privada.

Por lo tanto, también estamos explorando ideas a largo plazo que, si funcionan, podrían mitigar aún más este riesgo y otros riesgos como éste.

  • Tal vez podríamos aprovechar los modernos "Entornos de Ejecución Confiable'' tales como Intel SGX y ARM TrustZone para que incluso si un participante, o un ordenador comprometido que el participante esté usando, intenta extraer su fragmento de la clave privada, no pueda hacerlo. Quizás podríamos hacer que algunos participantes usen Intel SGX, otros usen ARM TrustZone y otros no utilicen ninguno de los dos, de modo que incluso si Intel SGX y ARM TrustZone se vieran ambos comprometidos, al atacante le sería aún imposible crear el subproducto de residuos tóxicos porque al menos uno de los otros participantes habrá destruido con éxito su fragmento.
  • Quizás podría haber una manera de extender repetidamente los parámetros públicos de SNARK con nuevos fragmentos de clave pública, hechos por nuevos participantes, de modo que un atacante fracasaría a menos que pudiera explotar la seguridad no sólo de todos los participantes originales sino también de todos los nuevos participantes.
  • Tal vez podría haber una manera de auditar el tamaño de la base monetaria Zcash, sin comprometer la privacidad de ningún usuario. De esa manera, la gente podría al menos decir: "Bueno, no podemos estar 100% seguros de que nadie haya robado los residuos tóxicos de la clave privada, pero al menos podemos estar seguros de que (por ahora) no lo han usado para falsificar dinero".
  • Tal vez podría surgir una nueva forma de SNARK cuyos parámetros públicos no estén relacionados con los residuos tóxicos de una clave privada. Nadie sabe a ciencia cierta si tal cosa es posible, pero los científicos, incluyendo algunos de los de nuestro equipo, continúan investigando activamente los límites de qué tipos de sistemas de prueba son posibles.

Recapitulación

Existe una especie de "residuo tóxico criptográfico", que si llegara a ser creado y utilizado, permitiría a un atacante falsificar moneda (aunque no le permitiría violar la privacidad de nadie). Nuestro plan para evitar que esto suceda, es utilizar una computación multi-partes segura en la que un conjunto de personas conocidas contribuyen cada una con un fragmento, de tal manera que si cualquiera de ellas destruye con éxito su fragmento, entonces los residuos tóxicos criptográficos nunca llegan a existir. También estamos trabajando en otras posibles defensas a largo plazo contra riesgos como este.

[*]Estoy haciendo una gran simplificación. Los parámetros públicos SNARK no son sólo una clave pública ECDSA, sino más bien un conjunto de un millón de claves públicas ECDSA, cada una de las cuales contiene una codificación de un cable específico en el circuito SNARK. Pero eso no importa ahora para el punto de este artículo.