1. Introduction
1. Introduction
Une fonction de dérivation de clé (key derivation function, KDF) est un composant de base et essentiel des systèmes cryptographiques. Son objectif est de prendre une source de matériel de clé initial et d'en dériver une ou plusieurs clés secrètes cryptographiquement fortes.
Ce document spécifie une KDF simple basée sur HMAC [HMAC], nommée HKDF, qui peut être utilisée comme élément de base dans divers protocoles et applications, et est déjà utilisée dans plusieurs protocoles IETF, notamment [IKEv2], [PANA] et [EAP-AKA]. L'objectif est de documenter cette KDF de manière générale afin de faciliter son adoption dans les futurs protocoles et applications, et de décourager la prolifération de multiples mécanismes KDF. Il ne s'agit pas d'un appel à modifier les protocoles existants et cela ne modifie ni ne met à jour les spécifications existantes utilisant cette KDF.
HKDF suit le paradigme "extraire-puis-développer" (extract-then-expand), où la KDF se compose logiquement de deux modules. La première étape prend le matériel de clé d'entrée et en "extrait" une clé pseudoaléatoire K de longueur fixe. La deuxième étape "développe" la clé K en plusieurs clés pseudoaléatoires supplémentaires (la sortie de la KDF).
Dans de nombreuses applications, le matériel de clé d'entrée n'est pas nécessairement distribué uniformément, et l'attaquant peut avoir une certaine connaissance partielle à son sujet (par exemple, une valeur Diffie-Hellman calculée par un protocole d'échange de clés) ou même un contrôle partiel (comme dans certaines applications de collecte d'entropie). Ainsi, l'objectif de l'étape "extraction" est de "concentrer" l'entropie possiblement dispersée du matériel de clé d'entrée dans une clé pseudoaléatoire courte mais cryptographiquement forte. Dans certaines applications, l'entrée peut déjà être une bonne clé pseudoaléatoire; dans ces cas, l'étape "extraction" n'est pas nécessaire et la partie "expansion" peut être utilisée seule.
La deuxième étape "développe" la clé pseudoaléatoire à la longueur souhaitée; le nombre et les longueurs des clés de sortie dépendent des algorithmes cryptographiques spécifiques pour lesquels les clés sont nécessaires.
Notez que certaines spécifications KDF existantes, telles que NIST Special Publication 800-56A [800-56A], NIST Special Publication 800-108 [800-108] et IEEE Standard 1363a-2004 [1363a], soit ne considèrent que la deuxième étape (développement d'une clé pseudoaléatoire), soit ne différencient pas explicitement les étapes "extraction" et "expansion", ce qui entraîne souvent des lacunes de conception. L'objectif de cette spécification est de répondre à un large éventail d'exigences KDF tout en minimisant les hypothèses sur la fonction de hachage sous-jacente. Le paradigme "extraire-puis-développer" soutient bien cet objectif (voir [HKDF-paper] pour plus d'informations sur la justification de la conception).