3. Vue d'ensemble
Dans de nombreuses applications de la cryptographie à clé publique, la sécurité de l'utilisateur dépend en fin de compte d'une ou plusieurs valeurs de texte secrètes ou mots de passe. Étant donné qu'un mot de passe n'est pas directement applicable en tant que clé pour un système cryptographique conventionnel, un certain traitement du mot de passe est nécessaire pour effectuer des opérations cryptographiques avec celui-ci. De plus, comme les mots de passe sont souvent choisis dans un espace relativement restreint, un soin particulier est requis dans ce traitement pour se défendre contre les attaques par recherche.
Une approche générale de la cryptographie basée sur mot de passe, telle que décrite par Morris et Thompson [MORRIS] pour la protection des tables de mots de passe, consiste à combiner un mot de passe avec un sel pour produire une clé. Le sel peut être considéré comme un index dans un grand ensemble de clés dérivées du mot de passe et n'a pas besoin d'être gardé secret. Bien qu'il soit possible pour un adversaire de construire une table de mots de passe possibles (une attaque dite "par dictionnaire"), la construction d'une table de clés possibles sera difficile, car il y aura de nombreuses clés possibles pour chaque mot de passe. Un adversaire sera donc limité à rechercher les mots de passe séparément pour chaque sel.
Une autre approche de la cryptographie basée sur mot de passe consiste à construire des techniques de dérivation de clé qui sont relativement coûteuses, augmentant ainsi le coût d'une recherche exhaustive. Une façon de le faire est d'inclure un nombre d'itérations dans la technique de dérivation de clé, indiquant combien de fois itérer une fonction sous-jacente par laquelle les clés sont dérivées. Un nombre modeste d'itérations (disons 1000) ne sera probablement pas un fardeau pour les parties légitimes lors du calcul d'une clé, mais constituera un fardeau important pour les adversaires.
Le sel et le nombre d'itérations ont formé la base du chiffrement basé sur mot de passe dans PKCS #5 v2.0, et sont également adoptés ici pour les diverses opérations cryptographiques. Ainsi, la dérivation de clé basée sur mot de passe telle que définie ici est une fonction d'un mot de passe, d'un sel et d'un nombre d'itérations, où les deux dernières quantités n'ont pas besoin d'être gardées secrètes.
À partir d'une fonction de dérivation de clé basée sur mot de passe, il est simple de définir des schémas de chiffrement et d'authentification de message basés sur mot de passe. Comme dans PKCS #5 v2.0, les schémas de chiffrement basés sur mot de passe ici sont basés sur un schéma de chiffrement conventionnel sous-jacent, où la clé du schéma conventionnel est dérivée du mot de passe. De même, le schéma d'authentification de message basé sur mot de passe est basé sur un schéma conventionnel sous-jacent. Cette approche à deux couches rend les techniques basées sur mot de passe modulaires en termes des techniques sous-jacentes sur lesquelles elles peuvent être basées.
Il est prévu que les fonctions de dérivation de clé basées sur mot de passe puissent trouver d'autres applications que simplement les schémas de chiffrement et d'authentification de message définis ici. Par exemple, on pourrait dériver un ensemble de clés avec une seule application d'une fonction de dérivation de clé, plutôt que de dériver chaque clé avec une application séparée de la fonction. Les clés de l'ensemble seraient obtenues sous forme de sous-chaînes de la sortie de la fonction de dérivation de clé. Cette approche pourrait être employée dans le cadre de l'établissement de clé dans un protocole orienté session. Une autre application est la vérification de mot de passe, où la sortie de la fonction de dérivation de clé est stockée (avec le sel et le nombre d'itérations) aux fins de la vérification ultérieure d'un mot de passe.
Tout au long de ce document, un mot de passe est considéré comme une chaîne d'octets de longueur arbitraire dont l'interprétation en tant que chaîne de texte n'est pas spécifiée. Dans l'intérêt de l'interopérabilité, cependant, il est recommandé que les applications suivent certaines règles communes d'encodage de texte. ASCII et UTF-8 [RFC3629] sont deux possibilités. (ASCII est un sous-ensemble d'UTF-8.)
Bien que la sélection des mots de passe soit en dehors de la portée de ce document, des directives ont été publiées [NISTSP63] qui peuvent bien être prises en compte.