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.
Interface (React + Tauri)
- Coffre
- Dossiers
- Recherche
- Générateur
- Codes à usage unique
- Tableau de bord
- Synchronisation
- Partage
- Extension navigateur
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
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)
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).
| Menace | Vecteur | Réponse QubKey |
|---|---|---|
| Accès non autorisé au fichier | Vol ou copie du .rkvey | Chiffrement AEAD + dérivation Argon2id |
| Exfiltration réseau | Interception cloud / MITM | Local-first : QubKey n'upload pas vos secrets |
| Corruption de données | Crash pendant écriture | Commits append-only validés + récupération au démarrage |
| Altération du coffre | Modification manuelle du fichier | Authentification AEAD par compartiment + empreintes |
| Dump mémoire (navigation) | Coffre ouvert, liste / fiche vue | Secrets non déchiffrés tant que vous ne les révélez pas |
| Mot de passe maître faible | Tentatives offline | Argon2id calibré (~500 ms) + jauge d'entropie |
| Réutilisation de mots de passe | Fuites sur d'autres sites | Dashboard sécurité (détection locale) |
| Fuites via presse-papiers | Copie d'un secret | Timeout clipboard (30 s) + vidage au verrouillage |
| Attaque side-channel | Timing sur opérations crypto | Implé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
| Domaine | Comment QubKey protège vos données |
|---|---|
| Données au repos | Chiffrement AEAD (AES-256-GCM / XChaCha20), clé dérivée via Argon2id, clés distinctes par compartiment |
| Intégrité du coffre | Commits append-only validés, empreintes et écritures atomiques |
| Confidentialité | Modèle zero-knowledge : vos secrets restent chiffrés sur votre appareil |
| Déchiffrement paresseux | Liste 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 |
| Application | Cœur Rust isolé, interface via IPC Tauri, zeroization au verrouillage |
| Extension navigateur | Native Messaging local — l'extension ne reçoit jamais le mot de passe maître |
| Synchronisation | Sync 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 :
-
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.
-
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.
-
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.
-
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é.
-
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.