Simpl-Resultat/docs/adr/0004-aes-256-gcm-encryption.md
le king fu 942cbb0624 docs: organize technical documentation into docs/ folder
Move specs and masterplan to docs/archive/, add architecture.md with
full technical overview, create 5 ADRs (Tauri v2, useReducer, sqlx
migrations, AES-256-GCM encryption, multi-profile DB), and move
guide-utilisateur.md into docs/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 07:34:01 -05:00

1.8 KiB

ADR-0004 : Chiffrement AES-256-GCM pour l'export de données

  • Date : 2025-06
  • Statut : Accepté

Contexte

L'application permet d'exporter et d'importer des données utilisateur (transactions, catégories, budgets) pour la sauvegarde ou le transfert entre machines. Ces données contiennent des informations financières personnelles et doivent être protégées.

Il fallait un format d'export :

  • Chiffré avec un mot de passe utilisateur
  • Intègre (détection de toute altération)
  • Auto-contenu (un seul fichier)

Décision

Nous avons implémenté un format propriétaire SREF (Simpl'Résultat Export Format) côté Rust avec :

  • Chiffrement : AES-256-GCM (chiffrement authentifié)
  • Dérivation de clé : Argon2id à partir du mot de passe utilisateur
  • Format binaire :
    • Magic : SREF (4 octets)
    • Version : 0x01 (1 octet)
    • Salt : 16 octets (aléatoire)
    • Nonce : 12 octets (aléatoire)
    • Données chiffrées : reste du fichier

La détection du format se fait via la commande is_file_encrypted qui vérifie le magic SREF.

Conséquences

Positives

  • Chiffrement authentifié : AES-256-GCM garantit à la fois la confidentialité et l'intégrité des données
  • Résistance au brute-force : Argon2id rend les attaques par dictionnaire coûteuses
  • Implémentation Rust : performances natives, pas de dépendance à des binaires externes
  • Format auto-détectable : le magic SREF permet de distinguer fichiers chiffrés et non chiffrés

Négatives

  • Format propriétaire : pas d'interopérabilité avec d'autres outils (pas de standard comme GPG)
  • Pas de récupération possible si le mot de passe est perdu
  • Évolution du format : les changements de version nécessitent une rétrocompatibilité