crypt - Crytage de données ou de mot de passe.
La fonction
crypt
est celle utilisée pour le cryptage des mots-de-passe. Elle est basée sur
l'algorithme DES (Data Encryption Standard) avec des variantes prévues entre
autres choses pour éviter l'implémentation matérielle d'un casseur de code.
L'argument
clé
est le mot-de-passe saisi par l'utilisateur.
salt
est une chaîne de deux caractères pris dans l'ensemble
[
a-
zA-
Z0-
9./]. Cette chaîne est utilisée
pour introduire une perturbation (parmi 4096) dans l'algorithme.
En utilisant les sept bits de poids faibles des huit premiers caractères de la
clé,
une clé de 56-bits est obtenue, qui est alors utilisée pour crypter de
manière répétée une chaîne de caractères constante (souvent une chaîne de
zéros). La valeur renvoyée pointe sur le mot de passe crypté, une chaîne de 13
caractères ASCII imprimables, les deux premiers caractères représentant
l'argument
salt lui-même.
Cette valeur renvoyée pointe sur des données statiques dont le contenu
est écrasé à chaque appel.
Attention : L'espace des clés consistent en
2**56
soient 7,2e16 valeurs possibles. Une recherche exhaustive est possible en
utilisant des ordinateurs
massivement parallèles. Certains logiciels sont disponibles, comme
crack(1),
qui exploreront la portion de l'espace des clés contenant les mots de
passe habituellement utilisés par les humains.
Ainsi, le choix d'un mot de passe doit au minimum éviter les noms propres ou
communs. On recommande fortement l'utilisation d'un programme comme
passwd(1)
pour vérifier la fiabilité des mots de passe dès la saisie.
L'algorithme DES lui-même a quelques inconvénients qui rendent
l'utilisation de
crypt (3)
peu recommandable pour autre chose que le
cryptage de mots de passe.
Si vous comptez développer un projet cryptographique en utilisant
crypt(3),
abandonnez cette idée : achetez un bon bouquin sur la
cryptographie, et utilisez une bibliothèque DES toute faite comme il en
existe tant.
Un pointeur vers le mot de passe crypté.
En cas d'erreur, NULL est renvoyé.
La version de cette fonction dans la GlibC 2 a quelques fonctionnalités
supplémentaires :
Si
salt
est une chaîne commençant par les trois caractères "$1$" suivis d'au plus
huit caractères, et éventuellement terminée par "$", alors au lieu d'utiliser
la machine DES, la fonction crypt de la GlibC emploie un algorithme
basé sur MD5 et sort jusqu'à 34 octets, plus précisément "$1$<chaine>$",
où "<chaine>" correspond aux 8 caractères maximum suivant le "$1$" dans
salt,
suivis de 22 octets de l'ensemble
[a-zA-Z0-9./].
La clé entière est significative ici, et non pas ses huit premiers octets.
Pour les programmes utilisant cette fonction, il faut employer l'option -lcrypt
lors de l'édition des liens.
SVID, X/OPEN, BSD 4.3, POSIX 1003.1-2001.
Christophe Blaess, 1996-2003.