A lo largo de este artículo, analizaremos qué son los TSS, qué ventajas potenciales pueden aportar en el ámbito del blockchain, cómo pueden implementarse en los clientes blockchain, cómo se relacionan con los Sistemas de Compartición de Secretos Shamir (Shamir Secret Sharing) y Multisig, cuáles son las distintas maneras de utilizarlos para la gestión de claves distribuidas y, finalmente, discutiremos sus riesgos y limitaciones.
El poder de la criptografía
Blockchain
En este artículo, nos centraremos en uno de dichos avances: las firmas con umbral (TSS) eficientes y seguras.
MPC y Esquemas de Firma con Umbral (TSS)
La computación multipartita (multi-party computation o MPC) es una rama de la criptografía que se originó a partir de la obra seminal de Andrew C. Yao, hace aproximadamente unos 40 años. En la MPC, un conjunto de actores que no confían los unos de los otros, intentan procesar de forma conjunta una función sobre sus inputs, manteniendo la privacidad del contenido de las mismas.
Por poner un ejemplo, digamos que "n" empleados de una empresa quieren saber quién de ellos es el que está cobrando más, pero sin confesarse los unos a los otros su salario real. En este caso, los inputs privados son los salarios, y el output será el nombre del empleado con el salario más elevado. Al realizar dicha computación mediante MPC logramos que ni un solo salario se filtre durante el proceso.
Las dos propiedades principales de la MPC son la corrección y privacidad:
Corrección: el output producido por un algoritmo es correcto (tal como se esperaba).
Privacidad: los datos de entrada secretos que están en posesión de una de las partes no se filtrarán a las otras.
A continuación, emplearemos la MPC para procesar una firma digital de manera distribuida. De esta forma, veremos cómo las propiedades anteriormente mencionadas pueden aplicarse a las firmas. Cabe recordar que, en el caso de estas últimas, nos encontramos con tres pasos:
Generación de la Clave: el primer paso es también el más complejo. Necesitamos generar una clave que será pública y se utilizará para verificar las futuras firmas. Pero también deberemos generar una secreto individual para cada una de las partes, que denominaremos "secret share" (porción secreta). En términos de corrección y privacidad, se dice que la función producirá la misma clave pública para todas las partes, y una "secret share" para cada una de ellas, por lo que: (1) privacidad: no se filtrarán entre las partes datos de las "secret shares", y (2)corrección: la clave pública es una función de las "secret shares".
Firma: este paso conlleva una función de generación de firmas. El input de cada una de las partes será su "secret share", creada como output del paso previo (generación de clave distribuida). Existe también un input público conocido por todos, que es el mensaje que se debe firmar. El output será una firma digital, y la propiedad de la privacidad garantizará que no se habrán producido filtraciones relativas a las "secret shares" durante la computación.
- Verificación: el algoritmo de verificación se mantiene tal como se presenta en la configuración clásica. Para ser compatible con las firmas de clave única, todo aquel que conozca la clave pública debería ser capaz de verificar y validar las firmas. Esto es exactamente lo que los nodos de validación de las blockchains hacen.
El nombre que damos a estas composiciones de generación de claves distribuidas (DKG) y firma distribuida es el de Esquemas de Firma con Umbral (TSS).
Combinar TSS con blockchains
Para explicarlo con mayor detalle, empezaremos describiendo la forma en que las nuevas direcciones se crean en el esquema blockchain clásico. En pocas palabras, podemos crear una dirección nueva generando una clave privada para, a continuación, computar la clave pública a partir de ella. Finalmente, la dirección pública se derivará de la clave pública.
Así, utilizando TSS, tendríamos un conjunto de "n" partes, cada una de ellas en posesión de una "secret share" de la clave privada, que computarán de forma conjunta la clave pública (sin revelarse entre sí las porciones individuales secretas). A partir de la clave pública, podemos derivar la dirección pública de la misma manera que en el sistema tradicional, lo que hace que la blockchain sea agnóstica respecto a la forma en que se genera la dirección. La ventaja es que la clave privada deja de ser un "single point of failure" (punto único de fallo), porque cada parte sólo dispondrá de una porción de la misma.
Lo mismo puede hacerse al firmar transacciones. En este caso, en lugar de que una única parte firme con su clave privada, ejecutaremos una generación de firmas distribuida entre múltiples partes. Por lo tanto, en la medida que un número suficiente de las partes actúe de forma honesta, cada una podrá producir una firma válida. Así que, nuevamente, hemos pasado de un esquema de computación local (single point of failure o punto único de fallo) a uno interactivo.
Es importante mencionar que la generación de claves distribuida puede realizarse de una manera que permite diferentes tipos de estructuras de acceso: la configuración general "t out of n" permitirá soportar hasta "t" fallos arbitrarios en operaciones relacionadas con la clave privada, sin comprometer la seguridad.
TSS vs. Multisig
Dicho de otro modo, tanto el multisig como las TSS están tratando esencialmente de alcanzar objetivos similares, pero las TSS están utilizando criptografía off-chain (fuera de cadena), mientras que el multisig sucede on-chain (en la cadena). Sin embargo, la blockchain necesita una forma de codificar multisig, lo que podría dañar la privacidad porque la estructura de acceso (número de firmantes) está expuesta en la blockchain. El coste de una transacción multisig es mayor porque la información sobre los diferentes firmantes también debe ser comunicada en la blockchain.
En TSS, los datos de los firmantes’ se guardan en una transacción con aspecto regular, reduciendo el costo y manteniendo la privacidad. Por otra parte, multisig puede ser no interactivo, lo que ahorra el problema de ejecutar una compleja capa de comunicación entre los diferentes firmantes.
TSS vs. Sistema de compartición de secretos de Shamir
El Sistema de compartición de secretos de Shamir (SSSS) proporciona una forma de almacenar la clave privada de una manera distribuida de tal manera que mientras la clave privada está en reposo , se almacena en múltiples ubicaciones. Hay dos diferencias entre SSSS y TSS:
Generación de claves: en SSSS, hay una única parte llamada el “distribuidor” que se encarga de generar las comparticiones secretas de la clave privada. Significa que en el momento de la generación de claves, la clave privada se genera en una única ubicación y luego se distribuye por el distribuidor a los diferentes lugares. En TSS, no hay ningún distribuidor porque su rol se distribuye de tal manera que la clave privada completa nunca se encuentra en una única ubicación.
Firma: en SSSS, las partes deben reconstruir la clave privada completa para firmar, lo que de nuevo da lugar a un único punto de fracaso cada vez que se necesita una firma. En TSS, la firma se realiza de forma distribuida sin nunca reconstruir las partes secretas.
Como podemos ver, en TSS la clave privada (que representa la seguridad del sistema) nunca se encuentra en una única ubicación durante toda su vida.
Carteras Threshold
En una cartera threshold, las cosas son más complejas. Aunque es posible generar una estructura HD, su generación debe ser computada de una manera distribuida, como otro protocolo MPC. Las partes deben decidir conjuntamente cuál es la próxima clave que se utilizará. En otras palabras, cada parte tendrá una frase de semilla propia. Las frases de semillas se generan por separado y nunca se combinan para que una sola parte no pueda derivar las claves privadas de su semilla.
Las carteras basadas en TSS también tienen una buena característica de seguridad, que es habilitando la rotación de claves privadas sin cambiar la clave pública y la dirección de blockchain correspondiente. La rotación de claves privadas, también conocida como intercambio secreto proactivo, es otro protocolo MPC que toma los recursos compartidos secretos como entrada y genera un nuevo conjunto de recursos compartidos secretos. Las antiguas claves secretas pueden ser eliminadas y las nuevas pueden ser utilizadas de la misma manera.
Esta estructura añade una dimensión de tiempo a la seguridad, lo que significa que un atacante debe estar en múltiples ubicaciones al mismo tiempo para atacar una cartera threshold. Combinar claves secretas antes de la rotación y después de la rotación no dará al atacante poder extra si desea falsificar una firma.
Una desventaja de este tipo de cartera es que la falta de una frase de semilla la hace incompatible con los sistemas de cartera de clave única. Así que es importante que consideres qué partes conservarán las claves secretas.
Hay algunas arquitecturas posibles:
TSS externalización: el usuario permitirá que “n” servidores ejecuten la computación en su nombre. Externalizar efectivamente la generación, gestión y firma clave a los proveedores de servicios que no son los propietarios de los activos, pero proporcionar una capa de seguridad a cambio de algún incentivo.
Usar múltiples dispositivos: El usuario ejecutará las TSS entre los dispositivos que poseen. Por ejemplo - una parte será un dispositivo IoT, otra parte será el móvil de usuario, otra parte su portátil, etc.
Hibrido: TSS se ejecutará tal que algunas partes están controladas por proveedores de servicios externos y algunas partes se ejecutan en dispositivos de propiedad del usuario.
El primer método permite la computación pesada de TSS desde el lado del cliente de usuario. Por otra parte, los proveedores de servicios pueden colisionar (asumimos que suficiente de ellos no son atacados al mismo tiempo, pero en la práctica, podrían) y robar los activos del usuario.
El segundo método da al usuario un control completo, pero hace que sea engorroso realizar transacciones ya que necesita múltiples dispositivos para estar en línea y comprometerse con la computación TSS.
La tercera opción se considera la mejor de ambos mundos, ya que da al usuario una forma fácil y rápida de realizar transacciones pero sin comprometerse a realizar transacciones sin la autorización del usuario.
TSS y contratos inteligentes
Riesgos
En conclusión
En este artículo, introdujimos los conceptos básicos del esquema de firma de umbral (TSS), el cual es un fascinante primitivo criptográfico que tiene el potencial de cambiar significativamente la forma en que utilizamos blockchain.
Lecturas adicionales: