Ruta práctica: activos digitales en la operación

Artículo 3 de 12

25%

completado al llegar aquí

Sistemas distribuidosNota de investigación21 min de lectura

Tipos de firma: multifirma frente a MPC

Multifirma on-chain tipo Safe frente a firma por umbral MPC/TSS: soporte de redes, visibilidad en la cadena, costo y dónde se aplica la política de aprobación.

Un retiro de 250.000 USDC desde la wallet de tesorería necesita dos aprobaciones: la de la tesorera y la del director financiero. Se puede montar de dos maneras. En la primera, la wallet es un contrato en Ethereum que solo ejecuta la transferencia si recibe dos firmas válidas de sus dueños; cualquiera puede ver en la cadena quiénes son los dueños y cuántas firmas hacen falta. En la segunda, la wallet es una dirección común cuya llave está repartida en fragmentos; dos fragmentos colaboran fuera de la cadena y producen una sola firma. La red ve una transferencia como cualquier otra.

Las dos exigen "dos de tres". Lo que cambia es dónde se verifica esa regla, y eso tiene consecuencias en redes soportadas, costo, auditoría y en cómo se cambian los firmantes. Este módulo parte de la llave ya custodiada del capítulo anterior y termina con una matriz de decisión por caso de uso.

Brújula de lectura

Actor, evidencia y estado

Antes de avanzar, ubica quién actúa, qué prueba queda y qué parte del sistema cambia.

Actor

Quórum de firmantes

Dueños de un contrato multifirma o poseedores de fragmentos MPC; además, aprobadores de la política.

Evidencia

Varias firmas en la cadena o una sola firma

Multifirma deja el quórum visible; MPC deja una firma ordinaria y la prueba del quórum vive en el proveedor.

Estado

Dueños y umbral, o fragmentos

En multifirma se cambian con una transacción; en MPC, fuera de la cadena.

Firma simple, multifirma y firma por umbral

Una firma simple es lo que ya conocemos: una llave privada, una firma, una dirección. Si esa llave se compromete, los fondos se van; si se pierde, se quedan bloqueados. Las otras dos familias reparten ese poder entre varias partes.

La multifirma (multisig) exige m firmas válidas de un conjunto de n llaves independientes, y la regla se verifica en la cadena. Bitcoin la tiene de forma nativa: en 2011, BIP-11 definió como transacción estándar el script m {pubkey}...{pubkey} n OP_CHECKMULTISIG, con ejemplos como un 2 de 3 entre comprador, vendedor y árbitro. En Ethereum la multifirma no está en el protocolo: la implementa un contrato. El más usado es Safe, que guarda una lista de dueños y un umbral, y ejecuta una transacción cuando ese número de dueños la confirma.

La firma por umbral (TSS, threshold signature scheme), que los proveedores suelen llamar MPC, reparte una sola llave en fragmentos. Según NIST, en un esquema con umbral k, cualquier grupo de k participantes honestos puede firmar sin reconstruir la llave, y un grupo menor no puede firmar ni aprender nada de ella. El resultado es una firma ordinaria, indistinguible de la de una llave simple. Las firmas por umbral y agregadas, explicadas desde el mecanismo, están en firmas umbral, agregadas y AggQC.

Figura 1

El mismo retiro 2 de 3, firmado de dos maneras

Fuentes:

[2][3]
El mismo retiro 2 de 3, firmado de dos maneras
Cómo leer esta figura

Dos carriles horizontales. Carril superior, multifirma on-chain con contrato tipo Safe: las cajas dueño A y dueño B envían flechas a una caja de dos firmas ECDSA independientes; de ahí una flecha rotulada una transacción llega a la caja contrato verifica umbral y dueños, y luego a una caja verde: la red ve dos firmas, dueños y umbral públicos. Carril inferior, firma por umbral MPC/TSS: fragmento 1 y fragmento 2 envían flechas a protocolo MPC fuera de la cadena; una flecha rotulada combina lleva a una firma ordinaria de una sola llave, y luego a una caja verde: la red ve una firma, el quórum no es visible. Una nota final dice que en ambos casos la política de aprobación vive antes de la firma y que solo en el primero el umbral también se verifica en la cadena.

Visual original de TrautsLab. Con multifirma, dos firmas independientes llegan al contrato, que verifica el umbral en la cadena. Con firma por umbral, dos fragmentos combinan su trabajo fuera de la cadena y la red solo ve una firma ordinaria.
Cargando escena animada...

Un matiz evita una confusión frecuente: "multifirma" no siempre significa "visible". En Bitcoin, el esquema MuSig2 permite que varios firmantes produzcan una sola llave pública agregada y una sola firma Schnorr; para un observador, la salida es indistinguible de una de un solo firmante. Lo que define la familia no es el nombre comercial, sino quién verifica el quórum.

Cuatro criterios: redes, visibilidad, costo y política

Redes soportadas. La multifirma depende de cada cadena: en Bitcoin es nativa; en Ethereum y redes compatibles hace falta desplegar un contrato en cada una; en otras puede no existir. La firma por umbral solo necesita que el protocolo MPC del proveedor soporte el algoritmo de firma de la red (por ejemplo ECDSA o EdDSA), así que una misma infraestructura cubre muchas cadenas. BitGo lo resume en su documentación: la mayoría de las cadenas UTXO soportan multifirma nativa, las cadenas de cuentas como Ethereum soportan MPC, y en algunas de estas ofrece multifirma mediante contratos.

Visibilidad en la cadena. Con multifirma, dueños, umbral y cada cambio de configuración quedan registrados en la cadena: un auditor puede verificarlos sin pedir nada al proveedor. Con MPC, la cadena solo muestra que "esta dirección firmó"; la prueba de qué fragmentos y qué aprobadores participaron vive en los registros del proveedor. Para auditoría, eso significa exigir esos registros por contrato.

Costo. Una transacción multifirma lleva más datos de firma o ejecuta código de verificación, y paga más comisión que una transferencia simple; una firma por umbral cuesta lo mismo que una firma simple. BitGo lo plantea igual: la multifirma puede tener costos mayores porque cada firma se publica, y MPC costos menores porque se publica una sola. Cuánto cuesta verificar distintos esquemas de firma se compara en costes computacionales: BLS frente a Ed25519.

Aplicación de la política. Un contrato como Safe puede añadir reglas propias: los guards revisan cada transacción antes y después de ejecutarla, y los modules permiten límites de gasto o pagos recurrentes. Con MPC, la política vive en la infraestructura del proveedor, antes de que los fragmentos firmen. En ambos casos conviene separar dos quórums: el de aprobación (quién debe decir que sí, según monto y destino) y el de firma (cuántas partes criptográficas deben participar). El de aprobación lo diseña negocio; el de firma, seguridad.

Cambiar firmantes, perder uno y otros riesgos

Escenario: el director financiero deja la empresa. En una multifirma, su llave es uno de los dueños del contrato. Hay que enviar una transacción, aprobada por el umbral vigente, que lo quite y añada a su reemplazo. La dirección de la wallet no cambia, y el cambio queda en la cadena con fecha y firmas. En MPC, su participación es un fragmento o una aprobación en la plataforma del proveedor: se revoca y se emite otro fuera de la cadena, sin costo de comisión, y la evidencia es el registro del proveedor.

Los modules de Safe merecen una regla propia. Un módulo habilitado puede ejecutar transacciones a través de la cuenta sin pasar por el umbral de dueños; se añade o se quita con la confirmación del umbral, y la cuenta emite eventos cuando eso ocurre. Habilitar un módulo equivale a crear un nuevo camino de gasto: debe tratarse como un cambio de política mayor. Con los guards el riesgo es el opuesto: un guard defectuoso puede bloquear todas las transacciones de la cuenta, y Safe pide auditarlo y prever cómo recuperarse.

Las dos familias se pueden combinar. Los dueños de un Safe pueden ser cuentas comunes, otros contratos o incluso passkeys. Nada impide que cada dueño sea una dirección protegida por MPC o por un HSM; si un proveedor concreto lo soporta como flujo operativo es un punto a validar. Y cuando el contrato debe aceptar firmas de otro contrato, entra EIP-1271, que define una función isValidSignature para que un contrato declare si una firma hecha "en su nombre" es válida.

Dos lecturas de la serie de investigación completan el mapa: cuentas inteligentes con ERC-4337, donde las reglas de firma son programables, y EIP-7702, donde una cuenta común delega su código pero la llave original conserva todo el poder. Para multifirma como control de permisos en contratos, ver control de acceso en contratos.

Elegir el umbral m de n

Un umbral m de n tolera dos fallos distintos. Tolera n − m pérdidas: con 2 de 3 se puede perder una llave y seguir firmando. Y tolera m − 1 compromisos: con 2 de 3, un atacante con una llave no firma solo. Subir m protege más contra robo, pero hace más frágil la disponibilidad; subir n sin subir m hace lo contrario. Por qué un quórum protege aunque algunos participantes fallen se explica con detalle en quórums en acción.

UmbralPérdidas toleradasCompromisos toleradosUso típico
1 de 100Solo pruebas
2 de 201Cliente y proveedor, sin respaldo: frágil
2 de 311Wallet operativa con respaldo
3 de 522Tesorería con varios directivos

La regla que más se olvida es la de independencia: un 2 de 3 donde dos llaves están en el mismo servidor, o en manos de la misma persona, es en la práctica un 1 de 2. Por eso BitGo, en sus wallets de custodia, reparte las tres llaves de modo que nadie controle más de una.

BitGo por dentro: TSS en MPC y contrato en multifirma EVM

Escenario: el equipo del Middleware Blockchain abre una wallet USDC en Ethereum con BitGo y el formulario pregunta "multisig o MPC". La respuesta cambia qué ve la cadena, qué puede hacer BitGo sin nosotros y cómo se audita. Esta sección resume cómo lo implementa BitGo según su propia documentación, para que la elección sea explícita.

MPC en BitGo es firma por umbral

BitGo dice que la implementación concreta que usa para MPC es la firma por umbral (TSS) y que sus wallets MPC firman con 2 de 3 fragmentos de llave (keyshares): usuario, respaldo y BitGo. Cada parte genera su fragmento por separado y la llave privada completa nunca se crea. Añade una advertencia propia: sus fragmentos son distintos de los "shards" de otras plataformas y, aun combinados, no producen una llave privada visible.

Como referencias de su implementación, la misma página enlaza un repositorio de Silence Laboratories titulado "Multi-Party-TSS (ECDSA-DKLs23)" y el artículo de Doerner, Kondi, Lee y shelat sobre ECDSA por umbral de dos partes construido sobre los supuestos de ECDSA. Para el equipo, la consecuencia práctica es que la familia criptográfica es pública y revisable; qué versión exacta corre en producción y con qué auditorías es un punto a validar con el proveedor.

BitGo resume las diferencias con sus propias palabras, que conviene copiar tal cual en la matriz de decisión: la multifirma es "criptografía en la cadena" y MPC "criptografía fuera de la cadena"; en multifirma cada firma se publica y el costo puede ser mayor, en MPC se publica una sola firma; y en multifirma partes de la transacción sin firmar, como el nonce o la comisión, pueden cambiar durante el proceso de firma, mientras que en MPC ninguna parte puede cambiar. Esa última diferencia importa en operación: con MPC, si la comisión de red sube mientras se reúnen las firmas, hay que reiniciar la firma, no ajustarla.

Multifirma EVM: un contrato con reglas por método

En Ethereum la multifirma de BitGo es un contrato que guarda las tres direcciones (usuario, respaldo y BitGo) en un arreglo allowedSigners, y cada método exige su propio número de firmantes. Enviar el activo nativo con SendMultiSig exige 2 de 3. Consolidar tokens ERC-20 desde una dirección forwarder con flushForwarderTokens exige solo 1. BitGo explica que por eso puede consolidar sin nuestra firma y, a la vez, por qué no puede retirar fondos de la wallet.

La seguridad de esa firma única no viene del quórum, sino del destino: el contrato forwarder de cada dirección de recepción solo puede enviar a la dirección base de su wallet. Es el mismo principio de los guards de Safe aplicado al revés: en lugar de exigir más firmas, se restringe a dónde puede ir el dinero. Para la auditoría, la regla "2 de 3" del contrato no es uniforme; hay que leerla por método. El circuito completo de consolidación y gas se trata en el módulo de wallets.

Cómo lo resuelven Fireblocks, BitGo y Kaleido

Fireblocks usa MPC (su protocolo MPC-CMP) para ECDSA y EdDSA, y declara preferirlo frente a multifirma por ser independiente del protocolo, más flexible y más barato al firmar fuera de la cadena; es su posición, no un criterio neutral. Su motor de políticas decide si una transacción se bloquea, se aprueba o pide firmantes adicionales según origen, destino, activo y monto, y un quórum de administradores aprueba cambios como añadir destinos o modificar políticas.

Su documentación del API Co-signer separa bien los dos quórums: la firma usa los fragmentos MPC (uno del cliente y otros en co-firmantes de Fireblocks), mientras que las aprobaciones de transacciones y cambios se firman con una llave de aprobación propia de cada usuario y no pasan por MPC. Si Fireblocks soporta operar una multifirma tipo Safe como flujo propio es un punto a validar con el proveedor.

BitGo ofrece ambas familias, en sus wallets en cadena con un 2 de 3 de llaves de usuario, respaldo y BitGo. Documenta las diferencias: en multifirma cada parte firma de forma asíncrona y en la cadena; en MPC firman de forma síncrona fuera de la cadena y resulta una sola firma; en multifirma algunos campos (nonce, comisión) pueden cambiar durante la firma y en MPC no. En Ethereum, su multifirma es un contrato con una lista allowedSigners. Sus reglas de política filtran por destino, iniciador, porcentaje del saldo, monto, velocidad o respuesta de un webhook propio, pero no aplican a las recuperaciones con llaves de usuario y respaldo.

Kaleido firma con llaves en el HSM o almacén del cliente y aplica la política en la capa de firma, escrita como código en Rego sobre Open Policy Agent. Soporta maker/checker, aprobación de cuatro ojos, cadenas de varios niveles y quórum de aprobadores, condicionados por activo, wallet, red o monto. Es un quórum de aprobación sobre una firma simple en HSM; si ofrece firma por umbral MPC o multifirma en la cadena es un punto a validar.

Decisiones del módulo y entregable

Matriz de decisión

Qué tipo de firma por caso de uso

Recomendado

Retiros de clientes, muchas redes

Firma por umbral (MPC) con política de aprobación por monto.

Ideal para
Wallets calientes que firman a menudo en Bitcoin, Ethereum, Solana y otras.
Ojo con
La evidencia del quórum depende de los registros del proveedor: exigirlos por contrato.

Tesorería en Ethereum con aprobación directiva

Multifirma en contrato tipo Safe, con dueños protegidos por HSM o MPC.

Ideal para
Montos altos, baja frecuencia, auditoría que quiere verificar en la cadena.
Ojo con
Costo mayor por transacción, despliegue por red, y módulos que abren caminos de gasto.
Precaución

Reserva fría en Bitcoin

Multifirma nativa 2 de 3 o MPC, con llaves generadas fuera de línea.

Ideal para
Fondos que se mueven pocas veces al año.
Ojo con
La recuperación puede saltar las políticas del proveedor: controlarla aparte.
Punto de partida para la discusión; cada fila se confirma con el proveedor y con las redes soportadas.
Lista de verificación

Checklist del módulo

0 de 6 revisados

El entregable es la matriz de decisión firma por caso de uso. La plantilla se completa con una fila por wallet; las columnas de costo, auditabilidad y redes son las que el equipo compara antes de elegir.

Caso de usoTipo de firmaUmbralRedesCosto por transacciónAuditabilidadProveedorEstado
Retiros de clientesMPC2 de 3CompletarIgual a firma simpleRegistros del proveedorCompletarA validar
Tesorería en EthereumMultifirma (Safe)3 de 5Ethereum y capas 2 elegidasMayor que firma simpleEn la cadenaCompletarA validar
Reserva fría en BitcoinMultifirma nativa o MPC2 de 3BitcoinSegún familiaSegún familiaCompletarA validar

El próximo módulo, Wallets hot, warm y cold, usa estas piezas para decidir cuánto dinero puede estar expuesto en cada wallet y cuántas aprobaciones exige cada movimiento.

Referencias

Bibliografía académica

Formato IEEENumerado para ingeniería, sistemas y protocolos.
  1. [1]

    G. Andresen, "BIP-11: M-of-N Standard Transactions," Bitcoin Improvement Proposals, 2011.

    Script m-de-n con OP_CHECKMULTISIG como transacción estándar.

  2. [2]

    Safe Ecosystem Foundation, "Smart Account Overview," Safe Docs. [Online]. Available: https://docs.safe.global/advanced/smart-account-overview

    Dueños, umbral, ejecución tras confirmación; dueños pueden ser EOAs, contratos o passkeys.

  3. [3]

    L. T. A. N. Brandão, M. Davidson and A. Vassilev, "NIST Roadmap Toward Criteria for Threshold Schemes for Cryptographic Primitives," NISTIR 8214A, 2020, doi: 10.6028/NIST.IR.8214A.

    Esquemas de umbral: k de n para firmar sin reconstruir la llave.

  4. [4]

    J. Nick, T. Ruffing and E. Jin, "BIP-327: MuSig2 for BIP340-compatible Multi-Signatures," Bitcoin Improvement Proposals, 2022.

    Llave agregada y firma única; salidas indistinguibles de las de un solo firmante.

  5. [5]

    BitGo, "BitGo Wallet Types," BitGo Developer Portal. [Online]. Available: https://developers.bitgo.com/docs/wallet-types

    docsID: BITGO-WALLET-TYPESAbrir fuente (abre en otra pestaña)

    Multifirma frente a MPC: redes, firma síncrona o asíncrona, costo, flexibilidad; contrato multifirma en Ethereum.

  6. [6]

    Safe Ecosystem Foundation, "Safe Guards," Safe Docs. [Online]. Available: https://docs.safe.global/advanced/smart-account-guards

    Restricciones sobre el esquema n de m; un guard defectuoso puede bloquear la cuenta.

  7. [7]

    Safe Ecosystem Foundation, "Safe Modules," Safe Docs. [Online]. Available: https://docs.safe.global/advanced/smart-account-modules

    Módulos que ejecutan transacciones con execTransactionFromModule; se habilitan con el umbral de dueños.

  8. [8]

    F. Giordano, M. Condon, P. Castonguay, A. Bandeali, J. Izquierdo and B. Masius, "ERC-1271: Standard Signature Validation Method for Contracts," Ethereum Improvement Proposals, 2018.

    isValidSignature(hash, signature) para validar firmas de contratos.

  9. [9]

    Fireblocks, "What Is Fireblocks?," Fireblocks Developer Docs. [Online]. Available: https://developers.fireblocks.com/docs/what-is-fireblocks

    MPC-CMP, motor de políticas, quórum de administradores; posición frente a multifirma.

  10. [10]

    Fireblocks, "API Co-signers Architecture Overview," Fireblocks Developer Docs. [Online]. Available: https://developers.fireblocks.com/cosigners/overview/cosigner-architecture-overview

    Firma con fragmentos MPC frente a aprobaciones con llave propia; callback handler; espacios fríos.

  11. [11]

    BitGo, "Policies Overview," BitGo Developer Portal. [Online]. Available: https://developers.bitgo.com/docs/policies-overview

    Tipos de reglas de política; las recuperaciones con llaves de usuario y respaldo las omiten.

  12. [12]

    Kaleido, "Kaleido Custody," kaleido.io. [Online]. Available: https://www.kaleido.io/product/custody

    Políticas en Rego/OPA en la capa de firma; maker/checker, cuatro ojos, quórum de aprobación; HSM del cliente.

  13. [13]

    J. Doerner, Y. Kondi, E. Lee and a. shelat, "Secure Two-party Threshold ECDSA from ECDSA Assumptions," Cryptology ePrint Archive, Paper 2018/499, 2018.

    Artículo que BitGo enlaza como referencia de su implementación MPC (familia DKLs).

  14. [14]

    BitGo, "Consolidations," BitGo Developer Portal. [Online]. Available: https://developers.bitgo.com/docs/consolidations

    docsID: BITGO-CONSOLIDATIONSAbrir fuente (abre en otra pestaña)

    Contratos forwarder de una sola firma que solo envían a la dirección base; consolidación automática en EVM.

Fuentes primarias, papers seminales y especificaciones técnicas citadas en esta investigación.

Rutas vecinas

Si este tema te abrió hambre, sigue por aquí.

Series y labs que comparten área o dependen de esta ruta. Pocas opciones, para no convertir la curiosidad en menú infinito.

Sigue leyendo

Ideas conectadas con este artículo

Una ruta corta para continuar sin abrir veinte pestañas y perder el hilo.

Los comentarios se cargan al final de la lectura para no meter peso antes de tiempo.