Modèle Cryptographique ProbatioVault
Hiérarchie des clés
Password utilisateur (jamais stocké)
│
▼ Argon2id (64 MiB, t=3, p=4)
│
K_encryption (32 bytes)
│
▼ AES-256-GCM decrypt
│
K_master_user (32 bytes) ─── stocké chiffré dans Secure Store
│
├──▶ HKDF-SHA3-256(doc_id) ──▶ K_doc (32 bytes)
│ │
│ ▼ AES-256-GCM
│ │
│ Document chiffré
│
└──▶ HKDF-SHA3-256(share_id) ──▶ K_share (partage)
Algorithmes utilisés
Dérivation de clés
| Fonction | Algorithme | Paramètres | Conformité |
| Password → K_encryption | Argon2id | m=64MiB, t=3, p=4, L=32 | RFC 9106, OWASP 2024 |
| K_master → K_doc | HKDF-SHA3-256 | salt=doc_id, info=domain | RFC 5869 |
| K_master → K_share | HKDF-SHA3-256 | salt=share_id, info=domain | RFC 5869 |
Chiffrement
| Usage | Algorithme | Taille clé | Conformité |
| Documents | AES-256-GCM | 256 bits | NIST SP 800-38D |
| K_master_user | AES-256-GCM | 256 bits | NIST SP 800-38D |
| Key Wrapping HSM | AES-KWP | 256 bits | NIST SP 800-38F |
Hachage
| Usage | Algorithme | Taille | Conformité |
| Hash probatoire | SHA3-256 | 256 bits | FIPS 202 |
| HMAC (HKDF) | HMAC-SHA3-256 | 256 bits | FIPS 198-1 |
Signature
| Usage | Algorithme | Taille clé | Conformité |
| Signature HSM | RSA-PSS | 4096 bits | PKCS#1 v2.1 |
| Horodatage | RFC 3161 | - | eIDAS |
Propriétés de sécurité
Confidentialité
- Zero-Knowledge : Serveur ne voit jamais les données en clair
- Forward Secrecy : Compromission K_doc n'affecte pas les autres documents
- At-rest Encryption : Documents chiffrés en stockage
Intégrité
- Hash unique : SHA3-256 par document
- GCM Authentication : Tag authentification sur chaque chiffrement
- WORM Storage : Immutabilité garantie
Authenticité
- Signature HSM : Clé privée jamais exportée
- Horodatage qualifié : TSA conforme eIDAS
- Preuve composite : Hash + Signature + Timestamp
Rotation des clés
Rotation password
1. User change password (old → new)
2. Decrypt K_master avec old K_encryption
3. Derive new K_encryption = Argon2id(new_password, new_salt)
4. Re-encrypt K_master avec new K_encryption
5. Save new Master Envelope
Note: K_master_user et tous les K_doc restent INCHANGÉS
→ Aucun document à re-chiffrer
Rotation K_master (rare)
1. Derive new K_master (génération aléatoire)
2. Re-encrypt tous les documents avec new K_doc
3. Update Master Envelope
Note: Opération coûteuse, réservée aux cas de compromission
Domain Separation
Chaque dérivation utilise un domaine unique pour éviter les collisions :
| Usage | Domain String |
| K_encryption | "ProbatioVault_Encryption_v1" |
| K_doc | "ProbatioVault::K_doc::v1" |
| K_share | "ProbatioVault::K_share::v1" |
| K_auth (SRP) | "ProbatioVault_SRP_Auth_v1" |
Stockage des clés
| Clé | Stockage | Protection |
| Password | Jamais | Effacé après dérivation |
| K_encryption | Mémoire | Effacé après usage |
| K_master_user | Secure Store | Chiffré (Master Envelope) |
| K_doc | Mémoire | Dérivé à la demande, effacé après |
| Clés HSM | HSM | Non exportables |
Vecteurs de test
Tous les algorithmes sont validés avec les vecteurs officiels : - RFC 9106 pour Argon2id - RFC 5869 pour HKDF - NIST SP 800-38D pour AES-GCM - NIST FIPS 202 pour SHA3-256