CRYPT(3)

NAZWA
crypt - szyfrowanie danych i haseł

SKŁADNIA
#define _XOPEN_SOURCE
#include <unistd.h>

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

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(3) jest złym rozwiązaniem dla zastosowań innych niż autoryzacja za pomocą hasła. Jeśli planujesz wykorzystać crypt(3) dla celów kryptograficznych, nie rób tego. Zdobądź dobrą książkę o szyfrowaniu i jedną z ogólnodostępnych bibliotek DES.

WARTOŚĆ ZWRACANA
Zwracany jest wskaźnik do zaszyfrowanego hasła. W przypadku wywstąpienia błędu, zwracana jest wartość NULL.

BŁĘDY

ENOSYS
    Funkcja crypt nie została zaimplementowana, prawdopodobnie ze względu na ograniczenia eksportowe Stanów Zjednoczonych.

ROZSZERZENIE GNU
Wersja tej funkcji zawarta w glibc2 posiada następujące dodatkowe własności. Jeśli salt jest łańcuchem znaków rozpoczynającym się od znaków "$1$", po których następuje co najwyżej osiem znaków i, opcjonalnie, zakończonym "$", to zamiast używać maszyny DES, funkcja crypt zawarta w glibc używa algorytmu opartego na MD5, wyprowadzając do 34 bajtów w postaci "$1$<łańcuch>$", gdzie "<łańcuch>" składa się z wspomnianych wcześniej nie więcej niż 8 znaków występujących po "$1$" w salt, po których następują 22 znaki należące do zbioru [a–zA–Z0–9./]. Cały klucz jest tu znaczący (zamiast tylko pierwszych 8 bajtów).

Programy korzystające z tej funkcji muszą być konsolidowane z -lcrypt.

ZGODNE Z
SVID, X/OPEN, BSD 4.3, POSIX 1003.1-2001

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