PD-34 — Dérivation des clés de chiffrement (K_encryption, K_doc)¶
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 **Spécification** | *(ce document)* | | 🛠️ [Plan d'implémentation](PD-34-plan.md) | | | ✅ [Critères d'acceptation](PD-34-acceptability.md) | | | 📝 [Retour d'expérience](PD-34-rex.md) | | [← Retour à crypto](../PD-189-epic.md) · [↑ Index User Story](index.md)Références¶
- EPIC : PD-189 — CRYPTO
- JIRA : PD-34
- Composants concernés : client (mobile / desktop / PWA)
Objectif¶
Mettre en œuvre le mécanisme de dérivation cryptographique des clés utilisées dans le modèle zero-knowledge de ProbatioVault, afin de garantir :
- la séparation stricte des responsabilités cryptographiques ;
- l'unicité des clés par document ;
- la possibilité de changer le mot de passe utilisateur sans re-chiffrer les documents stockés en WORM.
Cette User Story établit le socle cryptographique sur lequel reposent le chiffrement des documents, la rotation des clés et la gestion multi-device.
Description fonctionnelle¶
Le système doit implémenter une hiérarchie de dérivation de clés permettant de produire, à partir du mot de passe utilisateur, des clés cryptographiquement isolées et déterministes.
La dérivation suit les niveaux suivants :
-
Niveau 2A — K_encryption Clé dérivée du mot de passe utilisateur, utilisée exclusivement pour chiffrer et déchiffrer l'enveloppe maître contenant la clé maître utilisateur.
-
Niveau 3 — K_master_user Clé maître utilisateur, générée aléatoirement, unique pour toute la durée de vie du compte, et servant de source à toutes les clés documentaires.
-
Niveau 4 — K_doc Clé spécifique à un document, dérivée de manière déterministe à partir de K_master_user et de l'identifiant du document.
Chaque document doit disposer d'une clé indépendante, de sorte que la compromission d'un élément n'affecte jamais les autres.
Périmètre¶
Inclus¶
- Dérivation de K_encryption à partir du mot de passe utilisateur.
- Dérivation de K_doc à partir de K_master_user et d'un identifiant de document.
- Implémentation d'un mécanisme de dérivation standardisé et auditable.
- Garanties d'isolation cryptographique entre documents.
- Tests de conformité, de performance et de déterminisme.
- Documentation de la hiérarchie de clés et des paramètres cryptographiques.
Exclu¶
- Chiffrement ou déchiffrement des documents.
- Gestion des enveloppes de clés (traitée dans PD-35).
- Stockage persistant des clés.
- Authentification utilisateur.
- Gestion HSM ou signature probatoire.
- Interface utilisateur.
Paramètres cryptographiques normatifs¶
Dérivation K_doc (HKDF-SHA3-256)¶
| Paramètre | Valeur |
|---|---|
| Algorithme | HKDF avec SHA3-256 |
| RFC | RFC 5869 |
| IKM | K_master_user (32 bytes) |
| Salt | UUID document converti en 16 bytes |
| Info | "ProbatioVault::K_doc::v1" (domain separation) |
| Output | 32 bytes (256 bits) |
Hiérarchie des clés¶
Password utilisateur
↓ Argon2id (PD-33)
K_encryption
↓ AES-256-GCM decrypt
K_master_user
↓ HKDF-SHA3-256(doc_id)
K_doc (unique par document)
Diagrammes¶
Sequence de derivation des cles¶
Le diagramme suivant illustre le flux complet de derivation, depuis le mot de passe utilisateur jusqu'a la cle documentaire K_doc. Chaque etape respecte l'isolation zero-knowledge : aucune cle intermediaire ne quitte l'appareil client.
sequenceDiagram
participant U as Utilisateur
participant C as Client (app)
participant KS as Keychain / SecureStore
Note over U,C: Saisie du mot de passe (reste local — zero-knowledge)
U->>C: password
rect rgb(240, 248, 255)
Note over C: Niveau 2A — K_encryption
C->>C: Argon2id(password, salt_user)<br/>→ K_encryption (32 bytes)<br/>(PD-33, RFC 9106)
end
rect rgb(245, 255, 245)
Note over C: Niveau 3 — K_master_user
C->>KS: recuperer master_envelope
KS-->>C: master_envelope (chiffree)
C->>C: AES-256-GCM decrypt(K_encryption, master_envelope)<br/>→ K_master_user (32 bytes)
end
rect rgb(255, 248, 240)
Note over C: Niveau 4 — K_doc (unicite par document)
C->>C: UUID doc_id → 16 bytes (salt)
C->>C: HKDF-SHA3-256(<br/> IKM = K_master_user,<br/> salt = doc_id_bytes,<br/> info = "ProbatioVault::K_doc::v1"<br/>)<br/>→ K_doc (32 bytes)<br/>(RFC 5869)
end
Note over C: K_doc prete pour chiffrement/dechiffrement document
Note over C: K_encryption et K_master_user<br/>doivent etre effacees (zeroize)<br/>apres usage Diagramme d'etats du cycle de vie d'une cle¶
Le diagramme d'etats ci-dessous modelise les transitions possibles pour une cle dans la hierarchie de derivation. Les contraintes zero-knowledge et d'effacement memoire sont materialisees par les etats terminaux.
stateDiagram-v2
[*] --> NonDerivee : init
state "Non derivee" as NonDerivee
state "En derivation" as EnDerivation
state "Active en memoire" as Active
state "Utilisee" as Utilisee
state "Effacee (zeroize)" as Effacee
NonDerivee --> EnDerivation : password saisi (K_encryption)<br/>ou master_envelope dechiffree (K_master_user)<br/>ou doc_id fourni (K_doc)
EnDerivation --> Active : derivation reussie<br/>(Argon2id / AES-256-GCM / HKDF)
EnDerivation --> Effacee : echec derivation<br/>(erreur crypto, mauvais password)
Active --> Utilisee : operation crypto executee<br/>(chiffrement / dechiffrement)
Active --> Effacee : timeout securite<br/>ou fermeture session
Utilisee --> Effacee : effacement obligatoire<br/>apres usage (cles intermediaires)<br/>— isolation zero-knowledge
Utilisee --> Active : reutilisation autorisee<br/>(K_doc pour meme document,<br/>K_master_user pour session active)
Effacee --> [*]
note right of Active
Cle jamais transmise au backend
Cle jamais loggee
Cle jamais persistee hors SecureStore
end note
note right of Effacee
Memoire mise a zero (zeroize)
Determinisme cross-platform garanti
end note Contraintes¶
- Zero-Knowledge
- Le mot de passe utilisateur ne doit jamais quitter l'appareil.
- Les clés dérivées ne doivent jamais être transmises au backend en clair.
-
Aucune clé ne doit être loggée ou persistée hors des mécanismes autorisés.
-
Conformité cryptographique
- Utilisation d'algorithmes standardisés et reconnus.
- Paramètres de dérivation alignés avec les recommandations actuelles.
- Séparation des usages via des mécanismes de domain separation.
-
UUID documents au format standard (36 chars) converti en 16 bytes pour le salt.
-
Performance
- La dérivation doit rester compatible avec un usage mobile.
-
Les temps de calcul doivent rester acceptables sans compromettre la sécurité.
-
Interopérabilité
- Les résultats de dérivation doivent être strictement déterministes.
- Les implémentations doivent produire les mêmes résultats sur toutes les plateformes supportées.
Hypothèses¶
- Un salt utilisateur unique est disponible pour la dérivation du mot de passe.
- L'identifiant de document est unique et stable dans le temps.
- K_master_user est déjà générée et disponible en mémoire sécurisée.
- Les primitives cryptographiques sous-jacentes sont fiables et correctement implémentées par les bibliothèques utilisées.
- Les opérations de chiffrement sont prises en charge par d'autres modules.
Liens documentaires¶
- EPIC :
- PD-189 — CRYPTO
- Architecture :
- Architecture Cryptographique — Hiérarchie des clés
- Sécurité :
- RFC 9106 — Argon2
- RFC 5869 — HKDF
- Spécifications ProbatioVault — Zero-Knowledge Model