SeraVault est une plateforme de stockage de fichiers et de messagerie chiffrée de bout en bout à connaissance nulle, conçue pour résister
aux attaques des ordinateurs classiques et quantiques. Le système utilise ML-KEM-768 (NIST FIPS 203), un
mécanisme d'encapsulation de clés basé sur des réseaux standardisé par le NIST pour la cryptographie post-quantique, combiné avec
AES-256-GCM pour le chiffrement symétrique.
Ce livre blanc fournit une description technique complète de l'architecture cryptographique de SeraVault,
du modèle de sécurité et de l'implémentation. Nous détaillons notre conception à connaissance nulle, les protocoles de gestion des clés et
les primitives cryptographiques post-quantiques.
Note: Ceci est un document évolutif. À mesure que les standards cryptographiques évoluent et que la recherche en sécurité
progresse, nous mettrons à jour notre implémentation et cette documentation en conséquence. La version actuelle reflète
le système de production à novembre 2025.
2. Modèle de Menace
2.1 Capacités de l'Adversaire
SeraVault est conçu pour protéger contre les adversaires suivants:
2.1.1 Compromission du Serveur
Nous supposons que l'infrastructure serveur peut être entièrement compromise. Un attaquant obtenant un accès complet
à nos serveurs ne devrait pas être capable de déchiffrer les fichiers ou messages des utilisateurs. Ceci est réalisé grâce au
chiffrement côté client où les clés de chiffrement n'atteignent jamais le serveur en clair.
2.1.2 Adversaire Réseau
Nous supposons qu'un adversaire peut intercepter, modifier ou injecter du trafic réseau entre clients et serveurs. TLS
fournit une sécurité au niveau transport, mais notre chiffrement au niveau applicatif garantit que même la compromission TLS
n'expose pas les données en clair.
2.1.3 Adversaire Quantique
Nous anticipons de futurs adversaires ayant accès à des ordinateurs quantiques cryptographiquement pertinents (CRQC). Les
cryptosystèmes à clé publique traditionnels comme RSA et la cryptographie sur courbes elliptiques sont vulnérables à l'algorithme de Shor. SeraVault
utilise ML-KEM-768, qui est basé sur la difficulté des problèmes de réseaux supposés résistants aux attaques quantiques.
2.1.4 Adversaire Étatique
Nous concevons contre des acteurs étatiques avec des ressources computationnelles significatives, la capacité de contraindre les
fournisseurs de services et des capacités "Récolter Maintenant, Déchiffrer Plus Tard" où les données chiffrées sont stockées pour un déchiffrement futur
quand les ordinateurs quantiques deviendront disponibles.
2.2 Hypothèses de Confiance
Sécurité de l'Appareil Client: Nous supposons que l'appareil de l'utilisateur n'est pas compromis. Les logiciels malveillants côté client peuvent toujours vaincre le chiffrement.
Primitives Cryptographiques: Nous faisons confiance aux algorithmes cryptographiques standardisés par le NIST (ML-KEM-768, AES-256-GCM).
Génération de Nombres Aléatoires: Nous nous appuyons sur crypto.getRandomValues() du navigateur pour des nombres aléatoires cryptographiquement sécurisés.
Force de la Phrase Secrète Utilisateur: Pour l'authentification par phrase secrète, nous supposons que les utilisateurs choisissent des phrases secrètes suffisamment fortes (minimum 12 caractères).
2.3 Hors Portée
Les menaces suivantes sont explicitement hors portée:
Attaques par canaux auxiliaires sur le matériel client
Accès physique aux appareils clients déverrouillés
Coercition ou ingénierie sociale des utilisateurs
Extensions de navigateur malveillantes ou navigateurs compromis
Analyse des métadonnées (modèles d'accès aux fichiers, heures de téléchargement, tailles de fichiers visibles par les serveurs)
3. Architecture Système
3.1 Conception à Connaissance Nulle
SeraVault implémente une véritable architecture à connaissance nulle où le serveur n'a pas accès à:
Contenu des fichiers en clair
Clés de chiffrement (sauf sous forme chiffrée)
Noms de fichiers, structures de dossiers ou autres métadonnées
Contenu des messages dans le système de chat chiffré
Toutes les opérations de chiffrement et déchiffrement se produisent côté client dans le navigateur ou l'application de l'utilisateur. Le serveur
stocke uniquement des données chiffrées et agit comme une couche de stockage et de synchronisation passive.
3.2 Vue d'Ensemble des Composants
3.2.1 Application Client
Application web basée sur React s'exécutant entièrement dans le navigateur
Implémente toutes les opérations cryptographiques utilisant Web Crypto API et WebAssembly
Gère les clés utilisateur et l'authentification
Traite le chiffrement/déchiffrement de fichiers, le chiffrement des métadonnées et le partage sécurisé
3.2.2 Backend Cloud
Base de Données Backend: Stocke les métadonnées de fichiers chiffrées, profils utilisateur, permissions de partage
Stockage Objet: Stocke les blobs de fichiers chiffrés
Service d'Authentification: Gère l'authentification utilisateur (email/mot de passe, non utilisé pour les clés de chiffrement)
Fonctions Cloud: Logique serveur minimale pour notifications et nettoyage (pas d'accès aux données en clair)
3.3 Flux de Données
Flux de Téléchargement de Fichier
L'utilisateur sélectionne un fichier dans le navigateur
Le client génère une clé symétrique aléatoire de 256 bits (Clé Fichier)
Le client chiffre le contenu du fichier avec AES-256-GCM utilisant la Clé Fichier
Le client chiffre les métadonnées du fichier (nom, taille, type) avec le Secret Partagé de l'utilisateur
Le client encapsule la Clé Fichier pour la clé publique de l'utilisateur utilisant ML-KEM-768
Le client télécharge le blob chiffré vers le stockage cloud
Le client écrit les métadonnées chiffrées et la clé encapsulée dans la base de données backend
Flux de Téléchargement de Fichier
Le client récupère les métadonnées chiffrées de la base de données backend
Le client déchiffre les métadonnées utilisant le Secret Partagé de l'utilisateur
Le client décapsule la Clé Fichier utilisant ML-KEM-768 avec la clé privée de l'utilisateur
Le client télécharge le blob chiffré depuis le stockage cloud
Le client déchiffre le contenu du fichier avec AES-256-GCM utilisant la Clé Fichier
Le client présente le fichier en clair à l'utilisateur
4. Primitives Cryptographiques
4.1 ML-KEM-768 (NIST FIPS 203)
Mécanisme d'Encapsulation de Clés Basé sur les Réseaux Modulaires est notre primitive cryptographique post-quantique principale,
standardisée par le NIST en août 2024 comme FIPS 203.
Paramètres
Paramètre
Valeur
Niveau de Sécurité
NIST Niveau 3 (équivalent à AES-192)
Taille Clé Publique
1 184 octets
Taille Clé Privée
2 400 octets
Taille Texte Chiffré
1 088 octets
Taille Secret Partagé
32 octets
Pourquoi ML-KEM-768?
Standardisé NIST: Premier algorithme post-quantique finalisé par le NIST
Sécurité Conservatrice: Le niveau 3 fournit une forte marge de sécurité
Performance: Génération de clés et encapsulation/décapsulation rapides
Résistance Quantique: Basé sur Learning With Errors (LWE) sur des réseaux modulaires, supposé sécurisé contre les attaques quantiques
4.2 AES-256-GCM
Advanced Encryption Standard avec clés 256 bits en mode Galois/Counter fournit le chiffrement authentifié
pour le contenu des fichiers.
Propriétés
Taille Clé: 256 bits
Taille Nonce: 96 bits (12 octets), généré aléatoirement par chiffrement
Tag d'Authentification: 128 bits (16 octets)
Sécurité: Fournit à la fois confidentialité et authenticité
Résistance Quantique: L'algorithme de Grover réduit la taille effective de la clé à 128 bits, toujours sécurisé
4.3 ChaCha20-Poly1305
ChaCha20-Poly1305 est un algorithme de chiffrement authentifié à haute vitesse utilisé pour protéger le matériel
de clé sensible (comme votre clé privée) au repos.
Usage: Chiffrement des clés privées utilisateur utilisant des clés dérivées de phrases secrètes
Performance: Extrêmement rapide en logiciel, idéal pour les appareils mobiles
Sécurité: Immunisé contre les attaques temporelles (temps constant), fournit une sécurité de 256 bits
Adoption: Standardisé dans la RFC 8439, utilisé par Google, Cloudflare et WireGuard
4.4 Argon2id
Argon2id pour dériver des clés de chiffrement à partir de phrases secrètes utilisateur. Vainqueur du Password Hashing Competition (2015).
Coût temporel: 3 itérations
Coût mémoire: 64 Mio (65536 Kio)
Parallélisme: 4 threads
Sel: Valeur aléatoire de 128 bits, unique par chiffrement
Sortie: Clé de 256 bits
Pourquoi Argon2id: Argon2id nécessite beaucoup de mémoire, rendant les attaques GPU et ASIC coûteuses. Il combine
les approches indépendantes des données (Argon2i) et dépendantes des données (Argon2d) pour la résistance aux canaux auxiliaires et
une protection maximale contre les tentatives de craquage parallèles.
5. Protocole de Chiffrement de Fichiers
5.1 Génération de Clés
Lorsqu'un utilisateur crée son compte et génère ses clés de chiffrement :
// Générer une paire de clés ML-KEM-768
(cléPublique, cléPrivée) = ML-KEM-768.KeyGen()
// Dériver une clé de chiffrement à partir de la phrase secrète
sel = CSPRNG(32 octets)
cléChiffrement = Argon2id(phraseSecrète, sel, t=3, m=64Mio, p=4, 32 octets)
// Chiffrer la clé privée avec la clé dérivée de la phrase secrète
nonce = CSPRNG(12 octets)
cléPrivéeChiffrée = ChaCha20-Poly1305.Encrypt(cléChiffrement, nonce, cléPrivée)
// Stocker la clé privée chiffrée dans la base de données backend
// Clé publique stockée dans la base de données backend (en clair, elle est publique)
5.2 Chiffrement de Fichier
Pour chaque fichier téléchargé :
// 1. Générer une clé de chiffrement de fichier aléatoire
cléFichier = CSPRNG(32 octets)
// 2. Chiffrer le contenu du fichier
nonce = CSPRNG(12 octets)
contenuChiffré = AES-256-GCM.Encrypt(cléFichier, nonce, contenuFichier)
// Le résultat inclut une étiquette d'authentification de 16 octets
// 3. Encapsuler la clé de fichier pour le propriétaire
(texteChiffré, secretPartagé) = ML-KEM-768.Encapsulate(cléPubliquePropriétaire)
// Le secret partagé est utilisé pour chiffrer la clé de fichier
nonceClé = CSPRNG(12 octets)
cléFichierChiffrée = AES-256-GCM.Encrypt(secretPartagé, nonceClé, cléFichier)
// 4. Chiffrer les métadonnées
métadonnées = {nom, taille, type, dateEnvoi}
nonceMétadonnées = CSPRNG(12 octets)
métadonnéesChiffrées = AES-256-GCM.Encrypt(secretPartagéUtilisateur, nonceMétadonnées, métadonnées)
5.3 Déchiffrement de Fichier
// 1. Déchiffrer la clé privée avec la phrase secrète
cléChiffrement = Argon2id(phraseSecrète, sel, t=3, m=64Mio, p=4, 32 octets)
cléPrivée = ChaCha20-Poly1305.Decrypt(cléChiffrement, nonce, cléPrivéeChiffrée)
// 2. Décapsuler pour récupérer le secret partagé
secretPartagé = ML-KEM-768.Decapsulate(cléPrivée, texteChiffré)
// 3. Déchiffrer la clé de fichier
cléFichier = AES-256-GCM.Decrypt(secretPartagé, nonceClé, cléFichierChiffrée)
// 4. Déchiffrer le contenu du fichier
contenuFichier = AES-256-GCM.Decrypt(cléFichier, nonce, contenuChiffré)
// 5. Déchiffrer les métadonnées
métadonnées = AES-256-GCM.Decrypt(secretPartagéUtilisateur, nonceMétadonnées, métadonnéesChiffrées)
5.4 Chiffrement des Métadonnées
Contrairement à de nombreux systèmes de stockage chiffré, SeraVault chiffre les métadonnées de fichier incluant :
Noms de fichiers
Tailles de fichiers
Types MIME
Chemins de dossiers
Horodatages de téléchargement
Cela empêche le serveur de construire un profil des modèles d'activité de l'utilisateur basé sur les noms ou types de fichiers.
Visibilité des Métadonnées : Bien que le contenu et les noms soient chiffrés, le serveur connaît toujours :
Tailles des blobs chiffrés (tailles approximatives des fichiers)
Horodatages de téléchargement/modification
Nombre de fichiers par utilisateur
Relations de partage (utilisateur A a partagé quelque chose avec utilisateur B)
Ceci est inhérent à tout système de stockage cloud et ne peut être complètement éliminé sans utiliser des techniques comme
ORAM (Oblivious RAM), qui impacteraient gravement les performances.
6. Gestion des Clés
6.1 Hiérarchie des Clés Utilisateur
Chaque utilisateur possède plusieurs clés servant différents objectifs :
Type de Clé
Objectif
Stockage
Clé Publique ML-KEM-768
Encapsulation de clé de fichier (autres chiffrent pour vous)
Base de données backend (en clair)
Clé Privée ML-KEM-768
Décapsulation de clé de fichier
Base de données backend (chiffrée avec clé dérivée de phrase secrète)
Secret Partagé
Chiffrement des métadonnées
Dérivé de la paire de clés ML-KEM-768
Clé Dérivée de Phrase Secrète
Chiffre la clé privée
Dérivée à la demande, jamais stockée
6.2 Emplacements de Stockage des Clés
Important : SeraVault supporte plusieurs méthodes d'authentification simultanément. Les utilisateurs peuvent activer
l'authentification par phrase secrète, par clé matérielle et par biométrie en même temps. Chaque méthode
stocke une copie indépendamment chiffrée de la clé privée à différents emplacements, offrant redondance et flexibilité.
6.2.1 Authentification par Phrase Secrète
La méthode d'authentification principale où la clé privée est chiffrée avec une clé dérivée de phrase secrète et stockée dans la base de données backend :
L'utilisateur crée une phrase secrète forte (minimum 12 caractères)
La phrase secrète dérive une clé de chiffrement via Argon2id (64 Mio mémoire)
Clé privée chiffrée avec clé dérivée utilisant ChaCha20-Poly1305
Clé privée chiffrée stockée dans la base de données backend
À la connexion : Clé privée chiffrée téléchargée et déchiffrée avec phrase secrète
Clé privée déchiffrée conservée en mémoire du navigateur pendant la session
Clé privée supprimée à la déconnexion
6.2.2 Authentification par Clé Matérielle
Les utilisateurs peuvent activer l'authentification par clé matérielle en plus ou à la place de l'authentification par phrase secrète. Les clés privées sont
protégées par une clé de sécurité matérielle (YubiKey, Titan Key) utilisant FIDO2/WebAuthn :
Clé privée chiffrée avec clé dérivée de l'ID d'identifiant de la clé matérielle (via Argon2id)
Clé privée chiffrée stockée dans IndexedDB du navigateur (côté client uniquement)
Clé privée jamais envoyée à un serveur
Clé matérielle doit être physiquement présente pour dériver la clé de déchiffrement
Clé privée déchiffrée seulement si nécessaire, conservée transitoirement en mémoire
Fonctionne avec tout authentificateur FIDO2 (YubiKey 5, Titan Key, etc.)
Compromis Clé Matérielle : Si vous utilisez des clés matérielles sans authentification par phrase secrète, perdre la
clé matérielle signifie perdre l'accès à vos données chiffrées sauf si vous avez une clé de sauvegarde ou un fichier de clé exporté.
La clé privée chiffrée dans IndexedDB ne peut pas être déchiffrée sans la clé matérielle physique présente.
6.2.3 Authentification Biométrique
Les utilisateurs peuvent activer l'authentification biométrique (empreinte digitale, Face ID) pour un accès pratique sur appareils mobiles :
Clé privée chiffrée avec clé dérivée de l'ID d'identifiant WebAuthn (via Argon2id)
Clé privée chiffrée stockée dans localStorage du navigateur (côté client uniquement)
Clé privée jamais envoyée à un serveur
Authentification biométrique requise pour dériver la clé de déchiffrement
Fonctionne avec les capteurs biométriques natifs de l'appareil
6.2.4 Sauvegarde de Fichier de Clé
Les utilisateurs peuvent exporter leur clé privée chiffrée avec une phrase secrète séparée :
L'utilisateur génère une phrase secrète de sauvegarde forte
Clé privée rechiffrée avec clé dérivée de phrase secrète de sauvegarde
Fichier de clé chiffré téléchargé par l'utilisateur
L'utilisateur stocke le fichier de clé en sécurité hors ligne
Peut être utilisé pour récupérer l'accès si la méthode d'authentification principale est perdue
6.3 Rotation des Clés
SeraVault supporte la rotation des clés pour maintenir la confidentialité persistante :
Processus de Rotation des Clés
L'utilisateur génère une nouvelle paire de clés ML-KEM-768
Pour chaque fichier possédé par l'utilisateur :
Déchiffrer la clé de fichier avec l'ancienne clé privée
Re-encapsuler la clé de fichier avec la nouvelle clé publique
Mettre à jour la base de données backend avec la nouvelle clé encapsulée
Pour chaque fichier partagé :
Notifier les partenaires de partage du changement de clé
Re-encapsuler les clés partagées avec la nouvelle clé publique
Ancienne clé privée effacée en sécurité
Nouvelle clé publique publiée
Considération Performance : La rotation de clés pour les utilisateurs avec des milliers de fichiers peut être chronophage.
L'opération est effectuée progressivement en arrière-plan.
7. Partage Sécurisé de Fichiers
7.1 Modèle de Partage
SeraVault implémente l'encapsulation de clé par destinataire pour le partage de fichiers :
// Le propriétaire du fichier partage le fichier avec le destinataire
// 1. Le propriétaire récupère la clé publique du destinataire depuis la base de données backend
cléPubliqueDestinataire = Backend.getPublicKey(idUtilisateurDestinataire)
// 2. Le propriétaire déchiffre la clé de fichier pour lui-même
secretPartagéPropriétaire = ML-KEM-768.Decapsulate(cléPrivéePropriétaire, texteChiffréPropriétaire)
cléFichier = AES-256-GCM.Decrypt(secretPartagéPropriétaire, nonceClé, cléFichierChiffrée)
// 3. Le propriétaire encapsule la clé de fichier pour le destinataire
(texteChiffréDestinataire, secretPartagéDestinataire) = ML-KEM-768.Encapsulate(cléPubliqueDestinataire)
nonceCléDestinataire = CSPRNG(12 octets)
cléFichierChiffréeDestinataire = AES-256-GCM.Encrypt(secretPartagéDestinataire, nonceCléDestinataire, cléFichier)
// 4. Stocker la clé encapsulée du destinataire dans la base de données backend
Backend.grantAccess(idFichier, idUtilisateurDestinataire, texteChiffréDestinataire, cléFichierChiffréeDestinataire)
7.2 Propriétés du Partage
Clés par Destinataire : Chaque destinataire reçoit sa propre copie encapsulée de la clé de fichier
Pas de Re-chiffrement : Le contenu du fichier n'est pas rechiffré, seule la clé de fichier est re-encapsulée
Révocation Instantanée : Le propriétaire peut révoquer l'accès en supprimant la clé encapsulée du destinataire
Confidentialité Persistante : Révoquer l'accès empêche l'accès futur, mais le destinataire peut avoir mis en cache le texte en clair
Post-Quantique : Le partage utilise ML-KEM-768, résistant aux attaques quantiques
7.3 Modèle de Permissions
Permission
Description
Propriétaire
Contrôle total : lire, modifier, supprimer, partager, révoquer
Visualiser
Peut déchiffrer et visualiser le fichier, ne peut pas modifier ou partager
Actuellement, SeraVault implémente un simple modèle de permission propriétaire/visualisation. Les utilisateurs partagés peuvent visualiser les fichiers mais ne peuvent pas
les modifier ou les partager avec d'autres.
7.4 Partage de Groupe
Pour partager avec plusieurs utilisateurs, le propriétaire peut créer un "partage de groupe" :
Le propriétaire sélectionne plusieurs destinataires
Le système encapsule la clé de fichier pour chaque destinataire individuellement
Tous les destinataires obtiennent un accès simultané
Le propriétaire peut révoquer des utilisateurs individuels sans affecter les autres
Coût de Stockage : Chaque fichier partagé nécessite de stocker une clé encapsulée par destinataire (~1 Ko).
Pour un partage à grande échelle, c'est négligeable comparé au contenu du fichier lui-même. Seul le quota de stockage du propriétaire du fichier
est consommé, peu importe le nombre de personnes avec qui c'est partagé.
8. Méthodes d'Authentification
8.1 Authentification Multi-Facteurs
SeraVault sépare l'authentification du compte de l'accès aux clés de chiffrement :
Authentification du Compte : Prouve que vous êtes le propriétaire du compte (service d'authentification)
Accès aux Clés : Prouve que vous pouvez accéder aux clés de chiffrement (phrase secrète, biométrie, clé matérielle)
8.2 Authentification Basée sur Phrase Secrète
La méthode d'authentification par défaut :
L'utilisateur crée une phrase secrète forte (minimum 12 caractères appliqué)
Phrase secrète utilisée pour dériver une clé via Argon2id (coût mémoire 64 Mio)
Clé dérivée chiffre la clé privée ML-KEM-768 de l'utilisateur
Phrase secrète jamais envoyée au serveur
Clé privée chiffrée stockée dans la base de données backend
8.3 Authentification Biométrique
Utilise WebAuthn avec authentificateurs de plateforme :
Exploite les capteurs biométriques de l'appareil (empreinte digitale, Face ID)
Clé privée chiffrée avec identifiant dérivé de WebAuthn
Clé privée stockée dans IndexedDB du navigateur, chiffrée
Données biométriques ne quittent jamais l'appareil
Nécessite le support WebAuthn dans le navigateur
8.4 Authentification par Clé Matérielle (YubiKey)
Utilise FIDO2/CTAP2 pour authentification soutenue par matériel :
Mode Standard : YubiKey utilisé pour authentification WebAuthn, clés chiffrées et stockées comme d'habitude
Mode Paranoïaque : Clés privées stockées exclusivement sur YubiKey, jamais sur serveurs
Supporte YubiKey série 5 avec extension HMAC-secret
Nécessite présence de clé physique pour toutes opérations en Mode Paranoïaque
8.5 Passkey (Authentificateur de Plateforme)
Authentification moderne sans mot de passe utilisant WebAuthn :
Stocké dans l'enclave sécurisée de l'appareil (TPM, Secure Enclave)
Synchronisé sur les appareils de l'utilisateur via plateforme (iCloud Keychain, Google Password Manager)
Combine sécurité et commodité
Authentification résistante au phishing
9. Messagerie Chiffrée
9.1 Architecture de Chat
SeraVault inclut une messagerie chiffrée de bout en bout utilisant les mêmes primitives cryptographiques que le chiffrement de fichiers :
9.2 Échange de Clé de Conversation
// Créer une conversation
// 1. L'initiateur génère une clé de conversation aléatoire
cléConversation = CSPRNG(32 octets)
// 2. Pour chaque participant (y compris l'initiateur) :
(texteChiffré_i, secretPartagé_i) = ML-KEM-768.Encapsulate(cléPublique_participant_i)
nonce_i = CSPRNG(12 octets)
cléConversationChiffrée_i = AES-256-GCM.Encrypt(secretPartagé_i, nonce_i, cléConversation)
// 3. Stocker les clés de conversation chiffrées dans la base de données backend
// Chaque participant peut déchiffrer avec sa clé privée
9.3 Chiffrement de Message
// Envoyer un message
// 1. L'expéditeur déchiffre la clé de conversation
secretPartagé = ML-KEM-768.Decapsulate(cléPrivéeExpéditeur, texteChiffréExpéditeur)
cléConversation = AES-256-GCM.Decrypt(secretPartagé, nonce, cléConversationChiffrée)
// 2. Chiffrer le message
nonceMessage = CSPRNG(12 octets)
messageChiffré = AES-256-GCM.Encrypt(cléConversation, nonceMessage, contenuMessage)
// 3. Télécharger vers la base de données backend
Backend.addMessage(idConversation, messageChiffré, nonceMessage, horodatage)
9.4 Propriétés du Chat
Chiffré de Bout en Bout : Le serveur ne peut pas lire le contenu des messages
Sécurisé Post-Quantique : Utilise ML-KEM-768 pour l'échange de clé
Chat de Groupe : Supporte les conversations multi-participants
Persistant : Messages stockés chiffrés dans la base de données backend
Sur Invitation Uniquement : Doit être contacts pour initier conversations (empêche spam)
Visibilité des Métadonnées : Le serveur connaît :
Qui est dans quelles conversations
Horodatages des messages
Longueurs approximatives des messages
C'est similaire à la visibilité des métadonnées côté serveur de Signal.
9.5 Améliorations Futures
Améliorations potentielles pour versions futures :
Mitigation : Sans phrases secrètes utilisateur ou clés matérielles, l'attaquant ne peut pas déchiffrer. L'architecture à connaissance nulle limite les dommages à la collecte de données chiffrées.
11.1.2 Écoute Passive du Réseau
Menace : Un attaquant intercepte le trafic réseau.
Impact : Faible. TLS protège le transport, mais même la compromission TLS n'expose que des données chiffrées.
Mitigation : Le chiffrement au niveau application assure que le texte en clair n'est jamais transmis. Métadonnées chiffrées.
11.1.3 Attaque par Ordinateur Quantique
Menace : Un ordinateur quantique futur tente de casser le chiffrement.
Impact : Faible pour données protégées par ML-KEM-768. Sécurité du chiffrement symétrique (AES-256) réduite mais toujours forte.
Mitigation : ML-KEM-768 basé sur problèmes de réseau résistants aux algorithmes quantiques connus. AES-256 fournit 128 bits de sécurité contre attaques quantiques (algorithme de Grover), suffisant pour la plupart des cas d'usage.
11.1.4 Phrase Secrète Faible
Menace : L'utilisateur choisit une phrase secrète faible, l'attaquant effectue une force brute hors ligne.
Impact : Élevé si réussi. L'attaquant déchiffre la clé privée et obtient accès à tous les fichiers.
Mitigation :
Exigence de phrase secrète minimum 12 caractères
Hachage Argon2id nécessitant mémoire (64 Mio) rend les attaques GPU/ASIC coûteuses
Encourager l'utilisation de clé matérielle pour comptes à haute valeur
Éducation utilisateur sur force de phrase secrète
11.1.5 Phishing
Menace : Utilisateur trompé pour entrer phrase secrète sur site malveillant.
Impact : Élevé. L'attaquant obtient la phrase secrète et peut déchiffrer la clé privée.
Mitigation :
WebAuthn fournit résistance au phishing (liaison de domaine)
Encourager l'utilisation de clés matérielles ou passkeys
Éducation utilisateur
HTTPS avec certificat valide requis
11.2 Force Cryptographique
Primitive
Sécurité Classique
Sécurité Quantique
ML-KEM-768
192 bits
192 bits (Niveau NIST 3)
AES-256-GCM
256 bits
128 bits (Grover)
Argon2id (64 Mio)
Dépend de phrase secrète
Dépend de phrase secrète
11.3 Limitations Connues
Fuite de Métadonnées : Tailles de fichiers, horodatages, relations de partage visibles au serveur
Confidentialité Persistante : Chat n'implémente pas confidentialité persistante parfaite (pas de ratcheting)
Force de Phrase Secrète : Sécurité système limitée par force de phrase secrète choisie par utilisateur
Sécurité du Navigateur : Repose sur sandboxing navigateur et implémentation Web Crypto API
Pas de Déniabilité : Messages chiffrés fournissent authentification mais pas déniabilité
Analyse de Trafic : Modèles d'activité (téléchargements, téléversements, connexions) observables par serveur
11.4 Audit et Vérification
SeraVault est open source, permettant des audits de sécurité indépendants :
Code source disponible sur GitHub
Implémentation cryptographique peut être vérifiée
Audits de sécurité tiers encouragés
Programme de bug bounty pour divulgation responsable