PD-33 — Dérivation de la clé K_encryption via Argon2id¶
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 **Spécification** | *(ce document)* | | 🛠️ [Plan d'implémentation](PD-33-plan.md) | | | ✅ [Critères d'acceptation](PD-33-acceptability.md) | | | 📝 [Retour d'expérience](PD-33-rex.md) | | [← Retour à crypto](../PD-189-epic.md) · [↑ Index User Story](index.md)Références¶
- EPIC : PD-189 — CRYPTO
- JIRA : PD-33
- Composant : Client-side crypto (mobile, desktop, PWA)
Objectif¶
Implémenter la dérivation cryptographique de la clé K_encryption à partir du mot de passe utilisateur, en utilisant Argon2id avec des paramètres strictement normatifs ProbatioVault.
Cette clé constitue le point d'entrée cryptographique du compte utilisateur et permet exclusivement de chiffrer et déchiffrer la Master Envelope contenant K_master_user.
Toute compromission à ce niveau invaliderait l'ensemble du modèle zero-knowledge, d'où des exigences de conformité et de sécurité strictes.
Description fonctionnelle¶
Lors de la création de compte ou d'un changement de mot de passe :
- Le mot de passe utilisateur est traité uniquement côté client.
- Une clé dérivée K_encryption est générée via Argon2id.
- Cette clé est utilisée pour :
- chiffrer la Master Envelope à l'inscription ;
- déchiffrer puis re-chiffrer la Master Envelope lors d'une rotation.
- Ni le mot de passe, ni la clé dérivée, ni la clé maître utilisateur ne sont jamais transmis au backend.
La dérivation doit être :
- déterministe (mêmes entrées → même sortie),
- coûteuse en CPU et mémoire,
- résistante aux attaques GPU / ASIC,
- compatible multi-plateforme.
Périmètre¶
Inclus¶
- Fonction de dérivation
derivePassword(password, salt_user) → K_encryption. - Implémentation Argon2id conforme RFC 9106.
- Paramètres cryptographiques normatifs ProbatioVault.
- Exécution locale sur mobile, desktop et web.
- Tests unitaires, de performance et de conformité.
- Documentation crypto associée.
Exclu¶
- Authentification réseau (SRP-6a).
- Gestion du changement de mot de passe.
- Génération ou stockage de K_master_user.
- Gestion des enveloppes de clés.
- Chiffrement des documents.
- Toute exécution backend, worker ou HSM.
Paramètres cryptographiques normatifs¶
La fonction de dérivation doit respecter strictement les paramètres suivants :
| Paramètre | Valeur |
|---|---|
| Algorithme | Argon2id v1.3 |
| RFC | RFC 9106 |
| Memory cost | 64 MiB (65 536 KiB) |
| Iterations | 3 |
| Parallelism | 4 |
| Salt | salt_user (16 bytes, unique par utilisateur) |
| Output | 32 bytes (256 bits) |
| Associated Data | "ProbatioVault_Encryption_v1" |
Toute déviation invalide la conformité cryptographique du produit.
Propriétés attendues¶
Sécurité¶
- Résistance élevée aux attaques par dictionnaire.
- Couplage obligatoire mot de passe + salt + paramètres exacts.
- Coût mémoire empêchant une attaque GPU rentable.
- Aucune clé dérivée exploitable sans accès au device utilisateur.
Zero-Knowledge¶
- Le mot de passe ne quitte jamais l'appareil.
- Aucune clé dérivée n'est transmise ou stockée côté serveur.
- Aucun log, exception ou trace ne doit contenir :
- le mot de passe,
- le salt,
- K_encryption,
- un hash ou une représentation encodée.
Interopérabilité¶
- Résultat strictement déterministe.
- Compatible avec les modules cryptographiques suivants :
- déchiffrement Master Envelope,
- rotation de mot de passe,
- dérivation documentaire ultérieure (PD-34).
- Résultats identiques sur iOS, Android, desktop et web.
Diagrammes Mermaid¶
Séquence — Dérivation K_encryption (inscription)¶
Ce diagramme illustre le flux nominal de dérivation lors de la création de compte. Le mot de passe et la clé dérivée ne quittent jamais le client (zero-knowledge, cf. TA-5).
sequenceDiagram
participant U as Utilisateur
participant C as Client (device)
participant A as Argon2id (WASM)
participant ME as Master Envelope
U->>C: Saisit mot de passe
Note over C: salt_user = CSPRNG(16 bytes)
C->>A: derivePassword(password, salt_user)
Note over A: Argon2id v1.3<br/>m=64 MiB, t=3, p=4<br/>ad="ProbatioVault_Encryption_v1"<br/>(cf. Paramètres normatifs, TA-4)
A-->>C: K_encryption (32 bytes)
Note over C: Déterministe : même entrée → même sortie (TA-1)
C->>ME: Chiffre Master Envelope avec K_encryption
Note over ME: Contient K_master_user
C->>C: wipeKey(password, K_encryption)
Note over C: Effacement mémoire best-effort (TA-5) Séquence — Rotation de mot de passe¶
Ce diagramme illustre le re-chiffrement de la Master Envelope lors d'un changement de mot de passe. Les documents existants restent accessibles car K_master_user ne change pas (cf. TA-7).
sequenceDiagram
participant U as Utilisateur
participant C as Client (device)
participant A as Argon2id (WASM)
participant ME as Master Envelope
U->>C: Ancien mot de passe + nouveau mot de passe
C->>A: derivePassword(ancien_mdp, salt_user)
A-->>C: K_encryption_old
C->>ME: Déchiffre Master Envelope → K_master_user
Note over C: Nouveau salt_user = CSPRNG(16 bytes)
C->>A: derivePassword(nouveau_mdp, nouveau_salt)
Note over A: Mêmes paramètres RFC 9106 (TA-4)
A-->>C: K_encryption_new
C->>ME: Re-chiffre Master Envelope avec K_encryption_new
Note over ME: K_master_user inchangé → accès docs préservé (TA-7)
C->>C: wipeKey(ancien_mdp, nouveau_mdp, K_encryption_old, K_encryption_new)
Note over C: Aucune clé transmise au backend (zero-knowledge) Séquence — Vérification de conformité Argon2id¶
Ce diagramme détaille les contrôles internes de la fonction de dérivation, garantissant la conformité RFC 9106 avant toute opération cryptographique.
sequenceDiagram
participant Caller as Appelant
participant D as derivePassword()
participant V as Validation
participant A as Argon2id (WASM)
Caller->>D: (password, salt_user)
D->>V: Valide inputs
Note over V: password ≠ vide<br/>salt = 16 bytes exactement
alt Inputs invalides
V-->>Caller: Erreur (aucun log sensible, TA-5)
else Inputs valides
V-->>D: OK
D->>D: Charge paramètres normatifs
Note over D: m=65536 KiB, t=3, p=4<br/>ad="ProbatioVault_Encryption_v1"<br/>output=32 bytes
D->>A: argon2id(password, salt, params)
Note over A: Aucun fallback PBKDF2 en production
A-->>D: raw_key (32 bytes, TA-4)
D-->>Caller: K_encryption
Note over D: Variation salt → clé distincte (TA-2)
end Contraintes¶
- Exécution exclusivement côté client.
- Bibliothèque Argon2id réputée et auditée.
- Aucune dépendance WebAssembly opaque ou non auditable.
- Aucun fallback PBKDF2 ou équivalent.
- Aucun calcul déporté (backend, worker distant, HSM).
Hypothèses¶
- Le
salt_userest généré une seule fois à la création du compte. - Le salt est stocké en clair côté backend.
- Le mot de passe respecte la politique minimale définie par le produit.
- L'environnement client dispose de ressources suffisantes pour Argon2id.
- Les modules de chiffrement sont traités par d'autres User Stories.
Tests d'acceptation¶
TA-1 — Déterminisme¶
À password et salt identiques, la fonction retourne toujours exactement la même clé de 32 bytes.
TA-2 — Variation du salt¶
À mot de passe identique mais salt différent, les clés dérivées doivent être totalement distinctes (distance de Hamming significative).
TA-3 — Performance client¶
- Mobile milieu de gamme : 300–600 ms.
- Desktop moderne : < 100 ms.
- Aucune exécution serveur.
TA-4 — Conformité RFC¶
- Version Argon2 correcte.
- Mémoire allouée ≈ 64 MiB.
- Output length exact de 32 bytes.
TA-5 — Sécurité applicative¶
- Aucun log sensible.
- Aucune fuite via stacktrace ou exception.
- Effacement mémoire best-effort du mot de passe après usage.
TA-6 — Compatibilité Master Envelope¶
La clé dérivée permet de chiffrer et déchiffrer correctement une Master Envelope valide.
TA-7 — Rotation mot de passe¶
Une nouvelle clé dérivée permet de re-chiffrer la Master Envelope sans invalider l'accès aux documents existants.
Livrables¶
- Fonction de dérivation intégrée au module crypto client.
- Tests unitaires isolés (sans réseau).
- Tests multi-plateformes.
- Documentation
/docs/crypto/argon2id.md. - Exemple reproductible (test vector).
Liens documentaires¶
- EPIC : PD-189 — CRYPTO
- Spécifications techniques ProbatioVault — Zero-Knowledge
- RFC 9106 — Argon2
- Architecture cryptographique — Hiérarchie des clés
Definition of Done¶
- Implémentation conforme aux paramètres normatifs.
- Tests unitaires et de performance validés.
- Documentation publiée.
- Revue sécurité validée.
- Aucun log ou fuite de secret.
- Mention explicite de conformité RFC 9106.