Autor: Omer Shlomovits, ZenGo.
El esquema de firma de umbral (TSS) es una primitiva criptográfica para la generación y firma de claves distribuidas. El uso de TSS en clientes blockchain es un nuevo paradigma que puede aportar numerosos beneficios, especialmente en términos de seguridad. En un sentido más amplio, TSS puede influir en el diseño de sistemas de gestión de claves (como carteras criptográficas) y marcar el camino para el soporte nativo en casos de uso de DeFi. Dicho esto, TSS sigue siendo una tecnología nueva, por lo que también se deben considerar los riesgos y limitaciones.
En este artículo, cubriremos qué es un TSS, cuáles son las ventajas potenciales que aporta al espacio blockchain, cómo se puede implementar en un cliente blockchain, cómo se compara con el intercambio secreto de Shamir y Multisig, cuáles son las diferentes formas de use TSS para la gestión de claves distribuidas y finalmente discutimos los riesgos y limitaciones.
El poder de la criptografía
Para comprender TSS, primero necesitamos algunos conocimientos básicos de criptografía. Desde la década de 1970, cada vez más sistemas de Internet (como TLS y PGP) empleaban criptografía asimétrica, también conocida como criptografía de clave pública (PKC). PKC utiliza dos claves: una pública y otra privada. Si bien la clave pública no es ningún secreto y cualquiera puede publicarla y utilizarla, la clave privada es una información secreta que representa la seguridad del sistema.
El cifrado y las firmas digitales son los dos usos más comunes de PKC. Tanto los esquemas de cifrado como de firmas digitales se basan en conjuntos de tres algoritmos. El primero es la generación del par de claves pública y privada, el segundo es la generación de un texto cifrado/firma y el tercero es el proceso de descifrado/verificación. En lo que respecta a las firmas digitales, el algoritmo de firma requiere la clave privada, que sólo conoce su propietario, para producir una firma única. La firma se adjunta a un mensaje determinado de manera que cualquiera que posea la clave pública pueda verificar su autenticidad y corrección.
cadena de bloques
No hay duda de que blockchain es una tecnología muy poderosa. Proporciona una capa de consenso que organiza y registra eventos. Una infraestructura de este tipo nos brinda a nosotros, los usuarios, poder potencial para construir economías descentralizadas e incluso gobiernos. Sorprendentemente, la criptografía necesaria para ejecutar una cadena de bloques básica puede basarse únicamente en firmas digitales. En el contexto de una cadena de bloques, las claves privadas representan identidades, mientras que una firma es una declaración pública o un reclamo realizado por una identidad. La cadena de bloques ordenará las declaraciones y las validará según un conjunto de reglas que garantizan, entre otras cosas, que las firmas sean infalsificables y correctas.
En contraste con la criptografía más clásica utilizada en blockchain, la caja de herramientas criptográfica moderna incluye algunos trucos de magia increíbles: pruebas de conocimiento cero, cifrado homomórfico y computación multipartita, por nombrar algunos. Como vimos durante la última década, la investigación de blockchain impulsó enormemente la criptografía aplicada, con avances recientes en todo lo anterior y mucho más.
En este artículo, nos centraremos en uno de esos avances: las firmas de umbral seguras (TSS) eficientes.
MPC y el esquema de firma de umbral (TSS)
La computación multipartita (MPC) es una rama de la criptografía que comenzó con el trabajo fundamental de Andrew C. Yao, hace casi 40 años. En MPC, un conjunto de partes que no confían entre sí intentan calcular conjuntamente una función sobre sus entradas manteniendo esas entradas en privado.
Como ejemplo, digamos que n empleados de una empresa quieren saber quién cobra más, pero sin revelarse entre sí su salario real. Aquí las entradas privadas son salarios y la salida será el nombre del empleado con el salario más alto. Al hacer este cálculo usando MPC, obtenemos que no se filtra ni un solo salario durante el cálculo.
Las dos propiedades principales de MPC son la corrección y la privacidad:
Corrección: la salida producida por un algoritmo es correcta (como se esperaba).
Privacidad: los datos de entrada secretos que posee una parte no se filtrarían a las otras partes.
Usaremos MPC para calcular una firma digital de forma distribuida. Veamos cómo se pueden aplicar las propiedades anteriores a las firmas. Recordemos que, para las firmas, tenemos tres pasos:
Generación de Claves: el primer paso es también el más complejo. Necesitamos generar una clave que será pública y se utilizará para verificar firmas futuras. Pero también necesitamos generar un secreto individual para cada parte, al que llamaremos recurso compartido secreto. En términos de corrección y privacidad, decimos que la función generará la misma clave pública para todas las partes, y un secreto compartido diferente para cada una, de modo que: (1) privacidad: no se filtren datos compartidos secretos entre las partes, y (2) Corrección: la clave pública es una función de las acciones secretas.
Firma: este paso implica una función de generación de firma. La entrada de cada parte será su recurso compartido secreto, creado como resultado del paso anterior (generación de claves distribuidas). También hay un aporte público conocido por todos, cuál es el mensaje a firmar. El resultado será una firma digital y la propiedad de privacidad garantiza que no se produzca ninguna filtración de acciones secretas durante el cálculo.
Verificación: el algoritmo de verificación permanece como está en la configuración clásica. Para ser compatible con firmas de clave única, cualquier persona con conocimiento de la clave pública debería poder verificar y validar las firmas. Esto es exactamente lo que hacen los nodos de validación de blockchain.
Esquema de firma de umbral (TSS) es el nombre que le damos a esta composición de generación de claves distribuidas (DKG) y firma distribuida de un esquema de firma de umbral.
Combinando TSS con blockchains
La forma natural en que se puede utilizar TSS en una cadena de bloques es cambiando un cliente de cadena de bloques para generar claves y firmas utilizando TSS. Aquí utilizamos el término cliente blockchain para referirnos al conjunto de comandos ejecutados por un nodo completo. En la práctica, la tecnología TSS nos permite reemplazar todos los comandos relacionados con claves privadas con cálculos distribuidos.
Para explicarlo con más detalle, comenzamos describiendo brevemente cómo se crean nuevas direcciones en el diseño clásico de blockchain. En pocas palabras, podemos crear una nueva dirección generando una clave privada y luego calculando la clave pública a partir de la clave privada. Finalmente, la dirección de blockchain se deriva de la clave pública.
Ahora, usando TSS, tendríamos un conjunto de n partes calculando conjuntamente la clave pública, cada una con una parte secreta de la clave privada (las partes individuales no se revelan a las otras partes). A partir de la clave pública, podemos derivar la dirección de la misma manera que en el sistema tradicional, lo que hace que la cadena de bloques sea independiente de cómo se genera la dirección. La ventaja es que la clave privada ya no es un único punto de falla porque cada parte posee solo una parte de ella.
Lo mismo se puede hacer al firmar transacciones. En este caso, en lugar de que una sola parte firme con su clave privada, ejecutamos una generación de firma distribuida entre varias partes. Por lo tanto, cada parte puede presentar una firma válida siempre que un número suficiente de ellas actúen con honestidad. Nuevamente pasamos del cálculo local (punto único de falla) a uno interactivo.
Es importante mencionar que la generación de claves distribuidas se puede realizar de manera que permita diferentes tipos de estructuras de acceso: la configuración general “t de n” podrá soportar hasta t fallas arbitrarias en operaciones relacionadas con claves privadas, sin comprometiendo la seguridad.
TSS frente a multifirma
Algunas cadenas de bloques ofrecen la funcionalidad TSS como parte integrada o programable del software. A esta funcionalidad la llamamos multifirma o multifirma. Para comprender mejor las diferencias, podemos considerar multisig como un TSS en la capa de aplicación de blockchain.
Dicho de otra manera, tanto multisig como TSS esencialmente intentan lograr objetivos similares, pero TSS utiliza criptografía fuera de la cadena, mientras que multisig ocurre dentro de la cadena. Sin embargo, la cadena de bloques necesita una forma de codificar multifirma, lo que podría dañar la privacidad porque la estructura de acceso (número de firmantes) está expuesta en la cadena de bloques. El costo de una transacción multifirma es mayor porque la información sobre los diferentes firmantes también debe comunicarse en la cadena de bloques.
En TSS, los datos de los firmantes se integran en una transacción que parece regular, lo que reduce los costos y mantiene la privacidad. Por otro lado, multisig puede no ser interactivo, lo que evita la molestia de ejecutar una capa de comunicación compleja entre los diferentes firmantes.
El principal punto de diferencia es que multisig es específico de blockchain y debe reimplementarse para cada blockchain y, en algunos casos, no es compatible en absoluto. Por el contrario, TSS se basa en criptografía pura, por lo que siempre es posible recibir soporte. Puede encontrar un excelente artículo con ilustraciones sobre las diferencias aquí.
Esquema de intercambio secreto de TSS vs. Shamir
El esquema de intercambio de secretos (SSSS) de Shamir proporciona una manera de almacenar la clave privada de manera distribuida, de modo que mientras la clave privada está en reposo, se almacena en varias 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 acciones 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 el distribuidor la distribuye a las diferentes ubicaciones. En TSS, no hay ningún distribuidor, ya que su función se distribuye de manera que la clave privada completa nunca se encuentre en una única ubicación.
Firma: en SSSS, las partes deben reconstruir la clave privada completa para poder firmar, lo que nuevamente resulta en un único punto de falla cada vez que se necesita una firma. En TSS, la firma se realiza de forma distribuida sin reconstruir nunca las acciones secretas.
Como podemos ver, en TSS la clave privada (que representa la seguridad del sistema) nunca está en un único lugar durante toda su vida.
Carteras de umbral
Una billetera basada en tecnología TSS es un poco diferente a las billeteras de criptomonedas tradicionales. Por lo general, una billetera convencional genera una frase inicial y la usa para derivar las direcciones de manera determinista. Posteriormente, el usuario puede utilizar esta estructura jerárquica determinista (HD) para 1) alcanzar las claves privadas que corresponden a las direcciones de la billetera y firmar transacciones con ellas, y 2) recuperar todas las claves de la billetera usando la frase inicial.
En una billetera umbral, las cosas son más complejas. Aunque es posible generar una estructura HD, su generación debe calcularse de forma distribuida, como otro protocolo MPC. Las partes deben decidir conjuntamente cuál será la siguiente clave a utilizar. En otras palabras, cada parte tendrá su propia frase inicial. Las frases semilla se generan por separado y nunca se combinan, de modo que una parte por sí sola no pueda derivar las claves privadas de su semilla.
Las billeteras basadas en TSS también tienen una característica de seguridad interesante, que permite la rotación de claves privadas sin cambiar la clave pública correspondiente y la dirección de blockchain. La rotación de claves privadas, también conocida como intercambio proactivo de secretos, es otro protocolo MPC que toma los recursos compartidos secretos como entrada y genera un nuevo conjunto de recursos compartidos secretos. Los antiguos recursos compartidos secretos se pueden eliminar y los nuevos se pueden utilizar de la misma manera.
Esta estructura añade una dimensión temporal a la seguridad, lo que significa que un atacante debe estar en varias ubicaciones al mismo tiempo para atacar una billetera de umbral. Combinar acciones secretas antes y después de la rotación no le dará al atacante ningún poder adicional si quiere falsificar una firma.
Una desventaja de este tipo de billetera es que la falta de una frase inicial la hace incompatible con los sistemas de billetera de una sola clave. Por eso es importante considerar qué partes tendrán las acciones secretas.
Hay algunas arquitecturas posibles:
Subcontratación de TSS: el usuario permitirá que "n" servidores ejecuten el cálculo en su nombre. Subcontratar eficazmente la generación, gestión y firma de claves a proveedores de servicios que no son propietarios de los activos pero proporcionan una capa de seguridad a cambio de algún incentivo.
Usando múltiples dispositivos: El usuario ejecutará el TSS entre los dispositivos que posee. Por ejemplo, una parte será algún dispositivo IoT, otra parte será el usuario móvil, otra parte su computadora portátil, etc.
Híbrido: TSS se ejecutará de manera que algunas partes estén controladas por proveedores de servicios externos y otras se ejecuten en dispositivos propiedad del usuario.
El primer método descarga el pesado cálculo de TSS desde el lado del cliente del usuario. Por otro lado, los proveedores de servicios pueden confabularse (suponemos que muchos de ellos no son atacados al mismo tiempo, pero en la práctica podrían hacerlo) y robar los activos del usuario.
El segundo método le brinda al usuario control total, pero hace que realizar transacciones sea engorroso, ya que se necesitan varios dispositivos para conectarse y participar con el cálculo de TSS.
La tercera opción se considera lo mejor de ambos mundos, ya que brinda al usuario una manera fácil y rápida de realizar transacciones, pero sin comprometer la posibilidad de realizar transacciones sin la autorización del usuario.
TSS y contratos inteligentes
A lo largo de los años, los investigadores han encontrado muchos usos para las firmas digitales y algunos sorprendentemente no son triviales. Como se mencionó, TSS es una primitiva criptográfica que puede aumentar considerablemente la seguridad. En el contexto de las cadenas de bloques, podemos decir que muchas funcionalidades pueden reemplazarse con criptografía basada en TSS. Se pueden crear aplicaciones descentralizadas, soluciones de escalamiento de capa 2, intercambios atómicos, mezcla, herencia y mucho más sobre un marco TSS. Esto eventualmente permitiría que las costosas y riesgosas operaciones de contratos inteligentes en cadena sean reemplazadas por alternativas más baratas y confiables.
Para dar algunos ejemplos concretos: Multi-Hop Locks utiliza firmas bipartitas de manera inteligente y puede usarse como una alternativa a la red Lightning de Bitcoin con una red de canales de pago más segura y privada. ShareLock es probablemente la solución de mezcla en cadena más barata para Ethereum, basada en la verificación de una firma de umbral único.
Riesgos
En los últimos años, hubo un aumento significativo en las implementaciones de TSS. Sin embargo, como tecnología relativamente nueva, todavía tiene algunas limitaciones y preocupaciones. En comparación con la criptografía de clave pública clásica, los protocolos TSS pueden ser muy complejos y aún deben ser "probados en batalla". Por lo general, TSS requiere suposiciones criptográficas adicionales y más débiles en comparación con las firmas digitales simples. Como resultado, ahora se están descubriendo vectores de ataque criptográfico que no existían en las configuraciones tradicionales (consulte esta presentación de Breaking Bitcoin Conference 2019). Los ingenieros de seguridad y los criptógrafos aplicados pueden ayudar a implementar TSS de forma segura en su sistema.
En el lado positivo, las implementaciones nuevas y existentes se están fortaleciendo debido a un aumento en las contribuciones de calidad, revisiones por pares, auditorías y mejoras en el rendimiento algorítmico.
Pensamientos finales
En este artículo, presentamos los conceptos básicos del esquema de firma de umbral (TSS), que es una primitiva criptográfica fascinante que tiene el potencial de cambiar significativamente la forma en que usamos blockchain.
Dado que este artículo no analiza el umbral ECDSA que se puede utilizar en Binance Chain y Bitcoin, los interesados pueden consultar la siguiente lista de artículos recientes. Además, si desea jugar con algunas implementaciones de TSS, puede encontrar un código para la billetera Binance Chain de dos partes aquí o probar la billetera ZenGo, que utiliza el método híbrido para proporcionar una billetera Binance Chain de dos partes sin custodia.
Otras lecturas:
Firma ECDSA bipartita rápida y segura
ECDSA multipartita rápida y segura con práctica generación de claves distribuidas y aplicaciones para la custodia de criptomonedas
ECDSA bipartita de sistemas Hash Proof e instanciaciones eficientes
Umbral ECDSA multipartito rápido con configuración rápida sin confianza
ECDSA de umbral bipartito seguro a partir de supuestos de ECDSA
Umbral ECDSA a partir de supuestos ECDSA: el caso multipartidista

