Arquitectura de seguridad
Stack Rust/Tauri, formato .rkvey v5, compartimentos y descifrado diferido para proteger sus secretos.
La seguridad de QubKey se basa en una arquitectura en capas y en el principio de defensa en profundidad: el sistema de archivos, el formato .rkvey v5, la criptografía y el núcleo de aplicación en Rust protegen sus secretos en cada paso — desde el almacenamiento hasta el desbloqueo.
Cada capa ofrece una garantía complementaria. Si falta una protección del sistema (por ejemplo, sin cifrado de disco), las capas de aplicación y criptográfica siguen protegiendo su bóveda. Con el formato v5, los secretos de una entrada se descifran solo cuando los visualiza o copia — no al abrir la bóveda ni en la lista.
Interfaz (Reaccionar + Tauri)
- Bóveda
- Carpetas
- Buscar
- Generador
- Códigos de un solo uso
- Panel
- Sincronizar
- Intercambio
- Extensión del navegador
Núcleo de óxido (Núcleo QubKey)
- Formato .rkvey v5
- Derivación de Argon2id
- Cifrado autenticado
- índice de búsqueda
- Confirmaciones seguras
- Borrado de memoria
- Recuperación de fallos
Archivo .rkvey v5 en el sistema de archivos
- Preámbulo
- Encabezado cifrado
- Índice cifrado
- Compartimentos secretos
- Adjuntos
- Historial de compromisos
Capas de seguridad
Flujo de desbloqueo
El desbloqueo sigue una canalización estricta: la contraseña maestra llega al núcleo Rust, Argon2id deriva la clave maestra, las subclaves descifran la cabecera y el índice B-Tree. Los compartimentos de las entradas (secretos, adjuntos) permanecen cifrados y se leen solo cuando hace falta. Al bloquear, todas las claves y secretos se borran de la memoria.
Contraseña maestra + sal
.rkvey preámbulo (texto sin formato)
- Ingresado en Rust core (Tauri IPC): nunca expuesto a WebView
- Sal aleatoria almacenada en el preámbulo (16 bytes)
Argón2id
- 64 MB de RAM · 3 iter · p=4 (predeterminado `KdfParams`)
- Resistencia GPU/ASIC
- Calibrado ~250–500 ms dependiendo de la plataforma
Llave maestra
256 bits · `KeyManager::derive_master_key`
Derivación de subclave
HKDF-SHA256(maestro,sal=archivo∥entrada,info=tipo)
clave_encabezado
Encabezado seguro
clave_indice
Índice del árbol B
llave_compartimento
Compartimentos
Descifrado AEAD
- AES-256-GCM o XChaCha20-Poly1305
- Encabezado · Índice · Compartimentos (bajo demanda)
Memoria después del desbloqueo
- Lista/vista: solo metadatos
- Secretos y archivos adjuntos descifrados sólo bajo demanda
Cerrar
- `KeyManager::clear_keys()` + poner a cero
- Secretos borrados y portapapeles borrados
Modelo de amenazas
QubKey está diseñado para los escenarios de amenaza más frecuentes de un gestor local. La tabla describe el vector de ataque y la contramedida integrada (formato .rkvey v5).
| Amenaza | Vector | Respuesta de QubKey |
|---|---|---|
| Acceso no autorizado al archivo | Robo o copia de .rkvey | Cifrado AEAD + derivación Argon2id |
| Exfiltración por red | Intercepción en la nube / MITM | Local-first: QubKey no sube sus secretos |
| Corrupción de datos | Fallo durante la escritura | Commits append-only validados + recuperación al inicio |
| Manipulación de la bóveda | Modificación manual del archivo | Autenticación AEAD por compartimento + sumas de comprobación |
| Volcado de memoria (navegación) | Bóveda abierta, lista / vista | Los secretos permanecen cifrados hasta que los visualiza |
| Contraseña maestra débil | Intentos offline | Argon2id calibrado (~500 ms) + medidor de entropía |
| Reutilización de contraseñas | Filtraciones en otros sitios | Panel de seguridad (detección local) |
| Filtraciones del portapapeles | Copiar un secreto | Tiempo de espera del portapapeles (30 s) + borrado al bloquear |
| Ataque de canal lateral | Timing en operaciones cripto | Implementaciones de tiempo constante (RustCrypto) |
Buenas prácticas
Este modelo cubre las amenazas que QubKey aborda directamente mediante su arquitectura. Para una protección óptima, combine QubKey con las buenas prácticas del sistema: cifrado de disco activo, SO actualizado y contraseña maestra robusta.
Protección integrada
| Ámbito | Cómo QubKey protege sus datos |
|---|---|
| Datos en reposo | AEAD (AES-256-GCM / XChaCha20), clave Argon2id, claves dedicadas por compartimento |
| Integridad de la bóveda | Commits append-only validados, sumas de comprobación y escrituras atómicas |
| Confidencialidad | Zero-knowledge: sus secretos permanecen cifrados en su dispositivo |
| Descifrado diferido | Lista y vista sin secretos; mostrar / copiar solo bajo demanda |
| Derivación de claves | Argon2id calibrado (~500 ms, 64 MB) para proteger la contraseña maestra |
| Aplicación | Núcleo Rust aislado, interfaz vía Tauri-IPC, Zeroization al bloquear |
| Extensión del navegador | Native Messaging local — la extensión nunca recibe la contraseña maestra |
| Sincronización | Sincronización multi-dispositivo cifrada opcional (nube o self-host) o archivo .rkvey cifrado (nube, USB, NAS) |
Arquitectura de confianza
Zero-knowledge
QubKey organiza la confianza en varios niveles complementarios:
-
Usted controla el acceso — la contraseña maestra y, si procede, la clave de recuperación controlan el acceso a la bóveda. QubKey no puede leerlas ni restablecerlas.
-
Integración con el sistema — QubKey aprovecha la seguridad de su SO: permisos de archivo, cifrado de disco (FileVault, BitLocker, LUKS), almacenamiento seguro (Keychain, Credential Manager) e aislamiento de procesos.
-
Separación Rust / interfaz — Toda la criptografía se ejecuta en el núcleo Rust con seguridad de memoria en tiempo de compilación. La interfaz React se comunica vía Tauri-IPC; el WebView no tiene acceso directo a la contraseña maestra.
-
Gestión prudente de la memoria (v5) — Al desbloquear, solo se descifran la cabecera y el índice. Secretos y adjuntos permanecen cifrados hasta una acción explícita (visualizar, copiar, descargar). Al bloquear: Zeroization y portapapeles vacío.
-
Extensión del navegador — Native Messaging local; la extensión nunca recibe la contraseña maestra.
Funciones de protección
Bloqueo automático
La bóveda se bloquea tras una inactividad configurable (predeterminado: 5 min). Activa Zeroization y borrado del portapapeles.
Descifrado diferido
Los secretos de una entrada se descifran solo cuando los visualiza o copia. La lista y la vista no muestran campos protegidos.
Zeroization
Los secretos se borran de la RAM al bloquear (crate Rust zeroize); cachés vaciadas, descifrado efímero solo bajo demanda.
Tiempo de espera del portapapeles
El portapapeles se vacía automáticamente tras 30 segundos. Configurable en los ajustes de la bóveda.