Dérivation de clés (KDF)

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche

Portail > Gestion des clés

Une fonction de dérivation de clés (KDF) produit une ou plusieurs clés à partir d'un secret d'entrée : un mot de passe, ou un secret partagé issu d'un échange. On distingue deux usages très différents.

Deux familles

  • KDF à partir d'un mot de passe : l'entrée est faible et devinable → la KDF doit être lente et coûteuse pour freiner les attaques par force brute.
  • KDF à partir d'un secret fort : l'entrée a déjà une bonne entropie (ex. secret Diffie-Hellman) → la KDF doit surtout structurer et étendre ce secret, sans surcoût artificiel.

KDF à partir de mots de passe

Fonction Caractéristique
PBKDF2 Itérations nombreuses ; largement déployé, mais peu coûteux en mémoire (attaquable par matériel dédié).
bcrypt Conçu pour le hachage de mots de passe ; coût ajustable.
scrypt Memory-hard : exige beaucoup de mémoire, freine les attaques GPU/ASIC.
Argon2 Lauréat du concours PHC ; memory-hard et paramétrable (variante Argon2id recommandée).

Éléments indispensables :

  • un sel (salt) unique par mot de passe, pour empêcher les tables précalculées (rainbow tables) et les collisions entre utilisateurs ;
  • un facteur de travail (itérations, mémoire) calibré et révisé dans le temps.

Distinction importante : « hachage de mot de passe » (vérifier un mot de passe stocké) et « dérivation de clé à partir d'un mot de passe » (produire une clé de chiffrement) utilisent les mêmes fonctions, mais répondent à des besoins différents.

KDF à partir d'un secret fort : HKDF

HKDF suit un schéma « extract-then-expand » :

  1. Extract : condense le secret d'entrée en une clé pseudo-aléatoire uniforme.
  2. Expand : produit autant de matériel de clé que nécessaire, avec une étiquette de contexte (info) pour séparer les usages.

C'est le bon outil pour dériver des clés distinctes (chiffrement, MAC…) d'un même secret partagé, par exemple à l'issue d'un échange de clés TLS.

Bonnes pratiques

  • Mots de passe : Argon2id ou scrypt (sinon PBKDF2 bien paramétré), avec sel unique.
  • Secrets forts : HKDF, avec un info distinct par usage.
  • Ne jamais utiliser une simple fonction de hachage brute pour dériver une clé d'un mot de passe.
  • Réévaluer périodiquement les paramètres de coût.

Points clés à retenir

  • Mot de passe (entrée faible) → KDF lente/memory-hard (Argon2id, scrypt, PBKDF2) + sel unique.
  • Secret fort → HKDF (extract-then-expand) pour structurer et étendre.
  • Hachage de mot de passe ≠ dérivation de clé, même si les fonctions se recoupent.
  • Calibrer et faire évoluer le facteur de travail.

Voir aussi

Cryptographie symétrique — Portail
Fondamentaux Principe · Bloc et flot · Modes opératoires · Padding · IV et nonces
Intégrité / auth. MAC et HMAC · AEAD
Gestion des clés Aléa / CSPRNG · KDF · Échange de clés · Stockage / rotation
Algorithmes AES · ChaCha20/Salsa20 · DES / 3DES · Blowfish et Twofish · RC4 · Camellia, ARIA et SM4 · AES-GCM · ChaCha20-Poly1305 · Hachage
Applications Données au repos · En transit / hybride
Sécurité avancée Attaques · Conformité · Post-quantique