Man page - crypt_ra(3)
Packages contains this manual
Available languages:
en fr pl tr deManual
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).
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)