Chiffrement des fichiers
AES-256-GCM
- Confidentialité, le contenu est illisible sans la clé
- Intégrité, toute modification est détectée (tag d'authentification GCM)
- Standard, recommandé par le NIST, largement audité
Dérivation de clé
PBKDF2
- Dérive la clé maître à partir de votre mot de passe ou phrase secrète
- Sel unique stocké côté serveur (pas la clé elle-même)
- Itérations configurées pour ralentir les attaques par force brute
Migration vers Argon2id prévue sur la roadmap sécurité (résistance accrue aux attaques GPU).
Génération aléatoire
CSPRNG
- Générateur cryptographiquement sûr sur l'appareil
- Clés de fichiers, sels et nonces générés localement
- Jamais reçus depuis le serveur en clair
Hachage
SHA-256
- Empreintes de fichiers avant chiffrement (déduplication locale)
- Hachage des codes de récupération 2FA (jamais stockés en clair)
- Vérification d'intégrité en mode debug développeur
Authentification à deux facteurs
TOTP (RFC 6238)
- Codes à 6 chiffres, rotation 30 secondes
- Compatible Google Authenticator, Authy, etc.
- Codes de récupération à usage unique (hachés SHA-256)
Passkeys
WebAuthn / FIDO2
- Clé privée dans Secure Enclave / TPM
- Seule la clé publique est enregistrée côté serveur
- Protection anti-phishing (origin binding)
Exemple pédagogique (simplifié)
// Exemple illustratif, le code production comporte des protections supplémentaires
final fileBytes = await file.readAsBytes();
final key = deriveKeyFromPassword(password, salt);
final encrypted = encrypt(
algorithm: 'AES-256-GCM',
key: key,
data: fileBytes,
);
upload(encrypted); // blob illisible vers Backblaze B2
Cet extrait illustre le principe général. L'implémentation production utilise l'envelope encryption, des nonces uniques par fichier et des contrôles d'intégrité supplémentaires.