Key Hierarchy - Hiérarchie des clés¶
Architecture de gestion des clés cryptographiques
Vue d'ensemble¶
graph TD
MK[Master Key - K_master]
MK --> UK[User Key - K_user]
MK --> DK[Device Key - K_device]
UK --> DOC1[Document Key 1 - K_doc]
UK --> DOC2[Document Key 2 - K_doc]
UK --> DOC3[Document Key 3 - K_doc]
DK --> LOCAL[Local Storage Key] Niveaux de clés¶
1. Master Key (K_master)¶
- Dérivation: PBKDF2 depuis password utilisateur
- Stockage: Jamais stockée, recalculée à chaque session
- Usage: Dériver K_user et K_device
2. User Key (K_user)¶
- Dérivation: HKDF depuis K_master
- Stockage: Encrypted avec K_device dans backend
- Usage: Chiffrer/déchiffrer K_doc
3. Device Key (K_device)¶
- Dérivation: HKDF depuis K_master + device_id
- Stockage: Secure Enclave (iOS) / Keystore (Android)
- Usage: Chiffrer K_user localement
4. Document Key (K_doc)¶
- Génération: Random 256 bits par document
- Stockage: Encrypted avec K_user dans metadata
- Usage: Chiffrer le contenu du document
Envelopes cryptographiques¶
Document Envelope¶
{
"encrypted_content": "base64-aes-gcm-ciphertext",
"key_envelope": {
"encrypted_key": "base64-encrypted-K_doc",
"algorithm": "AES-256-GCM",
"iv": "base64-iv",
"auth_tag": "base64-tag"
},
"metadata": {
"user_id": "uuid",
"device_id": "uuid",
"timestamp": "iso8601"
}
}
Rotation des clés¶
User Key Rotation¶
Déclenché lors de changement de password:
- Générer nouveau K_master depuis nouveau password
- Dériver nouveau K_user
- Re-chiffrer tous les K_doc avec nouveau K_user
- Stocker nouveau K_user encrypted avec K_device
Device Key Rotation¶
Lors d'ajout/suppression de device:
- Révoquer ancien K_device
- Générer nouveau K_device
- Re-chiffrer K_user avec nouveau K_device
Sécurité¶
Principes¶
- ✅ Zero-knowledge: Backend ne voit jamais K_master
- ✅ Forward secrecy: Rotation régulière des clés
- ✅ Isolation: K_doc unique par document
- ✅ Multi-device: K_user accessible depuis plusieurs devices
Menaces mitigées¶
| Menace | Mitigation |
|---|---|
| Vol password | PBKDF2 (100k iterations) |
| Vol backend DB | K_user encrypted avec K_device |
| Vol device | K_device dans Secure Enclave |
| Compromission K_doc | Isolation par document |
Voir aussi: Cryptographie