| CRYPT(3) | Library Functions Manual | CRYPT(3) |
NUME¶
crypt, crypt_r,
crypt_rn, crypt_ra —
criptarea (tăierea și amestecarea
părților) frazei de acces
BIBLIOTECA¶
Crypt Library (libcrypt, -lcrypt)
SINOPSIS¶
<crypt.h>
char *
crypt(const
char *phrase, const char *setting);
char *
crypt_r(const char *phrase,
const char *setting, struct crypt_data
*data); char *
crypt_rn(const
char *phrase, const char *setting,
struct crypt_data *data, int
size); char *
crypt_ra(const
char *phrase, const char *setting,
void **data, int *size);
DESCRIERE¶
Funcțiile crypt,
crypt_r, crypt_rn și
crypt_ra aplică în mod ireversibil
“hash” (tăierea și amestecarea
părților) la frază pentru
stocarea în baza de date a parolelor sistemului
(shadow(5)) utilizând o metodă
criptografică “hashing” (tăierea și
amestecarea părților). Rezultatul acestei operații se
numește “hashed passphrase” (tăierea și
amestecarea părților frazei de acces) sau pur și simplu
“hash.” Metodele de „hash” sunt descrise
în crypt(5).
Parametrii setting controlează metoda de „hash” utilizată și furnizează, de asemenea, diverși parametri pentru metoda aleasă, cel mai important fiind un „salt (un praf de sare)” aleatoriu “” care asigură că nu există două „hash-uri” stocate identice, chiar dacă șirurile fraza sunt identice.
Argumentul data pentru
crypt_r este o structură de tip
„struct crypt_data”. Aceasta are cel
puțin următoarele câmpuri:
struct crypt_data {
char output[CRYPT_OUTPUT_SIZE];
char setting[CRYPT_OUTPUT_SIZE];
char input[CRYPT_MAX_PASSPHRASE_SIZE];
char initialized;
};
După o returnare cu succes din
crypt_r, fraza de acces hash va fi stocată
în output. Aplicațiile sunt
încurajate, dar nu obligate, să utilizeze câmpurile
input și setting pentru a
stoca șirurile de caractere pe care le vor transmite ca
input phrase și setting
către crypt_r. Acest lucru va facilita
ștergerea tuturor datelor sensibile după ce acestea nu mai
sunt necesare.
Câmpul initialized
trebuie să fie pus la zero înainte de prima utilizare a unui
obiect „struct crypt_data”
într-un apel către
crypt_r().
Recomandăm să puneți la zero întregul obiect, nu
doar initialized și nu doar câmpurile
documentate, înainte de prima utilizare. (Desigur, faceți
acest lucru înainte de a stoca orice în
setting și input.)
Argumentul data pentru
crypt_rn trebuie să indice, de asemenea, un
obiect „struct crypt_data”, iar
size trebuie să fie dimensiunea acelui obiect,
convertită în int. Când este
utilizat cu crypt_rn, întregul obiect
data (cu excepția câmpurilor
input și setting) trebuie
să fie pus la zero înainte de prima utilizare; aceasta nu este
doar o recomandare, așa cum este în cazul
crypt_r. În rest, câmpurile obiectului
au aceleași utilizări ca și în cazul
crypt_r.
La prima apelare a crypt_ra,
data trebuie să fie adresa unei variabile
„void *” definită la NULL, iar
size trebuie să fie adresa unei variabile
int definită la zero.
crypt_ra va aloca și inițializa un
obiect „struct crypt_data”,
utilizând malloc(3), și va scrie adresa
și dimensiunea acestuia în variabilele indicate de
data și size. Acestea pot
fi reutilizate în apelurile ulterioare. După ce
aplicația a terminat „hash-uirea” (tăierea
și amestecarea părților) frazelor de acces, ar trebui
să realoce obiectul „struct
crypt_data” folosind free(3).
VALORI RETURNATE¶
După finalizarea cu succes, crypt,
crypt_r, crypt_rn și
crypt_ra returnează un indicator către
un șir care codifică atât fraza de acces
„hash-uită”, cât și parametrii
utilizați pentru codificarea acesteia. Acest șir poate fi
utilizat direct ca setting în alte apeluri
către crypt, crypt_r,
crypt_rn și crypt_ra
și ca prefix în apeluri către
crypt_gensalt,
crypt_gensalt_rn și
crypt_gensalt_ra. Va fi în întregime
imprimabil ASCII și nu va conține spații albe sau
caracterele ‘:’,
‘;’,
‘*’,
‘!’ sau
‘\’. Consultați
crypt(5) pentru mai multe detalii despre formatul frazelor
de acces „hash-uite”.
crypt plasează rezultatul
într-o zonă de stocare statică, care va fi
suprascrisă de apelurile ulterioare către
crypt. Nu este sigur să apelați
crypt din mai multe fire de execuție
simultan. De asemenea, nu este recomandat să utilizați
indicatorul returnat ca argument pentru o altă apelare a
crypt, deoarece unele implementări, inclusiv
versiunile anterioare ale libxcrypt, pot suprascrie tamponul de
ieșire static subiacent înainte de calcularea hash-ului.
crypt_r, crypt_rn
și crypt_ra plasează rezultatul
în câmpul output al argumentului
data. Este sigur să le apelați simultan
din mai multe fire, atâta timp cât se utilizează un
obiect data separat pentru fiecare fir. De asemenea,
nu este recomandat să utilizați indicatorul returnat ca
argument pentru o altă apelare a crypt_r,
crypt_rn și crypt_ra
utilizând același obiect data pentru
apelări ulterioare, deoarece unele implementări, inclusiv
versiunile anterioare ale libxcrypt, pot suprascrie câmpul
output al argumentului data
transmis înainte de calcularea hash-ului. Nu se recomandă
apelarea crypt_ra cu parametrii
phrase și/sau setting
aflați într-un obiect data transmis care
este mai mic decât dimensiunea „struct
crypt_data”, deoarece unele implementări, inclusiv
versiunile anterioare ale libxcrypt, pot să nu păstreze
literalele transmise, dacă obiectul data
trebuie modificat.
În cazul unei erori,
crypt_r, crypt_rn și
crypt_ra scriu un hash
nevalid în
câmpul output al argumentului lor
data, iar crypt scrie un hash
nevalid în zona sa de stocare statică. Acest șir va
avea mai puțin de 13 caractere, va începe cu
‘*’ și nu va fi egal cu
setting.
În cazul unei erori, crypt_rn
și crypt_ra returnează un indicator
nul. crypt_r și crypt
pot returna, de asemenea, un indicator nul sau pot returna un indicator
către hash-ul nevalid, în funcție de modul în
care a fost configurată libcrypt; (opțiunea de a returna
hash-ul nevalid este pentru compatibilitate cu aplicațiile vechi care
presupun că crypt nu poate returna un
indicator nul. A se vedea secțiunea
NOTE PRIVIND
PORTABILITATEA de mai jos.)
Toate cele patru funcții definesc errno atunci când eșuează. Când funcțiile reușesc, valoarea errno este nespecificată și nu trebuie luată în considerare.
ERORI-IEȘIRE¶
EINVAL- setting este nevalid sau solicită o metodă de hash care nu este acceptată.
ERANGE- phrase este prea lungă (mai mult de
CRYPT_MAX_PASSPHRASE_SIZEcaractere; unele metode de hash pot avea limite mai mici).
Numaicrypt_rn: parametrul size este prea mic pentru metoda de hash solicitată de setting. ENOMEM- Nu s-a putut aloca memoria internă temporară.
Numaicrypt_ra: nu s-a putut aloca memorie pentru data. ENOSYSsauEOPNOTSUPP- Hash-ul parolelor nu este deloc acceptat în această instalare sau metoda de hash solicitată de setting nu este acceptată. Aceste coduri de eroare nu sunt utilizate de această versiune a libcrypt, dar pot apărea în alte sisteme.
NOTE PRIVIND PORTABILITATEA¶
crypt este inclus în POSIX, dar
crypt_r, crypt_rn și
crypt_ra nu fac parte din niciun standard.
POSIX nu specifică nicio metodă de hash și nu impune ca parolele hash să fie portabile între sisteme. În practică, parolele hash sunt portabile atâta timp cât ambele sisteme acceptă metoda de hash utilizată. Cu toate acestea, setul de metode de hash acceptate variază considerabil de la un sistem la altul.
Comportamentul crypt în cazul
erorilor nu este bine standardizat. Unele implementări pur și
simplu nu pot eșua (cu excepția blocării programului),
altele returnează un indicator nul sau un șir fix. Majoritatea
implementărilor nu definesc errno, dar unele o
fac. POSIX specifică returnarea unui indicator nul și
definirea errno, dar definește o singură
eroare posibilă, ENOSYS, în cazul
în care crypt nu este deloc acceptat. Unele
aplicații mai vechi nu sunt pregătite să gestioneze
indicatorii nul returnați de crypt.
Comportamentul descris mai sus pentru această implementare,
stabilirea errno și returnarea unui hash
nevalid diferit de setting, este ales pentru a face ca
aceste aplicații să eșueze prin terminarea
operației atunci când apare o eroare.
Datorită restricțiilor istorice privind exportul de
software criptografic din SUA, crypt este o
componentă POSIX opțională. Aplicațiile trebuie
să fie pregătite pentru eventualitatea ca
crypt să nu fie disponibilă sau
să eșueze întotdeauna ( stabilind
errno la ENOSYS) în
timpul rulării.
POSIX specifică faptul că
crypt este declarat în
<unistd.h>, dar numai
dacă macrocomanda _XOPEN_CRYPT este
definită și are o valoare mai mare sau egală cu zero.
Deoarece libcrypt nu furnizează
<unistd.h>, aceasta
declară crypt, crypt_r, crypt_rn și crypt_ra în
<crypt.h> .
Pe o minoritate de sisteme (în special versiunile recente
ale Solaris), crypt utilizează un tampon de
stocare static specific firelor de execuție, ceea ce face ca apelarea
simultană din mai multe fire de execuție să fie
sigură, dar nu împiedică fiecare apel dintr-un fir de
execuție să suprascrie rezultatele celui anterior.
ERORI¶
Unele implementări ale crypt,
în cazul unei erori, returnează un hash nevalid care este
stocat într-o locație numai pentru citire sau
inițializat o singură dată, ceea ce
înseamnă că este sigur să ștergeți
tamponul indicat de valoarea returnată de
crypt numai dacă nu a apărut o
eroare.
„struct crypt_data” poate fi destul de mare (32 ko în această implementare a libcrypt; peste 128 ko în alte implementări). Este suficient de mare încât ar putea fi neînțelept să o alocați pe stivă.
Unele metode de hash proiectate recent necesită și
mai multă memorie temporară, dar interfața
crypt_r face imposibilă modificarea
dimensiunii „struct crypt_data”
fără a afecta compatibilitatea binară. Interfața
crypt_rn ar putea acomoda alocări mai mari
pentru metode specifice de hash, dar apelantul
crypt_rn nu are cum să știe
câtă memorie să aloce. crypt_ra
efectuează alocarea, dar poate efectua o singură apelare
către malloc(3).
ATRIBUTE¶
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
| Interfață | Atribut | Valoare |
| crypt | Siguranța firelor | MT-Unsafe race:crypt |
| crypt_r , crypt_rn , crypt_ra | Siguranța firelor | MT-Safe |
ISTORIC¶
O funcție crypt bazată pe un
rotor a apărut în Version 6 AT&T
UNIX. Funcția crypt
“tradițională” bazată pe DES a
apărut pentru prima dată în
Version 7 AT&T UNIX.
crypt_r provine din biblioteca GNU C.
Există, de asemenea, o funcție crypt_r
în HP-UX și MKS Toolkit, dar prototipurile și semantica
diferă.
crypt_rn și
crypt_ra provin din proiectul Openwall.
CONSULTAȚI ȘI¶
crypt_gensalt(3), getpass(3), getpwent(3), shadow(3), login(1), passwd(1), crypt(5), passwd(5), shadow(5), pam(8)
TRADUCERE¶
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net
| 11 octombrie 2017 | Openwall Project |