crypt

CRYPT(3)                PodrÄcznik programisty Linuksa                CRYPT(3)



NAZWA
       crypt, crypt_r - szyfrowanie danych i haseÅ

SKÅADNIA
       #define _XOPEN_SOURCE       /* Patrz feature_test_macros(7) */
       #include <unistd.h>

       char *crypt(const char *key, const char *salt);

       #define _GNU_SOURCE         /* Patrz feature_test_macros(7) */
       #include <crypt.h>

       char *crypt_r(const char *key, const char *salt,
                     struct crypt_data *data);

       ProszÄ linkowaÄ z -lcrypt.

OPIS
       crypt to funkcja szyfrujÄca hasÅa. Opiera siÄ ona na algorytmie Data
       Encryption Standard, z pewnymi modyfikacjami majÄcymi (miÄdzy innymi)
       zapobiec próbom sprzÄtowego zÅamania klucza.

       Argument key to hasÅo wpisane przez użytkownika.

       Argument salt to ÅaÅcuch dwóch znaków z zestawu [a-zA-Z0-9./]. Ten
       ÅaÅcuch umożliwia kodowanie jednego hasÅa na 4096 różnych sposobów.

       Poprzez pobranie 7 najmniej znaczÄcych bitów pierwszych oÅmiu znaków
       ÅaÅcucha key tworzony jest 56-bitowy klucz. Ten klucz jest używany do
       zakodowania z góry ustalonego ÅaÅucha znaków (zwykle jest to ÅaÅcuch
       skÅadajÄcy siÄ z samych zer). Zwracana wartoÅÄ wskazuje na zaszyfrowane
       hasÅo, seriÄ 13 znaków ASCII (pierwsze dwa znaki reprezentujÄ argument
       salt). Zwracana wartoÅÄ wskazuje na statycznÄ danÄ, która jest
       nadpisywana przy każdym wywoÅaniu funkcji.

       Uwaga: Istnieje 2**56 czyli 7.2e16, możliwych wartoÅci. Możliwe jest
       przeszukiwanie przestrzeni kluczy z użyciem komputerów z
       przetwarzaniem równolegÅym. DostÄpne sÄ programy, takie jak crack(1),
       przeszukujÄce obszar kluczy, które sÄ czÄsto wykorzystywane przez
       ludzi jako hasÅa. Tak wiÄc hasÅo nie powinno zawieraÄ powszechnych
       wyrazów i nazw. Zalecane jest używanie programu passwd(1), który
       podczas zmiany lub wyboru hasÅa sprawdza, czy nie jest Åatwe do
       zÅamania.

       Sam algorytm DES ma kilka wad, dlatego crypt() jest zÅym rozwiÄzaniem
       dla zastosowaÅ innych niż autoryzacja za pomocÄ hasÅa. JeÅli planujesz
       wykorzystaÄ crypt() dla celów kryptograficznych, nie rób tego.
       ZdobÄdź dobrÄ ksiÄżkÄ o szyfrowaniu i jednÄ z ogólnodostÄpnych
       bibliotek DES.

       crypt_r() jest wielodostÄpowÄ wersjÄ crypt(). Struktura wskazywana
       przez data jest używana do przechowywania wyniku i różnych
       wewnÄtrznych informacji. Oprócz przydzielenia pamiÄci dla tej
       struktury, funkcja wywoÅujÄca funkcjÄ crypt_r() powinna przed jej
       pierwszym wywoÅanie ustawiÄ data->initialized na zero.

WARTOÅÄ ZWRACANA
       W razie powodzenia zwracany jest wskaźnik do zaszyfrowanego hasÅa. W
       przypadku wystÄpienia bÅÄdu, zwracana jest wartoÅÄ NULL.

BÅÄDY
       EINVAL salt ma nieprawidÅowy format.

       ENOSYS Funkcja crypt() nie zostaÅa zaimplementowana, prawdopodobnie ze
              wzglÄdu na ograniczenia eksportowe Stanów Zjednoczonych.

       EPERM  /proc/sys/crypto/fips_enabled ma niezerowÄ wartoÅÄ i próbowano
              użyÄ sÅabego typu szyfrowania, takiego jak DES.

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-Unsafe race:crypt │
       ├──────────┼────────────────────────┼──────────────────────┤
       │crypt_r() │ BezpieczeÅstwo wÄtkowe │ MT-Safe              │
       └──────────┴────────────────────────┴──────────────────────┘
ZGODNE Z
       crypt(): POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.  crypt_r() jest
       rozszerzeniem GNU.

UWAGI
   Uwagi dotyczÄce biblioteki glibc
       Wersja glibc2 tej funkcji obsÅuguje dodatkowe algorytmy szyfrowania.

       JeÅli salt jest ÅaÅcuchem znaków zaczynajÄcym siÄ od "$id$", po
       którym nastÄpuje kolejny ÅaÅcuch znaków koÅczÄcy siÄ na "$", to:

              $id$salt$encrypted

       to zamiast używaÄ DES, id okreÅla używanÄ metodÄ kodowania, co
       wskazuje na sposób interpretacji pozostaÅej czÄÅci zakodowanego hasÅa.
       ObsÅugiwane sÄ nastÄpujÄce wartoÅci id:

              ID  | Metoda
              ─────────────────────────────────────────────────
              1   | MD5
              2a  | Blowfish (nie w gÅównym glibc; dodane
                  | w kilku dystrybucjach Linuksa)
              5   | SHA-256 (od glibc 2.7)
              6   | SHA-512 (od glibc 2.7)

       Tak wiÄc $5$salt$encrypted jest hasÅem zakodowanym w SHA-256, a
       $6$salt$encrypted jest zakodowane w SHA-512

       "salt" oznacza do 16 znaków nastÄpujÄcych po "$id$ w haÅle. Zakodowana
       czÄÅÄ ÅaÅcucha znaków hasÅa jest wÅaÅciwym wyliczonym hasÅem. Rozmiar
       tego ÅaÅcucha znaków jest staÅy:

       MD5     | 22 znaki
       SHA-256 | 43 znaki
       SHA-512 | 86 znaków

       Znaki w "salt" i "encrypted" sÄ losowane ze zbioru [a-zA-Z0-9./]. W
       implementacjach MD5 i SHA caÅy key ma znaczenie (zamiast tylko
       pierwszych oÅmiu znaków, jak to jest w przypadku DES).

ZOBACZ TAKŻE
       login(1), passwd(1), encrypt(3), getpass(3), passwd(5)

O STRONIE
       Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux
       man-pages. Opis projektu, informacje dotyczÄce zgÅaszania bÅÄdów oraz
       najnowszÄ wersjÄ oryginaÅu można znaleÅºÄ pod adresem
       https://www.kernel.org/doc/man-pages/.

TÅUMACZENIE
       Autorami polskiego tÅumaczenia niniejszej strony podrÄcznika man sÄ:
       Adam Byrtek (PTM) <abyrtek@priv.onet.pl>, Andrzej Krzysztofowicz (PTM)
       <ankry@mif.pg.gda.pl>, Robert Luberda <robert@debian.org> i MichaÅ
       KuÅach <michal.kulach@gmail.com>.

       Polskie tÅumaczenie jest czÄÅciÄ projektu manpages-pl; uwagi, pomoc,
       zgÅaszanie bÅÄdów na stronie http://sourceforge.net/projects/manpages-
       pl/. Jest zgodne z wersjÄ  4.07 oryginaÅu.



                                  2015-08-08                          CRYPT(3)