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.
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 móvil (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.
Contra qué protege
| Amenaza | Protección |
|---|---|
| Malware o una cuenta comprometida en tu móvil u ordenador conectado | Las claves están en otro dispositivo, sin conexión. La cartera en línea solo tiene claves públicas. |
| Una solicitud manipulada (destinatario, importe, red o firmante incorrectos) | El firmante decodifica los bytes exactos que firma y los muestra; comprueba la clave firmante, la red y la estructura antes de firmar. Consulta Antes de firmar. |
| Robo del móvil firmante | La bóveda necesita la contraseña de la cartera y la clave del dispositivo, que el sistema operativo solo entrega si el móvil 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 app | La bóveda está cifrada y vinculada a una clave del dispositivo que nunca sale del móvil y se excluye de las copias de seguridad. |
| Un generador de números aleatorios débil | Las 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 pretende ser
Estos límites figuran 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 móvil en un dispositivo aislado (air-gapped). Mantén el móvil 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 firmante no puede conocer los saldos actuales, el comportamiento real de un token, si un contrato es malicioso, si un blockhash sigue vigente ni quiénes son los miembros de una multifirma 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 gravedad crítica o alta, pero las revisiones de Android encontraron problemas de gravedad 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 gravedad 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 gravedad 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
| Área | Código fuente |
|---|---|
| Aleatoriedad, cifrado de la bóveda, Keychain | BitToolSigner/Core/VaultCrypto.swift, WalletVault.swift |
| Derivación de la semilla BIP39 | BitToolSigner/Core/BIP39Seed.swift |
| Sandbox de JavaScriptCore | BitToolSigner/Core/SigningEngine.swift |
| Protocolos QR | engine/protocols.js |
| Asociación de solicitudes con carteras | engine/src/resolver.js |
| Análisis y firma por cadena | engine/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/.