Seguridad

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.

UI

Interfaz (Reaccionar + Tauri)

  • Bóveda
  • Carpetas
  • Buscar
  • Generador
  • Códigos de un solo uso
  • Panel
  • Sincronizar
  • Intercambio
  • Extensión del navegador
Core

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
Storage

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)
KDF

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).

AmenazaVectorRespuesta de QubKey
Acceso no autorizado al archivoRobo o copia de .rkveyCifrado AEAD + derivación Argon2id
Exfiltración por redIntercepción en la nube / MITMLocal-first: QubKey no sube sus secretos
Corrupción de datosFallo durante la escrituraCommits append-only validados + recuperación al inicio
Manipulación de la bóvedaModificación manual del archivoAutenticación AEAD por compartimento + sumas de comprobación
Volcado de memoria (navegación)Bóveda abierta, lista / vistaLos secretos permanecen cifrados hasta que los visualiza
Contraseña maestra débilIntentos offlineArgon2id calibrado (~500 ms) + medidor de entropía
Reutilización de contraseñasFiltraciones en otros sitiosPanel de seguridad (detección local)
Filtraciones del portapapelesCopiar un secretoTiempo de espera del portapapeles (30 s) + borrado al bloquear
Ataque de canal lateralTiming en operaciones criptoImplementaciones 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

ÁmbitoCómo QubKey protege sus datos
Datos en reposoAEAD (AES-256-GCM / XChaCha20), clave Argon2id, claves dedicadas por compartimento
Integridad de la bóvedaCommits append-only validados, sumas de comprobación y escrituras atómicas
ConfidencialidadZero-knowledge: sus secretos permanecen cifrados en su dispositivo
Descifrado diferidoLista y vista sin secretos; mostrar / copiar solo bajo demanda
Derivación de clavesArgon2id calibrado (~500 ms, 64 MB) para proteger la contraseña maestra
AplicaciónNúcleo Rust aislado, interfaz vía Tauri-IPC, Zeroization al bloquear
Extensión del navegadorNative Messaging local — la extensión nunca recibe la contraseña maestra
SincronizaciónSincronizació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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.