Aller au contenu

HKDF : HMAC-based Key Derivation Function

Cryptographie

HKDF : HMAC-based Key Derivation Function. « Fonction de dérivation de clé fondée sur HMAC », par analogie avec une raffinerie qui transforme un pétrole brut de qualité variable en carburants calibrés, chacun dans sa cuve étiquetée.

Extraire : L'étape extract condense un secret d'entrée non uniforme (typiquement le résultat d'un échange Diffie-Hellman) et un sel en une clé pseudo-aléatoire uniforme. Un secret partagé n'est pas une clé ; il en a seulement l'ambition.

Étendre : L'étape expand produit autant d'octets que nécessaire à partir de cette clé et d'un champ info qui décrit l'usage. Changer l'info donne des clés indépendantes : une pour chiffrer, une pour authentifier, une par sens de communication.

Ce qu'elle n'est pas : HKDF est rapide par conception : elle suppose une entrée déjà riche en entropie. Lui confier un mot de passe humain revient à confier un coffre à un portier très poli qui laisse entrer quiconque essaie assez de clés ; pour les mots de passe, on utilise une fonction lente comme PBKDF2 ou Argon2.

Ce qui arrive si on s'en passe

Sans dérivation par HKDF (ou une fonction équivalente), le secret brut issu d'un échange de clés sert directement de clé : ses bits ne sont pas uniformément répartis et les garanties de sécurité du protocole ne tiennent plus formellement. Pire, la même valeur finit souvent réutilisée pour plusieurs usages, chiffrement dans les deux sens et authentification, ce qui ouvre la voie à des attaques croisées : un message chiffré dans un sens peut être rejoué dans l'autre, ou la compromission d'un usage entraîne celle de tous. La séparation de contexte par le champ info empêche précisément ce mélange des genres.

Explication de la marmotte

Quand deux ordinateurs se mettent d'accord sur un secret commun, ce secret sort souvent un peu bosselé : certaines parties sont plus prévisibles que d'autres. Cet outil le passe d'abord dans une sorte de mixeur pour obtenir une pâte bien homogène, puis il en découpe autant de morceaux qu'il faut, chacun portant une étiquette différente : un morceau pour cacher les messages, un autre pour vérifier qu'ils n'ont pas été modifiés, et ainsi de suite. Comme chaque morceau dépend de son étiquette, découvrir l'un ne permet pas de deviner les autres.

Où ce terme est utilisé

← Tout le glossaire