Hechos clave:
La vulnerabilidad afecta a wallets que utilizan protocolos de computación de múltiples partes (MPC).
Los atacantes podrían extraer claves privadas de wallets que usen los protocolos GG18 y GG20.
Una investigación de Fireblocks descubrió una vulnerabilidad que afecta a, al menos, 16 wallets de Bitcoin, Ethereum y otras criptomonedas que utilizan computación multiparte (MPC por sus siglas en inglés). La vulnerabilidad también afecta a 5 librerías de MPC de código abierto. Entre los afectados se encuentran binance, Coinbase, WaaS y ZenGo, cuyos errores ya fueron corregidos por sus respectivos programadores.
De acuerdo con el equipo de Fireblocks, “esta vulnerabilidad recién descubierta permite a un atacante extraer una clave privada completa de cualquier wallet, utilizando los protocolos GG18 y GG20”. Advierten que la vulnerabilidad, denominada BitForge, se encontró a nivel de pseudocódigo y todos los proveedores de servicios de custodia de criptomonedas que implementan el protocolo MPC deben considerarse vulnerables.
Un gran número de personas podrían estar en riesgo en este momento, debido a que el protocolo MPC es ampliamente usado en el ecosistema por distintas wallets.
Si se explota, la vulnerabilidad permite que un actor de amenazas interactúe con los signatarios en el protocolo MPC para robar sus fragmentos secretos y, en última instancia, obtener la clave secreta maestra. La gravedad de la vulnerabilidad depende de los parámetros de implementación, por lo que diferentes opciones de parámetros dan lugar a diferentes ataques con diversos grados de esfuerzo/recursos necesarios para extraer la clave completa. Algunas implementaciones son vulnerables a la extracción de claves en 16 firmas, mientras que otras podrían requerir hasta mil millones de firmas.
Fireblocks, firma de ciberseguridad.
El problema se etiquetó como una vulnerabilidad del «día cero», lo que significa que los proyectos no habían identificado previamente las fallas.
Los investigadores ejecutaron un proceso de divulgación responsable que incluye a “wallets, blockchain, bibliotecas en paralelo”.
A pesar de que encontraron numerosos productos afectados, asumen que otros productos pueden correr la misma suerte, por lo que no divulgarán el alcance de la investigación hasta que los involucrados corrijan los errores. Según el proceso de divulgación responsable, los programadores tienen un periodo de 90 para resolver el problema.
Librerías de código abierto afectadas. Fuente: Fireblocks.
Vulnerabilidad de computación multiparte o MPC
La computación multiparte se basa en dos protocolos: GG18 y GG20, ampliamente utilizados en la actualidad para proporcionar la capacidad de que varias partes puedan firmar una clave pública generada con el algoritmo de curva elíptica ECDSA.
ECDSA es un algoritmo de firma digital basado en criptografía que se utiliza para firmar mensajes digitales, lo que permite al remitente autenticar el mensaje y garantizar que no ha sido alterado.
ECDSA es un algoritmo seguro y eficiente, y se utiliza en una variedad de aplicaciones, incluidas Bitcoin, Ethereum y otras criptomonedas. Por este motivo la vulnerabilidad es potencialmente peligrosa.
MPC GG18 y GG20 son protocolos de gestión de claves de múltiples participantes (MPC) que se utilizan para proteger las claves privadas de una wallet. MPC GG-18 es un protocolo basado en umbrales, lo que significa que se requiere un número determinado de participantes para firmar una transacción. MPC GG-20 es un protocolo basado en anillos, lo que significa que las transacciones se firman por un anillo de participantes, y no se puede determinar quién realizó la transacción.
Estos protocolos se basan en la concept de que se puede dividir una clave privada en múltiples partes y almacenarlas en diferentes ubicaciones. Para firmar una transacción, se necesitan todas las partes de la clave privada. Esto hace que sea muy difícil robar la clave privada, ya que se necesitaría acceder a todas las partes de la clave privada.
Sin embargo, el principio no se cumplía por completo. “La vulnerabilidad se origina cuando las partes no verifican si el módulo de Paillier del atacante (…) tiene factores [primos] pequeños o si es un biprimo”, explican los investigadores de Fireblocks en un documento técnico.
La clave pública de Paillier es una clave de criptografía asimétrica que se utiliza en el sistema de criptografía Paillier. La clave pública se genera a partir de dos números primos grandes, y se puede compartir públicamente. La clave privada se genera a partir de la clave pública, y se mantiene en secreto.
Como explican los investigadores, los atacantes podrían realizar dos tipos de ataque.
En el primer caso, el atacante obtiene fragmentos de claves privadas de las partes al interactuar con los firmantes durante la primera ronda del protocolo MPC. Esto, mediante el envío de mensajes creados con fines malintencionados. Para obtener la clave privada completa, es suficiente iterar el ataque dieciséis veces.
Se identificó un subescenario específico del Caso 1 en la biblioteca Apache Milagro que tenía un parámetro beta extremadamente bajo (256 bits) que permitía a un atacante extraer la clave sin crear ningún mensaje malicioso y simplemente recuperar la clave de la transcripción de la ceremonia de firma.
Fireblocks, firma de ciberseguridad
En el segundo caso, el atacante debe conocer la firma secreta de uno de los participantes del protocolo Paillier. Luego de enviar mensajes malintencionados obtiene el resto de los fragmentos. Sin embargo, este método requiere un mayor número de iteraciones: entre 200 mil y mil millones.
En el segundo caso, el atacante debe conocer la firma secreta de uno de los participantes del protocolo Paillier. Luego de enviar mensajes malintencionados obtiene el resto de los fragmentos. Sin embargo, este método requiere un mayor número de iteraciones: entre 200 mil y mil millones.
Soluciones para enfrentar la vulnerabilidad
Los investigadores sugirieron una solución para mitigar el problema. Consiste en utilizar una prueba de conocimiento cero (ZK) adecuada para detectar claves de Paillier creadas malintencionadamente. Una prueba de conocimiento cero (ZK) es un protocolo criptográfico que permite a una parte probar a otra parte que conoce un valor sin revelar el valor en sí.
Dada la magnitud del problema generado por el protocolo MPC, se podría pensar que no es adecuado para usarlo para transformar el algoritmo ECDSA en una variante de participación múltiple.
En la actualidad, los desarrolladores de Bitcoin Core y de Ethereum trabajan en mecanismos probados que permitirían realizar firmas múltiples en ambos protocolos.
Una de estas soluciones en Musig2, que permite ejecutar firmas múltiples en Bitcoin, como reportó CriptoNoticias. Está basado en el algoritmo de firmas digitales Schnorr, sobre el cual hablamos en una Criptopedia.
Por su parte, Ethereum cuenta con la abstracción de cuentas (ERC-4337), que utiliza el algoritmo de firma more than one Borromean (BLS).