Provided by: manpages-pl-dev_4.26.0-1_all 

NAZWA
crypt, crypt_r, crypt_rn, crypt_ra — miesza (haszuje) hasła
BIBLIOTEKA
Crypt Library (libcrypt, -lcrypt)
SKŁADNIA
<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)
OPIS
Funkcje crypt, crypt_r, crypt_rn i crypt_ra nieodwracalnie „mieszają” (haszują) hasła w celu ich
przechowywania w systemowej bazie danych haseł (shadow(5)), za pomocą kryptograficznej „metody
mieszającej”. Wynik operacji zwany jest „skrótem hasła” lub po prostu „skrótem” („haszem”). Metody
mieszania opisano w crypt(5).
setting kontrolują metodę mieszania, która ma zostać zastosowana i przekazują jej różne parametry, w
szczególności losową „sól”, która zapewnia, że żadne dwa przechowywane skróty nie są takie same, nawet
przy takich samych phrase.
Argument data do crypt_r jest strukturą typu struct crypt_data. Ma co najmniej następujące pola:
struct crypt_data {
char output[CRYPT_OUTPUT_SIZE];
char setting[CRYPT_OUTPUT_SIZE];
char input[CRYPT_MAX_PASSPHRASE_SIZE];
char initialized;
};
Po pomyślnym powrocie z crypt_r, skróty haseł trafią do output. Aplikacje są zachęcane (lecz nie jest to
wymagane) do używania pól input i setting, w celu ich przekazania jako input phrase i setting do crypt_r.
W ten sposób łatwiejsze będzie usunięcie wszystkich wrażliwych danych, które nie są już potrzebne.
Pole initialized musi wynosić zero przed pierwszym użyciu obiektu struct crypt_data w wywołaniu do
crypt_r(). Przed pierwszym użyciem, zaleca się wyzerowanie całego obiektu, a nie tylko initialized i nie
jedynie pól udokumentowanych (oczywiście należy to zrobić przed przechowaniem czegokolwiek w setting i
input).
Argument data do crypt_rn powinien również wskazywać na obiekt struct crypt_data, przy czym size powinno
być rozmiarem tego obiektu, rzutowanym na int. Przy użyciu z crypt_rn, cały obiekt data (poza polami
input i setting) musi być wyzerowany przed pierwszym użyciem; nie jest to jedynie zalecenie, jak ma to
miejsce w przypadku crypt_r. Poza tym, pola tego obiektu mają te same zastosowania, co dla crypt_r.
Przy pierwszym wywołaniu do crypt_ra, data powinno być adresem zmiennej void * ustawionej na NULL, a size
powinno być adresem zmiennej int ustawionej na zero. crypt_ra zaalokuje i zainicjuje obiekt struct
crypt_data, za pomocą malloc(3) i zapisze jego adres i rozmiar do zmiennych, na które wskazują data i
size. Można ich później użyć ponownie w kolejnych wywołaniach. Po tym, jak aplikacja ukończy mieszanie
haseł, powinna zdealokować obiekt struct crypt_data za pomocą free(3).
WARTOŚCI ZWRACANE
Po pomyślnym zakończeniu, crypt, crypt_r, crypt_rn i crypt_ra zwracają wskaźnik do łańcucha kodującego
zarówno skrót hasła jak i ustawienia, których użyto, do jego zakodowania. Łańcuch ten może posłużyć jako
bezpośrednie setting w innych wywołaniach do crypt, crypt_r, crypt_rn i crypt_ra, oraz jako prefix w
wywołaniach do crypt_gensalt, crypt_gensalt_rn i crypt_gensalt_ra. Będzie to łańcuch złożony wyłącznie z
drukowalnych znaków ASCII i nie będzie zawierał białych znaków, ani znaków „:”, „;”, „*”, „!” i „\”.
Więcej informacji o formacie skrótów haseł znajduje się w podręczniku crypt(5).
crypt umieszcza swój wynik w statycznej przestrzeni przechowywania, która będzie nadpisana w kolejnych
wywołaniach crypt. Nie jest bezpieczne równoczesne wywoływanie crypt z wielu wątków.
crypt_r, crypt_rn i crypt_ra umieszczają swoje wyniki w polu output ich argumentu data. Można
bezpiecznie wywoływać je równocześnie z wielu wątków, o ile tylko używane są różne obiekty data w każdym
wątku.
Upon error, crypt_r, crypt_rn, and crypt_ra write an invalid hash to the output field of their data
argument, and crypt writes an invalid hash to its static storage area. This string will be shorter than
13 characters, will begin with a ‘*’, and will not compare equal to setting.
Po wystąpieniu błędu, crypt_rn i crypt_ra zwrócą pusty wskaźnik. crypt_r i crypt również mogą zwrócić
pusty wskaźnik, mogą też zwrócić wskaźnik do nieprawidłowego skrótu, w zależności od konfiguracji
libcrypt (opcja zwrócenia nieprawidłowego skrótu istnieje ze względu na kompatybilność ze starszymi
aplikacjami, które zakładają, że crypt nie może zwrócić pustego wskaźnika; zob. “UWAGI DOTYCZĄCE
PRZENOŚNOŚCI” niżej).
All four functions set errno when they fail. When the functions succeed, the value of errno is
unspecified and must not be relied upon.
BŁĘDY
EINVAL setting jest nieprawidłowe lub żądano nieobsługiwanej metody mieszania.
ERANGE phrase jest zbyt długie (dłuższe niż CRYPT_MAX_PASSPHRASE_SIZE znaków; niektóre metody
mieszania mogą mieć mniejsze limity).
Tylko crypt_rn: size jest zbyt małe dla metody mieszania zażądanej w setting.
ENOMEM Nie udało się zaalokować wewnętrznej pamięci „scratch”.
Tylko crypt_ra: nie udało się zaalokować pamięci dla data.
ENOSYS lub EOPNOTSUPP
Mieszanie haseł nie jest obsługiwane w tej instalacji lub metoda mieszania zażądana w
setting nie jest obsługiwana. Te statusy błędów nie są używane w tej wersji libcrypt,
ale mogą wystąpić na innych systemach.
UWAGI DOTYCZĄCE PRZENOŚNOŚCI
crypt jest wymienione w POSIX, lecz crypt_r, crypt_rn i crypt_ra nie są częścią żadnego standardu.
POSIX nie określa żadnych metod mieszania, ani nie wymaga, aby skróty haseł były przenośne między
systemami. W praktyce, skróty haseł są przenośne, o ile oba systemy obsługują daną metodę mieszania.
Jednak zestaw obsługiwanych metod mieszania znacznie różni się między systemami.
The behavior of crypt on errors isn't well standardized. Some implementations simply can't fail (except
by crashing the program), others return a null pointer or a fixed string. Most implementations don't set
errno, but some do. POSIX specifies returning a null pointer and setting errno, but it defines only one
possible error, ENOSYS, in the case where crypt is not supported at all. Some older applications are not
prepared to handle null pointers returned by crypt. The behavior described above for this
implementation, setting errno and returning an invalid hash different from setting, is chosen to make
these applications fail closed when an error occurs.
Z powodów historycznych ograniczeń, dotyczących eksportu oprogramowania kryptograficznego ze Stanów
Zjednoczonych, crypt jest opcjonalną częścią POSIX. Aplikacje powinny być dlatego przygotowane do
sytuacji, gdy crypt nie jest dostępne, bądź zawsze zawodzić (ustawiając errno na ENOSYS) przy rozruchu.
POSIX określa, że crypt jest zadeklarowane w <unistd.h>, lecz tylko gdy makro _XOPEN_CRYPT jest
zdefiniowane i ma wartość większą lub równą zero. Ze względu na to, że libcrypt nie zapewnia <unistd.h>,
deklaruje w zamian crypt, crypt_r, crypt_rn i crypt_ra w <crypt.h> .
Na mniejszości systemów (głównie ostatnich wersjach Solarisa), crypt używa statycznego bufora
przechowywania przypisanego wątkowi, który czyni bezpiecznym równoczesne wywoływanie z wielu wątków, lecz
nie zapobiega każdemu wywołaniu z wątku, przed nadpisaniem wyników poprzedniego wywołania.
USTERKI
Niektóre implementacje crypt, przy błędzie zwracają nieprawidłowy skrót, który jest przechowywany w
położeniu tylko do odczytu, lub zainicjowanym jedynie jednokrotnie, co oznacza, że wyczyszczenie bufora,
na który wskazuje wartość zwracana przez crypt jest bezpieczne tylko wtedy, gdy nie wystąpił błąd.
struct crypt_data może być dość duże (32kB w tej implementacji libcrypt; ponad 128kB w niektórych innych
implementacjach). Jest to na tyle duża wielkość, że może być nierozsądne alokowanie jej na stosie.
Niektóre ostatnio zaprojektowane metody mieszania potrzebują jeszcze więcej pamięci „scratch”, lecz
interfejs crypt_r nie umożliwia zmiany rozmiaru struct crypt_data bez złamania kompatybilności binarnej.
Interfejs crypt_rn mógłby dokonywać większych alokacji dla określonych metod mieszania, lecz wywołujący
crypt_rn nie ma sposobu określenia, jak dużo pamięci zaalokować. crypt_ra sam alokuje pamięć, lecz może
wykonać jedynie pojedyncze wywołanie do malloc(3).
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
┌─────────────────────────────┬────────────────────────┬─────────────────────────────┐
│ Interfejs │ Atrybut │ Wartość │
├─────────────────────────────┼────────────────────────┼─────────────────────────────┤
│ crypt │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:crypt │
├─────────────────────────────┼────────────────────────┼─────────────────────────────┤
│ crypt_r, crypt_rn, crypt_ra │ Bezpieczeństwo wątkowe │ MT-bezpieczne │
└─────────────────────────────┴────────────────────────┴─────────────────────────────┘
HISTORIA
Funkcja crypt oparta na wirnikach pojawiła się w Version 6 AT&T UNIX. „Tradycyjne” crypt, oparte na DES,
pojawiło się w Version 7 AT&T UNIX.
crypt_r pochodzi z biblioteki GNU C. Występuje również funkcja crypt_r na HP-UX i MKS Toolkit, lecz
prototypy i zachowanie różnią się.
crypt_rn i crypt_ra pochodzą z projektu Openwall.
ZOBACZ TAKŻE
crypt_gensalt(3), getpass(3), getpwent(3), shadow(3), login(1), passwd(1), crypt(5), passwd(5),
shadow(5), pam(8)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Adam Byrtek <alpha@irc.pl>, Andrzej
Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Michał Kułach <michal.kulach@gmail.com> i Robert Luberda
<robert@debian.org>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3: https://www.gnu.org/licenses/gpl-3.0.html lub
nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej
manpages-pl-list@lists.sourceforge.net .
Projekt Openwall 11 października 2017 r. CRYPT(3)