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¶
- EINVAL
- Le format de salt est incorrect.
- ENOSYS
- La fonction crypt() est absente, probablement en raison des
restrictions d'exportation des États-Unis.
- EPERM
- /proc/sys/crypto/fips_enabled est différent de 0, et un
chiffrement faible comme DES est sélectionné.
ATTRIBUTS¶
Multithreading (voir pthreads(7))¶
La fonction
crypt() n'est pas sûre dans un contexte multithread.
La fonction
crypt_r() est sûre dans un contexte multithread.
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.65 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> ».