Un client de base de données stocke des mots de passe, des passphrases SSH, des certificats. La tentation classique est de construire son propre système de chiffrement applicatif. QoreDB fait un choix différent : déléguer le stockage des secrets au keychain natif du système d'exploitation, et concentrer l'effort sur ce que l'application maîtrise, c'est-à-dire le contrôle d'accès et la prévention des fuites.
Deux niveaux de séparation
QoreDB sépare strictement les données de connexion en deux catégories. Les métadonnées non sensibles (nom de connexion, hôte, port, driver, environnement) sont stockées dans un fichier JSON local (connections.json). Ces informations n'ont pas besoin de chiffrement et permettent de charger l'interface rapidement.
Les secrets (mots de passe de bases de données, mots de passe SSH, passphrases de clés privées) ne transitent jamais par ce fichier. Ils sont stockés exclusivement dans le keychain du système : Apple Keychain sur macOS, Credential Manager (DPAPI) sur Windows, Secret Service (GNOME Keyring, KWallet) sur Linux.
Cette séparation signifie que les secrets ne sont récupérés qu'au moment où une connexion est effectivement établie. Le reste du temps, ils n'existent nulle part en mémoire applicative.
Master password et Argon2
En complément du keychain système, QoreDB propose un master password optionnel. Ce mot de passe est hashé avec Argon2 (salt aléatoire via OsRng, format PHC). Le hash est stocké dans le keychain sous une clé dédiée.
Le master password agit comme un verrou applicatif : tant qu'il n'est pas fourni au lancement, aucune opération nécessitant des credentials n'est autorisée. Ce verrou est volatil. Il est perdu au redémarrage, ce qui force une réauthentification à chaque session.
Le choix d'Argon2 comme fonction de hachage rend le brute-force extrêmement coûteux. Combiné au keychain système qui gère le chiffrement effectif des credentials, cela crée une défense en profondeur adaptée à un usage desktop.
Pourquoi déléguer au keychain plutôt que chiffrer soi-même
Les keychains natifs sont maintenus par les équipes sécurité d'Apple, Microsoft et les mainteneurs Linux. Ils bénéficient d'audits réguliers, de mises à jour de sécurité, et s'intègrent aux mécanismes d'authentification biométrique (Touch ID, Windows Hello). Réimplémenter un système de chiffrement applicatif n'apporterait pas un meilleur niveau de sécurité, et introduirait une surface d'attaque supplémentaire à maintenir.
Chaque projet QoreDB utilise un service keyring isolé, nommé selon son identifiant de projet. Les credentials d'un projet ne sont pas mélangés avec ceux d'un autre.
Sensitive<T> : prévenir les fuites dans le code
Au-delà du stockage, QoreDB protège les credentials en mémoire avec un wrapper Rust dédié : Sensitive<T>. Ce type garantit que les secrets ne peuvent pas fuiter accidentellement. En Debug, Display et sérialisation, la valeur est remplacée par REDACTED. Pour accéder à la valeur réelle, le code doit appeler explicitement expose(), ce qui rend chaque accès intentionnel et auditable dans le code source.
Concrètement, un mot de passe ne peut pas se retrouver dans un log structuré, un message d'erreur, ou une réponse sérialisée par erreur. Le système de types Rust l'empêche à la compilation.
En pratique
En usage quotidien, le vault est transparent. Les credentials sont récupérés à la demande, la connexion s'établit, et les secrets sont immédiatement libérés. Il n'y a pas de cache en clair, pas de fichier temporaire, pas de persistence en mémoire au-delà du strict nécessaire.
Le flow complet : l'utilisateur déverrouille le vault (master password ou auto-unlock si non configuré), sélectionne une connexion, QoreDB récupère les credentials depuis le keychain, établit la connexion, et libère les secrets. Si l'application redémarre, le vault se verrouille automatiquement.
Conclusion
Le vault de QoreDB repose sur un principe simple : utiliser les meilleurs outils disponibles pour chaque responsabilité. Le chiffrement est délégué à des systèmes éprouvés (keychains OS). Le contrôle d'accès est géré par l'application (master password + Argon2). La prévention des fuites est assurée par le système de types Rust (Sensitive<T>). Aucun secret n'est jamais écrit en clair sur disque, affiché dans les logs, ou conservé en mémoire plus longtemps que nécessaire.
Restez informé des nouveautés
Rejoignez notre newsletter pour recevoir les mises à jour majeures, les nouveaux drivers et nos coulisses techniques.

