Building an E2E Encrypted Chat Application with LanceDB and Libsodium
Le projet décrit une application de messagerie chiffrée de bout en bout où le serveur agit uniquement comme relais non fiable, utilisant libsodium dans le navigateur, un serveur FastAPI, LanceDB pour le stockage embarqué et WebSocket pour la diffusion en temps réel. LanceDB est choisi comme unique magasin de données pour son fonctionnement embarqué sans infrastructure, son stockage unifié des messages et pièces jointes, ses schémas PyArrow évolutifs et son efficacité colonnaire pour les requêtes par métadonnées. La conception cryptographique repose sur des clés X25519 longue durée conservées côté client, la génération d'une paire éphémère par message pour la confidentialité rétroactive et une auto-chiffrement des messages envoyés afin que l'expéditeur puisse les relire. Les images de canal sont traitées par chiffrement hybride : le contenu est chiffré une fois symétriquement (XSalsa20-Poly1305) et la petite clé symétrique est chiffrée pour chaque destinataire, tandis que les blobs chiffrés sont stockés directement dans une table d'attachements de LanceDB avec vérification d'appartenance au canal. Des mesures durs telles que la validation stricte des identifiants pour éviter les injections, l'export de clés protégé par Argon2id, la limitation de débit, l'interopérabilité PyNaCl/libsodium, une suite de tests et des recommandations de production (TLS, containers, persistance du rate‑limiting) complètent l'architecture.