Man page - crypt(3)

Packages contains this manual

Available languages:

en fr pl tr ja de

Manual


CRYPT (3) Library Functions Manual CRYPT (3)

NOM

crypt , crypt_r , crypt_rn , crypt_ra — hachage des mot de passe

BIBLIOTHÈQUE

Crypt Library (libcrypt, -lcrypt)

SYNOPSIS

#include <crypt.h>

char *

crypt ( const char *motdepasse , const char *paramÚtres );

char *

crypt_r ( const char *motdepasse , const char *paramÚtres , struct crypt_data *données );

char *

crypt_rn ( const char *motdepasse , const char *paramÚtres , struct crypt_data *données , int taille );

char *

crypt_ra ( const char *motdepasse , const char *paramÚtres , void **données , int *taille );

DESCRIPTION

Les fonctions crypt , crypt_r , crypt_rn et crypt_ra “hachent” de maniĂšre irrĂ©versible motdepasse avant de le stocker dans la base de donnĂ©es ( shadow (5)) des mots de passe du systĂšme en utilisant une “mĂ©thode de hachage” cryptographique. Le rĂ©sultat de cette opĂ©ration se nomme “mot de passe condensĂ©â€ ou simplement “condensĂ©.” Les mĂ©thodes de hachage sont dĂ©crites dans crypt (5).

paramĂštres permet de spĂ©cifier la mĂ©thode de hachage Ă  utiliser, et fournit aussi diffĂ©rents paramĂštres Ă  cette derniĂšre, en particulier un “salage” (salt) alĂ©atoire qui permet de s’assurer que deux condensĂ©s stockĂ©s seront toujours diffĂ©rents, mĂȘme si leurs chaĂźnes motdepasse sont identiques.

L’argument donnĂ©es de crypt_r est une structure de type struct crypt_data . Elle contient au minimum ces champs :

struct crypt_data {
char output[CRYPT_OUTPUT_SIZE];
char setting[CRYPT_OUTPUT_SIZE];
char input[CRYPT_MAX_PASSPHRASE_SIZE];
char initialized;
};

Si crypt_r s’exĂ©cute avec succĂšs, le mot de passe condensĂ© sera stockĂ© dans output . MĂȘme si ce n’est pas obligatoire, il est recommandĂ© dans les applications d’utiliser les champs motdepasse et paramĂštres pour stocker les chaĂźnes qu’elles passeront Ă  crypt_r Ă  l’aide des arguments motdepasse et paramĂštres . Cela facilitera la suppression des donnĂ©es sensibles lorsqu’elles ne seront plus utilisĂ©es.

Le champ initialized doit ĂȘtre dĂ©fini Ă  zĂ©ro avant la premiĂšre utilisation d’un objet de type struct crypt_data dans un appel Ă  crypt_r (). Nous recommandons de dĂ©finir Ă  zĂ©ro l’objet dans son ensemble avant sa premiĂšre utilisation, et non pas seulement initialized et les champs documentĂ©s. (Bien entendu, il faut effectuer cette opĂ©ration avant de stocker quoi que ce soit dans paramĂštres et entrĂ©e .)

L’argument donnĂ©es de crypt_rn doit aussi pointer vers un objet de type struct crypt_data , et taille doit contenir la taille de ce dernier, convertie en int . Lorsqu’il est utilisĂ© avec crypt_rn , l’objet data dans son ensemble (Ă  l’exception des champs entrĂ©e et paramĂštres ) doit ĂȘtre dĂ©fini Ă  zĂ©ro avant sa premiĂšre utilisation, et cela n’est pas une simple recommandation, comme avec crypt_r . Cela mis Ă  part, les champs de l’objet s’utilisent de la mĂȘme façon qu’avec crypt_r .

Au premier appel Ă  crypt_ra , donnĂ©es doit contenir l’adresse d’une variable de type void * initialisĂ©e Ă  NULL, et taille l’adresse d’une variable de type int initialisĂ©e Ă  zĂ©ro. crypt_ra alloue et initialise un objet de type struct crypt_data en utilisant malloc (3), et Ă©crit son adresse et sa taille dans les variables vers lesquelles pointent respectivement data et taille . Ces derniĂšres peuvent ĂȘtre rĂ©utilisĂ©es lors d’appels ultĂ©rieurs Ă  crypt_ra . Lorsque l’application a terminĂ© son hachage de mots de passe, elle doit dĂ©sallouer l’objet struct crypt_data Ă  l’aide de free (3).

VALEURS RENVOYÉES

Si elles s’exĂ©cutent avec succĂšs, crypt , crypt_r , crypt_rn et crypt_ra renvoient un pointeur vers une chaĂźne qui contiendra le mot de passe condensĂ© et les paramĂštres qui ont Ă©tĂ© utilisĂ©s pour le hacher. Cette chaĂźne est directement utilisable comme valeur de paramĂštres lors d’appels ultĂ©rieurs Ă  crypt , crypt_r , crypt_rn et crypt_ra , et comme valeur de prefix lors d’appels ultĂ©rieurs Ă  crypt_gensalt , crypt_gensalt_rn et crypt_gensalt_ra . Elle ne contiendra que des caractĂšres ASCII imprimables et ne contiendra ni espaces, ni aucun des caractĂšres ‘ : ’, ‘ ; ’, ‘ * ’, ‘ ! ’ ou ‘ \ ’. Voir crypt (5) pour plus de dĂ©tails sur le format des mots de passe condensĂ©s.

crypt place son rĂ©sultat dans une zone de mĂ©moire statique qui sera Ă©crasĂ©e lors d’appels ultĂ©rieurs Ă  crypt . Il n’est pas sans danger d’appeler crypt depuis plusieurs threads simultanĂ©ment.

crypt_r , crypt_rn et crypt_ra placent leur rĂ©sultat dans le champ output de leur argument donnĂ©es . On peut sans danger les appeler depuis plusieurs threads simultanĂ©ment, sous rĂ©serve qu’un objet donnĂ©es sĂ©parĂ© soit utilisĂ© pour chaque thread.

En cas d’erreur, crypt_r , crypt_rn et crypt_ra Ă©crivent un hachage non valable dans le champ output de leur argument donnĂ©es , et crypt Ă©crit un condensĂ© non valable dans sa zone de mĂ©moire statique. La chaĂźne contiendra moins de 13 caractĂšres, commencera par un ‘ * ’ et sera diffĂ©rente de paramĂštres .

En cas d’erreur, crypt_rn et crypt_ra renvoient un pointeur NULL. crypt_r et crypt , quant Ă  elles, renverront aussi un pointeur NULL ou un pointeur vers le condensĂ© non valable, selon la maniĂšre dont aura Ă©tĂ© configurĂ©e libcrypt. Cette possibilitĂ© de renvoyer le condensĂ© non valable est offerte Ă  titre de compatibilitĂ© avec les anciennes applications qui partent du principe que crypt ne peut pas renvoyer de pointeur NULL (voir “NOTES DE PORTABILITÉ” ci-dessous).

Les quatre fonctions dĂ©finissent errno en cas d’échec. En cas de succĂšs, la valeur de errno n’est pas spĂ©cifiĂ© et ne doit pas ĂȘtre invoquĂ©e.

ERREURS
EINVAL

paramÚtres est non valable ou spécifie une méthode de hachage non prise en charge.

ERANGE

motdepasse est trop long (nombre de caractĂšres supĂ©rieur Ă  CRYPT_MAX_PASSPHRASE_SIZE  ; certaines mĂ©thodes de hachage imposeront peut-ĂȘtre des limites plus basses).
Pour crypt_rn seulement : taille est trop petite pour la méthode de hachage spécifiée par paramÚtres .

ENOMEM

L’allocation de mĂ©moire de travail interne a Ă©chouĂ©.
Pour crypt_ra seulement : l’allocation de mĂ©moire pour donnĂ©es a Ă©chouĂ©.

ENOSYS ou EOPNOTSUPP

Le hachage de mots de passe ou la mĂ©thode de hachage spĂ©cifiĂ©e par paramĂštres ne sont pas pris en charge par cette installation. Ces codes d’erreur ne sont pas utilisĂ©s par cette version de libcrypt, mais ils peuvent l’ĂȘtre sur d’autres systĂšmes.

NOTES DE PORTABILITÉ

crypt est incluse dans POSIX, mais crypt_r , crypt_rn et crypt_ra n’appartiennent à aucune norme.

POSIX ne spĂ©cifie aucune mĂ©thode de hachage et ne requiert pas la portabilitĂ© des mots de passe condensĂ©s entre les diffĂ©rents systĂšmes. En pratique, les mots de passe condensĂ©s sont portables entre deux systĂšmes Ă  partir du moment oĂč ces derniers prennent en charge la mĂ©thode de hachage qui a Ă©tĂ© utilisĂ©e. Cependant, le jeu de mĂ©thodes de hachage prises en charge varie considĂ©rablement d’un systĂšme Ă  l’autre.

Le comportement de crypt en cas d’erreur n’est pas bien normalisĂ©. Certaines implĂ©mentations n’ont tout simplement pas prĂ©vu d’échouer (hormis en plantant le programme), alors que d’autres renvoient un pointeur NULL ou une chaĂźne prĂ©dĂ©finie. Certaines implĂ©mentations dĂ©finissent errno , mais la plupart ne le font pas. POSIX prĂ©conise de renvoyer un pointeur NULL et de dĂ©finir errno , mais il ne dĂ©finit qu’une erreur possible, ENOSYS, dans le cas oĂč crypt n’est pas du tout pris en charge. Certaines applications plus anciennes n’ont pas Ă©tĂ© conçues pour gĂ©rer les pointeurs NULL renvoyĂ©s par crypt . On choisit alors le comportement dĂ©crit plus haut pour cette implĂ©mentation, Ă  savoir dĂ©finir errno et renvoyer un hachage non valable et diffĂ©rent de paramĂštres , de façon Ă  ce que ces applications Ă©chouent en se terminant lorsqu’une erreur survient.

Suite aux restrictions historiques Ă  l’exportation des logiciels cryptographiques depuis les USA, crypt est un composant POSIX optionnel. Les applications doivent donc prĂ©voir l’éventualitĂ© que crypt ne soit pas disponible ou Ă©choue systĂ©matiquement Ă  l’exĂ©cution (en dĂ©finissant errno Ă  ENOSYS).

POSIX spécifie que crypt est déclaré dans < unistd.h, > mais seulement si la macro _XOPEN_CRYPT est définie et si sa valeur est supérieure ou égale à zéro. Comme libcrypt ne fournit pas < unistd.h, > elle déclare crypt , crypt_r , crypt_rn et crypt_ra dans < crypt.h > à la place.

Sur une minoritĂ© de systĂšmes (en particulier les versions rĂ©centes de Solaris), crypt utilise un tampon mĂ©moire statique spĂ©cifique aux threads qui lui permet d’ĂȘtre appelĂ©e sans danger depuis plusieurs threads simultanĂ©ment, mais n’empĂȘche pas chaque appel depuis un thread d’écraser les rĂ©sultats de l’appel prĂ©cĂ©dent.

BOGUES

En cas d’erreur, certaines implĂ©mentations de crypt renvoient un condensĂ© non valable qui est stockĂ© dans une zone en lecture seule ou seulement initialisĂ© une fois, ce qui signifie que l’on ne peut supprimer sans danger le tampon pointĂ© par la valeur de retour de crypt que si aucune erreur n’est survenue.

struct crypt_data peut avoir une taille assez importante (32ko dans cette implĂ©mentation de libcrypt ; plus de 128ko dans certaines autres implĂ©mentations). Cette taille est suffisamment importante pour qu’il soit malavisĂ© de l’allouer dans la pile.

Certaines mĂ©thodes de hachage rĂ©centes nĂ©cessitent encore plus de mĂ©moire de travail, mais l’interface crypt_r rend impossible de modifier la taille de struct crypt_data sans casser la compatibilitĂ© binaire. L’interface crypt_rn pourrait accorder plus de mĂ©moire pour certaines mĂ©thodes de hachage spĂ©cifiques, mais l’appelant de crypt_rn n’a aucun moyen de connaĂźtre la quantitĂ© de mĂ©moire Ă  allouer. crypt_ra effectue l’allocation de mĂ©moire elle-mĂȘme, mais ne peut effectuer qu’un seul appel Ă  malloc (3).

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3878201-1.png

HISTORIQUE

Une fonction crypt s’inspirant des machines Ă  rotor est apparue dans Version 6 AT&T UNIX. La fonction crypt “traditionnelle” basĂ©e sur DES est quant Ă  elle apparue dans Version 7 AT&T UNIX.

crypt_r trouve ses origines dans la bibliothÚque GNU C. Il existe aussi une fonction crypt_r sur HP-UX et dans la boßte à outils MKS, mais leurs prototype et sémantique diffÚrent.

crypt_rn et crypt_ra trouvent leur origine dans le projet Openwall.

VOIR AUSSI

crypt_gensalt (3), getpass (3), getpwent (3), shadow (3), login (1), passwd (1), crypt (5), passwd (5), shadow (5), pam (8)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Lucien Gentis <lucien.gentis@waika9.com>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 : https://www.gnu.org/licenses/gpl-3.0.html concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org . Projet Openwall 11 Octobre 2017 CRYPT (3)