La protección contra este ataque fue lanzada para la BitBox02 en la actualización Monte Rosa (01.2021).
¿De qué se trata esto?
Las billeteras de hardware como la BitBox02 crean firmas digitales para autorizar tus transacciones. Para ello utilizan claves privadas. Sin conocer la clave privada correcta, es prácticamente imposible falsificar una firma.
Una firma se construye matemáticamente con la ayuda de un nonce, un número secreto que puede ser elegido libremente por la billetera de hardware.
Una billetera de hardware maliciosa podría filtrar las claves privadas a través de las firmas que crea manipulando estos nonces. Como las firmas forman parte de las transacciones registradas en la blockchain pública, un atacante remoto podría leerlas y reconstruir tus claves privadas, obteniendo control sobre todos tus fondos.
Podemos mitigar este ataque probando que el software anfitrión, como la BitBoxApp, contribuya a la generación del nonce, evitando cualquier manipulación maliciosa.
Este ataque es particularmente interesante por dos razones:
- Incluso si verificas cada detalle de la transacción en un entorno completamente seguro y sin conexión, o air gapped, no estás protegido a menos que el protocolo anti-klepto esté activo.
- Este ataque no involucra a tu ordenador o teléfono móvil. Se aplica incluso si el dispositivo con el que interactúas con tu billetera de hardware no está comprometido.
El protocolo anti-klepto evita este ataque al permitir que tu ordenador o móvil verifique que no ha habido manipulación maliciosa en las firmas, y actúe en consecuencia si detecta algo.
¿Por qué es útil?
Somos grandes defensores de la defensa en profundidad y del lema “no confíes, verifica”.
Como parte de nuestro esfuerzo por aumentar la transparencia y reducir la confianza necesaria en la cadena de suministro, hemos implementado herramientas y funciones que te permiten verificar la integridad y seguridad de tu BitBox02 y de tu semilla. Por ejemplo:
- Solo el firmware firmado oficialmente por Shift Crypto puede ejecutarse en la BitBox02.
- Cada ordenador o móvil realiza automáticamente una comprobación de autenticidad para asegurar que la BitBox02 fue programada en fábrica por Shift antes de desbloquear el dispositivo.
- Todo nuestro código es de código abierto, incluyendo el firmware de la BitBox02, la BitBoxApp y las bibliotecas utilizadas en integraciones con billeteras de terceros.
- Puedes verificar que los archivos binarios del firmware publicados realmente se construyen desde el código fuente publicado. Consulta nuestra guía sobre “Compilaciones reproducibles”.
- Puedes configurar la BitBox02 para que muestre en pantalla una suma de verificación del firmware antes de ejecutarlo, y comprobar de forma independiente que corresponde a la versión oficial.
- Desde la actualización Monte Rosa (01.2021), puedes generar tu propia semilla sin depender del proceso de generación aleatoria de la BitBox02, por ejemplo lanzando dados. Consulta nuestra guía “Crea tu propia semilla de Bitcoin”.
El protocolo anti-klepto es la última incorporación a esta lista.
Al igual que las demás funciones, aumenta el coste y el esfuerzo necesarios para llevar a cabo un ataque exitoso en la cadena de suministro.
Manipular la generación de la semilla o filtrarla a través de un canal encubierto de nonce son probablemente dos de las formas más efectivas de realizar un ataque a gran escala.
Ambos problemas se abordan en nuestra actualización Monte Rosa (01.2021).
Un mini repaso: claves privadas y públicas
Una clave privada es simplemente un número muy grande, lo suficientemente grande como para que no pueda ser adivinado, por ejemplo:
92193805913277071008055984303319191614197341949664602874511898854633635443214
Para cada clave privada existe una clave pública correspondiente, que se traduce en tu dirección de Bitcoin. Los fondos enviados a una dirección solo pueden moverse conociendo la clave privada correspondiente. Conocer solo la clave pública no revela ninguna información sobre su clave privada.
Hoy en día, en lugar de gestionar muchas claves privadas, las billeteras gestionan una sola semilla, de la cual derivan subclaves cuando es necesario. La semilla es lo que respaldas en tu tarjeta microSD al inicializar la BitBox02, o lo que escribes en papel con las 24 palabras de recuperación.
La fórmula para derivar una clave pública de una clave privada es publicKey = privateKey × G, donde G es un valor predefinido.
Estas operaciones pertenecen a un grupo matemático donde la suma tiene un significado especial. Si quieres aprender más sobre esto, te recomendamos la serie de artículos “Elliptic Curve Cryptography: a gentle introduction”.
Excepto por el hecho de que la división es imposible (de lo contrario podrías calcular la clave privada a partir de la pública), la mayoría de las operaciones matemáticas funcionan igual. Por ejemplo, se cumple la ley distributiva: (a + b) × G = a × G + b × G. Esta propiedad es la que permite al software de la computadora prevenir el ataque del canal encubierto del nonce, como veremos a continuación.
Ataque del canal encubierto del nonce
Una parte de una firma digital es el nonce.
El nonce es como una clave privada, pero se genera aleatoriamente cada vez que se crea una firma.
Como cualquier clave privada, tiene una clave pública correspondiente (nonce × G), la cual forma parte de la firma y termina registrada en la blockchain junto con la transacción.
Debido a los problemas asociados al uso de nonces aleatorios, la mayoría de las billeteras han pasado a usar nonces determinísticos, que no dependen de generadores aleatorios, sino que se derivan de un hash de la clave privada, el mensaje a firmar y otros datos adicionales. Sin embargo, mirando solo un nonce no se puede saber si fue generado de forma aleatoria, determinística o maliciosa (en el caso del ataque encubierto).
Una billetera de hardware maliciosa podría extraer la semilla (de la que se derivan todas las claves privadas) codificando partes de ella en la clave pública del nonce, que queda registrada en la blockchain. Después de un número suficiente de firmas maliciosas, el atacante podría recomponer tu semilla.
Los obstáculos para la billetera maliciosa son:
- Debe probar muchos nonces diferentes hasta que la clave pública del nonce tenga el patrón deseado.
Este proceso es lento, por lo que solo puede influir en unos pocos bytes por firma. - La firma debe contener algún tipo de marcador oculto, de modo que solo el atacante pueda reconocerla al escanear la blockchain.
En consecuencia, la semilla no puede extraerse con una sola firma; se necesitan varias. Dependiendo del método, unas pocas docenas pueden ser suficientes para reconstruir la semilla completa.
Prevención: el protocolo anti-klepto
El ataque se evita limitando la capacidad de la billetera de hardware para elegir libremente el nonce. Para ello, la BitBoxApp (u otro software compatible) le exige a la billetera de hardware que elija su propio nonce como antes, pero además le impone añadir un nonce elegido por la BitBoxApp.
El protocolo se ejecuta en cada firma, y su flujo es el siguiente:
Nota: esta es una descripción simplificada del protocolo, enfocada en explicar el concepto a alto nivel. La versión completa está documentada junto a su implementación en el código.
Empecemos:
La billetera de hardware debe comprometerse primero con el nonce que piensa usar, enviando su clave pública del nonce al host:
deviceNoncePublicKey = deviceNonce × G
Al revelar esto, la billetera ya no puede cambiarlo más tarde.
El host (BitBoxApp) elige su propio nonce aleatorio, hostNonce, y lo envía a la billetera de hardware.
La billetera combina ambos nonces nonce = deviceNonce + hostNonce y genera la clave pública final:
nonce × G = (deviceNonce + hostNonce) × G
El host puede verificar que su contribución fue usada comprobando:
nonce × G = deviceNonce × G + hostNonce × G
= deviceNoncePublicKey + hostNonce × G
Si esta verificación falla, la operación se aborta y la transacción no se firma ni se transmite, previniendo cualquier filtración.
- La billetera no debe conocer el nonce del host antes de comprometer el suyo, o el ataque seguiría siendo posible.
- La billetera no debe reutilizar el mismo nonce para diferentes nonces del host, o filtraría inmediatamente la clave privada.
Para evitar esto, el host envía primero un hash de compromiso de su nonce.
Despliegue
Jonas Nick fue quien implementó por primera vez el protocolo anti-klepto para las firmas Schnorr, una futura actualización de Bitcoin. Basándome en su trabajo, implementé el mismo protocolo para firmas ECDSA, y abrí una solicitud de revisión en la librería secp256k1.
Lanzamos el soporte en el firmware 9.4.0 de la BitBox02 con la actualización Monte Rosa (01.2021). Desde la versión 4.25, la BitBoxApp contribuye nonces y verifica que la BitBox02 los use al firmar transacciones de Bitcoin o Litecoin. En futuras versiones añadiremos soporte también para Ethereum y para firmas de mensajes.
Todas nuestras bibliotecas de software de código abierto para la BitBox02 también fueron actualizadas para soportar el protocolo. Esto significa que billeteras de terceros como HWI, Electrum o MyEtherWallet ganarán soporte con el tiempo.
Agradecimientos y colaboración open source
Muchas gracias a Stepan Snigirev por destacar este tema y explicarlo tan claramente en su artículo, lo cual fue una gran motivación para implementar una versión robusta del protocolo para la BitBox02 y otras billeteras de hardware.
La BitBox02 utiliza la librería criptográfica open source secp256k1, la misma que usa Bitcoin Core.
Gracias a Jonas Nick por sus múltiples revisiones, a Andrew Poelstra por continuar el proceso hasta que se fusionó en secp256k1-zkp, y a Tim Ruffing por su revisión adicional.
El beneficio principal es que este trabajo es código abierto y auditado, por lo que cualquiera puede usarlo. Esperamos que muchas otras billeteras de hardware y firmadores offline adopten este protocolo. Blockstream ya ha anunciado que lo incorporará en su billetera Jade recientemente lanzada.
Enlaces adicionales
- bitcointalk.org/index.php?topic=893898.msg9841502#msg9841502
- lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-March/017667.html
- medium.com/cryptoadvance/hardware-wallets-can-be-hacked-but-this-is-fine-a6156bbd199
- andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/
¿Aún no tienes una BitBox?
Mantener tus criptomonedas seguras no tiene por qué ser difícil. La billetera física BitBox02 almacena las claves privadas de tus criptomonedas offline. Así podrás gestionar tus monedas de forma segura.
La BitBox02 también viene en versión sólo Bitcoin, con un firmware radicalmente enfocado: menos código significa menos superficie de ataque, lo que mejora aún más tu seguridad cuando sólo almacenas Bitcoin.

Shift Crypto es una empresa privada con sede en Zurich, Suiza. Nuestro equipo de colaboradores de Bitcoin, expertos en criptomonedas e ingenieros de seguridad crea productos que permiten a los clientes disfrutar de un viaje sin estrés desde el nivel de principiante hasta el nivel de maestría en la gestión de criptomonedas. La BitBox02, nuestra billetera de hardware de segunda generación, permite a los usuarios almacenar, proteger y realizar transacciones con Bitcoin y otras criptomonedas con facilidad, junto con su software complementario, la BitBoxApp.