Aller au contenu

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
K_master = PBKDF2(password, salt, 100000 iterations, 256 bits)

2. User Key (K_user)

  • Dérivation: HKDF depuis K_master
  • Stockage: Encrypted avec K_device dans backend
  • Usage: Chiffrer/déchiffrer K_doc
K_user = HKDF(K_master, "user-key-context", 256 bits)

3. Device Key (K_device)

  • Dérivation: HKDF depuis K_master + device_id
  • Stockage: Secure Enclave (iOS) / Keystore (Android)
  • Usage: Chiffrer K_user localement
K_device = HKDF(K_master, device_id, 256 bits)

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
K_doc = randomBytes(32) // 256 bits
encrypted_K_doc = AES-256-GCM(K_doc, K_user)

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:

  1. Générer nouveau K_master depuis nouveau password
  2. Dériver nouveau K_user
  3. Re-chiffrer tous les K_doc avec nouveau K_user
  4. Stocker nouveau K_user encrypted avec K_device

Device Key Rotation

Lors d'ajout/suppression de device:

  1. Révoquer ancien K_device
  2. Générer nouveau K_device
  3. 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