Odpowiedzi:
Aby zapoznać się z wczesną historią przechowywania haseł w systemie Unix, przeczytaj Robert Morris i Ken Thompson's Security Security: A Case History . Wyjaśniają, dlaczego i jak wczesne systemy uniksowe uzyskały większość funkcji, które są nadal postrzegane jako ważne funkcje przechowywania haseł (ale zrobione lepiej).
crypt
funkcję haszującą hasło. Jest to określane raczej jako „szyfrowanie” niż „mieszanie”, ponieważ nowoczesna terminologia kryptograficzna nie została jeszcze ustalona i wykorzystywała algorytm szyfrowania, choć w niekonwencjonalny sposób. Zamiast szyfrować hasło za pomocą klucza, co byłoby banalne, aby cofnąć, gdy masz klucz (który musiałby być przechowywany w systemie), używają hasła jako klucza.Pierwotnie skrót hasła znajdował się w pliku do odczytu publicznego /etc/passwd
. Umieszczenie skrótu w osobnym pliku /etc/shadow
, do którego dostęp miał tylko system (i administrator systemu), było jedną z wielu innowacji firmy Sun, pochodzących z około SunOS 4 w połowie lat osiemdziesiątych. Stopniowo rozprzestrzeniał się na inne warianty uniksowe (częściowo za pośrednictwem pakietu cieni innej firmy, którego potomek jest nadal używany w Linuksie) i nie był dostępny wszędzie aż do połowy lat 90.
Z biegiem lat wprowadzono ulepszenia do algorytmu mieszania. Największym skokiem był algorytm oparty na MD5 firmy Poul-Henning Kamp w 1994 roku, który zastąpił algorytm oparty na DES algorytmem o lepszej konstrukcji. Usunęło ograniczenie do 8 znaków hasła i 2 znaków soli i zwiększyło spowolnienie. Zobacz IEEE's Developing with open source software , styczeń – luty. 2004, s. 1 7–8 . Algorytmy oparte na SHA-2, które obecnie są de facto standardem, opierają się na tej samej zasadzie, ale mają nieco lepszą wewnętrzną konstrukcję i, co najważniejsze, konfigurowalny współczynnik spowolnienia.
Nie mam jeszcze podstawowego źródła, ale zgodnie z tym postem TrustedSec (moje wyróżnienie):
Wczesne systemy przechowywały hasła w postaci zwykłego tekstu, ale ostatecznie zastąpiono je bezpieczniejszymi formami przechowywania haseł. Robert Morris opracował kryptę opartą na maszynie szyfrującej m-209 i pojawił się w wersji 3 Unix , chociaż Crypt nie był używany do przechowywania haseł do 6. edycji Unix (1974).
Według wielu źródeł wersja 3 UNIX została wydana w lutym 1973 roku .
Na podstawie oryginalnej pracy Thompsona i Morrisa możemy potwierdzić, że pierwotnie użyto miejsca do przechowywania tekstu jawnego:
System UNIX został po raz pierwszy zaimplementowany z plikiem haseł, który zawierał rzeczywiste hasła wszystkich użytkowników iz tego powodu plik haseł musiał być silnie zabezpieczony przed odczytaniem lub zapisaniem.
/ etc / shadow pojawił się w wielu gałęziach UNIX-a, jak zauważono w innych odpowiedziach.
Zgodnie z sekcją Historia na stronie passwd Wikipedii:
Cieniowanie haseł pojawiło się po raz pierwszy w systemach Unix wraz z rozwojem SunOS w połowie lat 80. XX wieku, [10] System V Release 3.2 w 1988 roku i BSD4.3 Reno w 1990 roku. Ale dostawcy, którzy wykonali porty z wcześniejszych wydań UNIX, nie zawsze uwzględnili nowe funkcje cieniowania haseł w swoich wydaniach, narażając użytkowników tych systemów na ataki plików haseł.
Administratorzy systemu mogą również organizować przechowywanie haseł w rozproszonych bazach danych, takich jak NIS i LDAP, a nie w plikach w każdym podłączonym systemie. W przypadku NIS mechanizm hasła cienia jest nadal często używany na serwerach NIS; w innych mechanizmach rozproszonych problem dostępu do różnych komponentów uwierzytelniania użytkownika jest obsługiwany przez mechanizmy bezpieczeństwa bazowego repozytorium danych.
W 1987 r. Autor oryginalnego Shadow Password Suite, Julie Haugh, doznał włamania do komputera i napisał pierwszą wersję Shadow Suite zawierającą polecenia logowania, passwd i su. Oryginalna wersja, napisana dla systemu operacyjnego SCO Xenix, szybko została przeniesiona na inne platformy. Pakiet Shadow Suite został przeniesiony do Linuksa w 1992 roku, rok po pierwotnym ogłoszeniu projektu Linux, i był zawarty w wielu wczesnych dystrybucjach, i nadal jest zawarty w wielu obecnych dystrybucjach Linuksa.