Sécurité

Architecture de sécurité

Stack Rust/Tauri, format .rkvey v5, compartiments, déchiffrement paresseux et modèle de menace.

La sécurité QubKey s'appuie sur une architecture en couches et le principe de défense en profondeur : le système de fichiers, le format .rkvey v5, la cryptographie et le cœur applicatif Rust travaillent ensemble pour protéger vos secrets à chaque étape — du stockage au déverrouillage.

Chaque couche apporte une garantie complémentaire. Si une protection système est absente (par exemple, pas de chiffrement disque), les couches applicatives et cryptographiques continuent de protéger le contenu de votre coffre. Avec le format v5, les secrets d'une entrée ne sont déchiffrés que lorsque vous les consultez ou les copiez — pas à l'ouverture du coffre ni dans la liste.

UI

Interface (React + Tauri)

  • Coffre
  • Dossiers
  • Recherche
  • Générateur
  • Codes à usage unique
  • Tableau de bord
  • Synchronisation
  • Partage
  • Extension navigateur
Core

Cœur Rust (QubKey Core)

  • Format .rkvey v5
  • Dérivation Argon2id
  • Chiffrement authentifié
  • Index de recherche
  • Enregistrements sûrs
  • Effacement mémoire
  • Récupération après interruption
Storage

Fichier .rkvey v5 sur le système de fichiers

  • Préambule
  • En-tête chiffré
  • Index chiffré
  • Compartiments secrets
  • Pièces jointes
  • Historique des commits

Couches de sécurité

Flux de déverrouillage

Le déverrouillage suit un pipeline strict : le mot de passe maître entre dans le cœur Rust, Argon2id dérive la clé maître, puis les sous-clés permettent de déchiffrer l'en-tête et l'index B-Tree. Les compartiments d'entrée (secrets, pièces jointes) restent chiffrés et ne sont lus qu'à la demande. Au verrouillage, toutes les clés et secrets sont effacés de la mémoire.

Mot de passe maître + Salt

Préambule .rkvey (non chiffré)

  • Saisie dans le cœur Rust (IPC Tauri) — jamais exposée au WebView
  • Salt aléatoire persisté dans le préambule (16 bytes)
KDF

Argon2id

  • 64 MB RAM · 3 iter · p=4 (défaut `KdfParams`)
  • Résistance GPU / ASIC
  • Calibré ~250–500 ms selon la plateforme

Clé maître

256 bits · `KeyManager::derive_master_key`

Dérivation des sous-clés

HKDF-SHA256(master, salt=file∥entry, info=kind)

header_key

Secure Header

index_key

Index B-Tree

compartment_key

Compartiments

Déchiffrement AEAD

  • AES-256-GCM ou XChaCha20-Poly1305
  • Header · Index · Compartiments (à la demande)

Mémoire après déverrouillage

  • Liste / vue : métadonnées seulement
  • Secrets et PJ déchiffrés uniquement à la demande

Verrouillage

  • `KeyManager::clear_keys()` + zeroize
  • Effacement des secrets et vidage presse-papiers

Modèle de menace

QubKey est conçu pour répondre aux scénarios de menace les plus courants d'un gestionnaire local. Le tableau ci-dessous décrit le vecteur d'attaque et la mesure correspondante intégrée au produit (format .rkvey v5).

MenaceVecteurRéponse QubKey
Accès non autorisé au fichierVol ou copie du .rkveyChiffrement AEAD + dérivation Argon2id
Exfiltration réseauInterception cloud / MITMLocal-first : QubKey n'upload pas vos secrets
Corruption de donnéesCrash pendant écritureCommits append-only validés + récupération au démarrage
Altération du coffreModification manuelle du fichierAuthentification AEAD par compartiment + empreintes
Dump mémoire (navigation)Coffre ouvert, liste / fiche vueSecrets non déchiffrés tant que vous ne les révélez pas
Mot de passe maître faibleTentatives offlineArgon2id calibré (~500 ms) + jauge d'entropie
Réutilisation de mots de passeFuites sur d'autres sitesDashboard sécurité (détection locale)
Fuites via presse-papiersCopie d'un secretTimeout clipboard (30 s) + vidage au verrouillage
Attaque side-channelTiming sur opérations cryptoImplémentations constant-time (RustCrypto)

Bonnes pratiques

Ce modèle couvre les menaces que QubKey adresse directement via son architecture. Pour une protection optimale, combinez QubKey avec les bonnes pratiques système : chiffrement disque activé, OS à jour, et mot de passe maître robuste.

Protection intégrée

DomaineComment QubKey protège vos données
Données au reposChiffrement AEAD (AES-256-GCM / XChaCha20), clé dérivée via Argon2id, clés distinctes par compartiment
Intégrité du coffreCommits append-only validés, empreintes et écritures atomiques
ConfidentialitéModèle zero-knowledge : vos secrets restent chiffrés sur votre appareil
Déchiffrement paresseuxListe et fiche vue sans secrets ; révélation / copie uniquement à la demande
Dérivation de cléArgon2id calibré (~500 ms, 64 Mo) pour renforcer la protection du mot de passe maître
ApplicationCœur Rust isolé, interface via IPC Tauri, zeroization au verrouillage
Extension navigateurNative Messaging local — l'extension ne reçoit jamais le mot de passe maître
SynchronisationSync chiffrée opt-in entre appareils (cloud QubKey — auto-hébergement bientôt disponible) ou fichier .rkvey chiffré (cloud, USB, NAS)

Architecture de confiance

Zero-knowledge

QubKey organise la confiance en plusieurs niveaux complémentaires :

  1. Vous restez maître de l'accès — Le mot de passe maître et, si vous l'avez enregistrée, la clé de récupération contrôlent l'ouverture du coffre. QubKey ne peut pas les consulter ni les réinitialiser à votre place.

  2. Intégration au système — QubKey s'appuie sur les mécanismes de sécurité de votre OS : permissions fichier, chiffrement disque (FileVault, BitLocker, LUKS), stockage sécurisé (Keychain, Credential Manager) et isolation des processus.

  3. Séparation Rust / interface — Toute la cryptographie s'exécute dans le cœur Rust, avec sûreté mémoire garantie à la compilation. L'interface React communique via IPC Tauri ; le WebView n'a jamais accès direct au mot de passe maître.

  4. Gestion prudente de la mémoire (v5) — À l'ouverture, seuls l'en-tête et l'index sont déchiffrés. Les secrets et pièces jointes restent chiffrés jusqu'à une action explicite (révéler, copier, télécharger). Au verrouillage, les secrets sont effacés (zeroization) et le presse-papiers est vidé.

  5. Extension navigateur — Communication locale via Native Messaging ; l'extension ne reçoit jamais le mot de passe maître.

Fonctionnalités de protection

Verrouillage automatique

Coffre verrouillé après une période d'inactivité configurable (défaut : 5 min). Déclenche zeroization et vidage du presse-papiers.

Déchiffrement paresseux

Les secrets d'une entrée ne sont déchiffrés que lorsque vous les révélez ou les copiez. La liste et la fiche vue n'exposent pas les champs protégés.

Zeroization

Secrets effacés de la RAM au verrouillage (crate Rust zeroize) ; caches vidés, déchiffrement éphémère à la demande uniquement.

Clipboard timeout

Presse-papier vidé automatiquement après 30 secondes. Configurable dans les paramètres du coffre.