Saltar al contenido principal

Modelo de seguridad

BitTool Signer es un firmador por software sin conexión para iPhone y Android. Deriva las claves y firma en el dispositivo, y se comunica con el exterior solo mediante códigos QR. Esta sección explica cómo lo hace y dónde terminan sus protecciones, para que puedas describirlo con precisión a tus usuarios.

Dos apps, un motor

Las dos apps usan el mismo motor de firma en JavaScript, así que las solicitudes se decodifican, se emparejan y se firman igual en ambas. Se diferencian donde dependen del sistema operativo: el Keychain de iOS o el Keystore de Android, JavaScriptCore o QuickJS. Estas páginas describen la app de iPhone e indican en qué difiere Android.

El diseño en un párrafo​

Las claves privadas solo existen dentro de BitTool Signer, en memoria, durante el momento en que se genera una firma. En reposo, la frase de recuperación de cada cartera se cifra dos veces: una con una clave derivada de la contraseña de la cartera y otra con una clave del dispositivo que nunca sale del teléfono (guardada en el Keychain de iOS o generada dentro del Keystore de Android). La app no tiene código de red. Las solicitudes llegan como códigos QR, las decodifica y comprueba un motor JavaScript incluido que se ejecuta en un entorno aislado (JavaScriptCore en iPhone, QuickJS en Android), y cada firma vuelve a pedir la contraseña de la cartera.

De qué protege​

AmenazaProtección
Malware o una cuenta comprometida en tu teléfono o computadora en líneaLas claves están en otro dispositivo, sin conexión. La billetera en línea solo tiene claves públicas.
Una solicitud manipulada (destinatario, monto, red o firmante incorrectos)El firmador decodifica los bytes exactos que firma y los muestra; verifica la clave del firmante, la red y la estructura antes de firmar. Consulta Antes de firmar.
Robo del teléfono firmanteLa bóveda necesita la contraseña de la cartera y la clave del dispositivo, que el sistema operativo solo entrega si el teléfono tiene un código de acceso o un bloqueo de pantalla. Los intentos de adivinar la contraseña se ralentizan.
Una copia de los archivos de la appLa bóveda está cifrada y vinculada a una clave del dispositivo que nunca sale del teléfono y se excluye de las copias de seguridad.
Un generador de números aleatorios débilLas frases nuevas usan el generador criptográficamente seguro del sistema operativo, y crypto.getRandomValues y Math.random del motor también se conectan a él. Consulta Generación de la semilla.

Lo que no promete​

Estos límites están escritos en la propia documentación de la app, y las integraciones tampoco deberían exagerarlos:

  • No es una cartera de hardware. La firma ocurre en la memoria de la app, protegida por el sistema operativo, no dentro de un elemento seguro. Un sistema operativo con jailbreak, con root o comprometido de otro modo puede observar los secretos mientras se usan.
  • No convierte un teléfono en un dispositivo aislado (air-gapped). Mantén el teléfono firmante en modo avión, con Wi-Fi y Bluetooth desactivados, y no instales otras apps en él. La app muestra este consejo; no puede imponerlo.
  • La revisión sin conexión tiene límites. El firmador no puede conocer los saldos actuales, el comportamiento real de un token, si un contrato es malicioso, si un blockhash sigue vigente ni la membresía actual de un multisig en la cadena. Muestra lo que dicen los bytes y etiqueta lo que no puede verificar.
  • Todavía no hay una auditoría independiente. Las dos apps son de código abierto y cada una ha tenido dos revisiones de seguridad asistidas por IA. Ninguna encontró problemas de severidad crítica o alta, pero las revisiones de Android encontraron problemas de severidad media que siguen abiertos, tres de ellos en el motor compartido, y ninguna de las dos apps ha sido auditada por una empresa de seguridad independiente.

Revisiones de seguridad​

La versión 1.0.0 se revisó dos veces en cada plataforma antes de su lanzamiento, todas con asistencia de IA. Las revisiones de iPhone (Opus 5 y GPT-6 Astra) encontraron un problema de severidad baja cada una y recompilaron byte a byte, desde el código fuente, el motor publicado. Las de Android (Opus 5.5 y GPT-6 Astra) encontraron problemas de severidad media: resúmenes de Solana y Bitcoin que pueden subestimar una solicitud, y la forma en que se guardaba la clave de firma de las versiones. Los informes se publican íntegros, con cada hallazgo y su estado: Revisiones de seguridad.

Dónde está el código​

ÁreaCódigo fuente
Aleatoriedad, cifrado de la bóveda, KeychainBitToolSigner/Core/VaultCrypto.swift, WalletVault.swift
Derivación de la semilla BIP39BitToolSigner/Core/BIP39Seed.swift
Sandbox de JavaScriptCoreBitToolSigner/Core/SigningEngine.swift
Protocolos QRengine/protocols.js
Asociación de solicitudes con billeterasengine/src/resolver.js
Análisis y firma por cadenaengine/src/{bitcoin,evm,tron,solana}.js

Repositorios: github.com/bitbill/bittool-signer-ios para iPhone y github.com/bitbill/bittool-signer-android para Android. La app de Android tiene la misma carpeta engine/; su código Kotlin está en app/, core/ y feature/, y el anfitrión de QuickJS en core/engine/src/main/cpp/.