Volver al blog
Seguridad

Entropía de billetera: lo que el incidente de Coldcard enseña sobre la aleatoriedad

Un caudal ancho de 128 bits aleatorios se estrecha al pasar junto a un chip RNG omitido hasta convertirse en un flujo fino y disperso de 40 bits predecibles

A las 01:31 UTC del 31 de julio de 2026, los bitcoins empezaron a salir de billeteras cuyos dueños no habían hecho absolutamente nada. Para las 01:56 —veinticinco minutos después—, aproximadamente 594 BTC, unos 38 millones de dólares, habían sido barridos de alrededor de 500 billeteras de firma única. Análisis posteriores de Galaxy Research y la cobertura de Chainalysis vincularon hasta aproximadamente 1.083 BTC repartidos en unas 1.196 direcciones. Nadie sufrió phishing. Nadie instaló malware. Nadie aprobó una transacción. El único rasgo que compartían las víctimas era la fecha en que se creó su billetera, porque lo que falló fue la entropía de la billetera: la aleatoriedad de la que se construye una frase semilla, fijada en el primer segundo de vida de una billetera.

Las billeteras se habían generado en dispositivos de hardware Coldcard, y el fallo que había detrás llevaba más de cinco años presente en firmware ya distribuido. Este artículo explica qué ocurrió, por qué esta clase de bug permanece invisible, qué dice y qué no dice sobre las billeteras de hardware, y qué preguntar sobre la aleatoriedad de cualquier billetera, incluida la nuestra.

Un fallo de 2021, cobrado en 2026

Según el aviso de Coinkite, el fallo entró en el firmware 4.0.0 de Coldcard, publicado en marzo de 2021. En los dispositivos afectados, la generación de la semilla se saltaba el generador de números aleatorios por hardware y recurría a material de clave sembrado con datos no secretos del chip. Una frase semilla BIP39 debería codificar 128 bits de entropía: 2¹²⁸ semillas posibles, un espacio que ningún atacante puede recorrer. Las semillas generadas en los dispositivos Mk3 afectados llevaban, en cambio, unos 40 bits de entropía efectiva. 2⁴⁰ son alrededor de 1,1 billones de candidatos: una cifra enorme para un humano, totalmente explorable para una máquina. Esa es la vulnerabilidad de Coldcard explicada en una sola frase: el dispositivo dejó silenciosamente de usar su propia aleatoriedad, y nada visible lo delató.

Dos grupos nunca estuvieron expuestos: quienes crearon su semilla con una passphrase BIP39 y quienes la generaron a partir de 50 o más tiradas de dados. Coinkite divulgó el problema y publicó firmware corregido: 5.6.0 para los Mk4 y Mk5, 1.5.0Q para el Q. En los cinco años intermedios, las billeteras afectadas funcionaron a la perfección y lucían idénticas a las seguras. Quien ejecutó el barrido nunca necesitó tocar a una víctima: enumerar el espacio de claves débil, derivar direcciones, cotejarlas con la cadena y moverlo todo en una única ventana de 25 minutos.

Degradación silenciosa de la entropía: por qué las semillas parecían aleatorias

Lo inquietante es que nada en las semillas afectadas pareció nunca estar mal. Una semilla construida a partir de 40 bits de entrada predecible sale igualmente como doce palabras BIP39 perfectamente normales con un checksum válido. La billetera la acepta, deriva direcciones, firma transacciones; cada pantalla muestra exactamente lo que mostraría una billetera fuerte.

Las pruebas estadísticas tampoco sirven de ayuda: un generador determinista sembrado con datos predecibles sigue produciendo una salida que supera los tests de aleatoriedad —los bits están bien distribuidos, solo que extraídos de un conjunto catastróficamente pequeño de secuencias posibles—. La debilidad vive en una propiedad que ninguna salida puede revelar: cuántas otras semillas podrían haberse generado en su lugar. Solo el código de generación tiene esa respuesta.

Una semilla débil no parece débil. La diferencia entre 2¹²⁸ y 2⁴⁰ existe solo en el código que produjo las palabras.
La generación de la semilla se bifurca en una ruta de CSPRNG por hardware con 2 elevado a 128 posibilidades y una ruta de fallback silencioso sembrada con datos no secretos del chip con 2 elevado a 40 posibilidades, y ambas rutas terminan en doce palabras de aspecto normal
Ambas rutas terminan en doce palabras normales. La diferencia —2¹²⁸ frente a 2⁴⁰ semillas posibles— nunca aparece en ninguna pantalla.

Por eso esta clase de bug persiste durante años, y por eso el incidente de Coldcard pertenece a una familia. Milk Sad en la herramienta bx de Libbitcoin, el generador MT19937 de la extensión de navegador de Trust Wallet, Cake Wallet, la herramienta de direcciones personalizadas Profanity y Randstorm en las primeras billeteras de navegador comparten una misma forma: un CSPRNG sustituido silenciosamente por una fuente predecible — sin error, sin aviso, sin diferencia visible, hasta que alguien enumera el espacio de claves.

La lección incómoda

«Billetera de hardware» nombra un formato físico, no una garantía. Las billeteras barridas el 31 de julio se crearon en hardware de firma construido específicamente para ese fin, y esa no fue la capa que falló. Lo que decidió la supervivencia fue una propiedad fijada años antes: cómo se generó la semilla el día en que se creó la billetera. Todo lo que viene después —almacenamiento en frío, firma con air gap, verificación cuidadosa— protege una clave de ser robada. Nada de eso ayuda si la clave puede regenerarse.

Importa igualmente que Coinkite divulgó el fallo y publicó firmware corregido con prontitud. Esta no es la historia de un proveedor descuidado; es un modo de fallo que el sector no deja de redescubrir, tanto en hardware como en software. Cualquier billetera —la nuestra incluida— está a un fallback silencioso de distancia de la misma clase de bug. La pregunta honesta no es «¿qué proveedor es inmune?», sino «¿cómo fallaría esta billetera, y lo notaría alguien?».

Cinco preguntas que hacerle a cualquier billetera sobre su aleatoriedad

No hace falta ser criptógrafo para subir el listón. Cinco preguntas distinguen billeteras de manera significativa:

  1. ¿Cuál es la fuente de entropía? Una semilla debe salir de un CSPRNG, no de marcas de tiempo, identificadores del dispositivo ni nada que un tercero pudiera reconstruir.
  2. ¿Qué ocurre si esa fuente falla? La respuesta aceptable es un error rotundo que detiene la creación de la billetera. La inaceptable es un sustituto discreto: el fallback silencioso es el rasgo definitorio de esta clase de bug.
  3. ¿La ruta de generación es de código abierto y verificable? La entropía débil es invisible en las salidas, así que la revisión del código es el único lugar donde puede detectarse.
  4. ¿La billetera admite una passphrase BIP39? Una passphrase añade material secreto que el generador del dispositivo nunca tocó. Es la razón por la que los usuarios con passphrase en los Coldcard afectados no perdieron nada.
  5. En una MultiSig, ¿las claves se generan en dispositivos independientes? Dispositivos independientes significan aleatoriedad independiente: un generador defectuoso compromete una clave, no el quórum.

Cómo genera Ownbit la entropía

Preguntas como estas merecen respuestas concretas sobre nuestro propio producto. La generación de mnemónicos de Ownbit tiene dos capas. En la capa de la aplicación, generateMnemonicRandom(entropy, langIndex) llama a generateMnemonic de la librería estándar bip39: 128 bits de entropía por defecto, con ocho listas de palabras BIP39 admitidas: inglés, chino simplificado y tradicional, japonés, francés, italiano, coreano y español. En la capa de la librería, randomBytes de bip39 extrae de crypto.getRandomValues, el CSPRNG de la plataforma.

Lo que importa aquí es qué ocurre cuando esa fuente no está disponible: la librería lanza un error. No consulta un reloj, ni un identificador del chip, ni ninguna fuente secundaria — no existe ruta de fallback en el código. El modo de fallo es un error sonoro en el momento de la creación, nunca una semilla silenciosamente más débil. Esa propiedad —fallar de forma ruidosa, nunca recurrir a un fallback— es exactamente la inversa del fallo detrás del incidente de Coldcard, Milk Sad y Randstorm, donde la generación continuó discretamente a partir de una fuente predecible.

No vamos a afirmar que esto haga a Ownbit inmune a los bugs; ningún proveedor honesto puede hacerlo. Lo que elimina, por construcción, es esta forma de fallo: no existe ninguna ruta de código por la que una billetera Ownbit genere discretamente una semilla débil. El resto del modelo está detallado en nuestra página de seguridad.

Por qué las claves generadas de forma independiente sobreviven a esta clase de bug

El barrido del 31 de julio golpeó billeteras de firma única: una semilla, una firma, fondos perdidos — el caso de manual de una frase semilla como único punto de fallo. La MultiSig cambia la aritmética. En una billetera MultiSig de Ownbit, cada clave es su propia frase semilla BIP39 estándar, generada en el dispositivo del propio participante. Supongamos que un dispositivo llevara exactamente esta clase de fallo. En una billetera 2-of-3, un atacante que enumere el espacio de claves débil posee una clave: por debajo del umbral. Nada se mueve. Una clave débil se convierte en una tarea de mantenimiento —rotarla— en lugar de una pérdida.

Una MultiSig 2-of-3 con claves generadas en tres dispositivos independientes: un atacante descifra la única clave de entropía débil pero posee solo 1 de 3, por debajo del umbral, así que los fondos permanecen intactos
Una clave cofirmante débil le entrega al atacante 1 de 3 — por debajo del umbral. Los fondos no se mueven.

La protección viene de la independencia, no de la palabra «multifirma». Tres claves cofirmantes generadas en el mismo modelo de dispositivo defectuoso fallarían juntas. Tres claves nacidas en dispositivos genuinamente distintos —tu teléfono de uso diario, un teléfono de repuesto mantenido sin conexión como billetera fría de firma por QR, el dispositivo de un familiar— no comparten generador, así que no comparten bug. La misma lógica explica por qué una passphrase BIP39 salvó a los usuarios de Coldcard afectados: la passphrase es material secreto que el RNG del dispositivo nunca produjo, de modo que enumerar 2⁴⁰ semillas no bastaba para gastar.

Si tienes un Coldcard afectado

Tres acciones:

  1. Actualiza el firmware. Las versiones corregidas que nombra el aviso de Coinkite son la 5.6.0 para los Mk4 y Mk5, y la 1.5.0Q para el Q.
  2. Mueve los fondos a una semilla nueva generada con el firmware corregido. Actualizar protege las semillas futuras; no puede fortalecer una existente. Una semilla nacida con unos 40 bits sigue siendo enumerable para siempre: retírala por completo, nunca la reutilices y nunca envíes fondos de vuelta a sus direcciones.
  3. Nunca escribas una frase semilla existente en ningún sitio web que ofrezca «comprobar» si es vulnerable. Introducir una semilla en cualquier cosa que esté en línea es la manera en que se llevan los fondos restantes; los sitios «verificadores» son un patrón de phishing recurrente después de incidentes como este.

Preguntas frecuentes

¿Qué es la entropía de billetera?

La entropía de billetera es la aleatoriedad que se usa para crear una frase semilla. Una semilla BIP39 estándar de 12 palabras codifica 128 bits de ella: 2¹²⁸ semillas posibles. Si el generador es predecible, el número real de semillas posibles se desploma, y un atacante puede enumerarlas sin importar cómo se guardara la semilla después.

¿Está afectado mi Coldcard?

Según el aviso de Coinkite, el fallo entró en el firmware 4.0.0 en marzo de 2021, y las semillas afectadas de los Mk3 llevaban unos 40 bits de entropía efectiva en lugar de 128. Las semillas creadas con una passphrase BIP39 o a partir de 50 o más tiradas de dados no están en riesgo. En caso de duda, actualiza al firmware corregido —5.6.0 para Mk4/Mk5, 1.5.0Q para el Q— y mueve los fondos a una semilla recién generada.

¿Puede detectarse una semilla débil con solo mirarla?

No. Una semilla débil sigue produciendo doce palabras normales con un checksum válido, y las pruebas estadísticas no pueden revelar una fuente predecible. La fortaleza es una propiedad del código de generación, no de las palabras, y por eso las billeteras afectadas pasaron desapercibidas durante más de cinco años.

¿Protege la MultiSig contra la entropía débil?

Estructuralmente, sí — siempre que las claves se generen en dispositivos independientes. Una clave débil le da a un atacante una firma —por debajo de un umbral M-of-N—, así que los fondos no se mueven. Las claves generadas en el mismo modelo de dispositivo defectuoso podrían fallar juntas, y por eso la independencia importa tanto como el umbral.

¿Debería dejar de usar billeteras de hardware?

No. La lección es más acotada: la expresión «billetera de hardware» no es en sí misma la garantía; lo es cómo se generó la semilla. Sigue usando dispositivos bien mantenidos, aplica las actualizaciones de firmware, añade una passphrase BIP39 donde esté disponible y pon los saldos importantes detrás de un umbral multifirma en lugar de detrás de una única semilla.

Si este incidente te ha llevado a reexaminar tu propia configuración, el arreglo estructural es dejar de permitir que una sola semilla se interponga, ella sola, entre tus fondos y un atacante. La billetera MultiSig de Ownbit pone un umbral M-of-N sobre claves generadas en dispositivos independientes, cada una de ellas una frase semilla BIP39 estándar. Cada nuevo usuario obtiene una prueba gratuita de 7 días, y tus claves siguen siendo tuyas en cualquier caso.