NOM¶
crypt, crypt_r - Chiffrage de données ou de mot de passe
SYNOPSIS¶
#define _XOPEN_SOURCE /* Consultez feature_test_macros(7) */
#include <unistd.h>
char *crypt(const char *key, const char *salt);
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <crypt.h>
char *crypt_r(const char *key, const char *salt,
struct crypt_data *data);
Effectuez l'édition des liens avec l'option
-lcrypt.
DESCRIPTION¶
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
key 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
key, 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 chiffré,
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() peu recommandable pour autre chose que le
cryptage de mots de passe. Si vous comptez développer un projet
cryptographique en utilisant
crypt(), abandonnez cette idée :
achetez un bon bouquin sur la cryptographie, et utilisez une bibliothèque
DES toute faite.
crypt_r() est la version réentrante de
crypt(). La structure
pointée par
data est utilisée pour sauvegarder les
données et marquer les informations. En plus de l'allocation, l'appelant
doit initialiser
data->initialized à zéro avant le premier
appel à
crypt_r().
VALEUR RENVOYÉE¶
En cas de succès, un pointeur vers le mot de passe chiffré est
renvoyé. En cas d'erreur, NULL est renvoyé.
ERREURS¶
- ENOSYS
- La fonction crypt() est absente, probablement en
raison des restrictions d'exportation des États-Unis.
crypt() : SVr4, 4.3BSD, POSIX.1-2001.
crypt_r() est une
extension
GNU.
NOTES¶
Notes sur la glibc¶
La version glibc2 de cette fonction prend en charge des algorithmes de
chiffrement supplémentaires.
Si
salt est une chaîne de caractères commençant par les
caractères « $
id$ » et suivit par une
chaîne se terminant par « $ » :
alors au lieu d'utiliser la machine DES,
id indique la méthode de
chiffrement utilisée et comment le reste de la chaîne de mot de
passe est interprétée. Les valeur suivantes sont prises en charge
pour
id :
ID | Method |
|
|
1 | MD5 |
|
2a | Blowfish (pas dans la glibc officielle ; ajoutée |
|
| par certaines distributions Linux) |
|
. |
|
. |
|
. |
|
. |
|
. |
|
. |
|
5 | SHA-256 (depuis la glibc 2.7) |
|
6 | SHA-512 (depuis la glibc 2.7) |
|
Ainsi, $5$
salt$
encrypted est un mot de passe chiffré SHA-256
et $6$
salt$
encrypted est un mot de passe SHA-512.
«
salt » comprend jusqu'à 16 caractères de
sel après « $
id$ ». La partie
encrypted de la chaîne de mot de passe correspond au mot de passe
chiffré. La taille de cette chaîne est fixe :
MD5 | 22 caractères |
|
SHA-256 | 43 caractères |
|
SHA-512 | 86 caractères |
|
Les caractères de «
salt » et
«
encrypted » sont tiré de l'ensemble [
a–
zA–
Z0–
9./]. Dans les
implémentations MD5 et SHA,
key est utilisé entièrement
(au lieu de seulement les 8 premiers octets dans l'implémentation DES).
VOIR AUSSI¶
login(1),
passwd(1),
encrypt(3),
getpass(3),
passwd(5)
COLOPHON¶
Cette page fait partie de la publication 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>. Christophe Blaess
<
http://www.blaess.fr/christophe/> (1996-2003), Alain Portal
<
http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et
l'équipe francophone de traduction de Debian (2006-2009).
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».