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 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​

AmenazaProtección
Malware o una cuenta comprometida en tu móvil u ordenador conectadoLas 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 firmanteLa 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 appLa 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é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 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​

Á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 carterasengine/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/.