Kilka razy próbowałem zmienić hasło użytkownika na różnych komputerach z systemem Linux, a gdy nowe hasło było podobne do starego, system operacyjny narzekał, że są one zbyt podobne.
Zawsze zastanawiałem się, skąd system to wie? Myślałem, że hasło jest zapisane jako skrót. Czy to oznacza, że kiedy system jest w stanie porównać nowe hasło podobieństwa, stare jest faktycznie zapisywane jako zwykły tekst?
Odpowiedzi:
Ponieważ podczas używania musisz podać zarówno stare, jak i nowe hasło
passwd
, można je łatwo porównać w postaci zwykłego tekstu, w pamięci, bez zapisywania ich gdzieś na dysku.Rzeczywiście, twoje hasło jest zakodowane, kiedy w końcu jest przechowywane, ale dopóki tak się nie stanie, narzędzie, w którym wpisujesz hasło, może oczywiście po prostu uzyskać do niego bezpośredni dostęp, tak jak każdy inny program może uzyskać dostęp do rzeczy, które wprowadziłeś na klawiaturze podczas odczytu ze STDIN.
Jest to cecha systemu PAM, który jest wykorzystywany w tle
passwd
narzędzia. PAM jest używany przez współczesne dystrybucje Linuksa.Mówiąc dokładniej,
pam_cracklib
jest to moduł dla PAM, który pozwala na odrzucanie haseł na podstawie kilku słabości, które czyniłyby je bardzo podatnymi na atak.Nie tylko hasła, które są zbyt podobne, można uznać za niepewne. Kod źródłowy ma różne przykłady tego, co można sprawdzić, na przykład, czy hasło jest palindrom lub jaka jest odległość między dwoma edycja słów. Chodzi o to, aby hasła były bardziej odporne na ataki słownikowe.
Zobacz także stronę
pam_cracklib
podręcznika.źródło
Przynajmniej w moim Ubuntu wychodzą „zbyt podobne” wiadomości
kiedy: „... więcej niż połowa znaków to różne…” (szczegóły poniżej).dzięki wsparciu PAM, jak jasno wyjaśniono w odpowiedzi @slhck.Na innej platformie, na której nie jest używany PAM, pojawiają się komunikaty „zbyt podobne”, gdy: „... więcej niż połowa znaków to różne ...” (szczegóły poniżej)
Aby dalej samodzielnie sprawdzić to oświadczenie, można sprawdzić kod źródłowy. Oto jak.
Program „passwd” znajduje się w pakiecie passwd:
Ponieważ mamy do czynienia z technologiami Open Source, mamy nieograniczony dostęp do kodu źródłowego. Uzyskanie jest tak proste, jak:
Następnie łatwo jest znaleźć odpowiedni fragment kodu:
Szybka kontrola do „obscure.c” daje to (wycinam i wklejam tylko odpowiedni fragment kodu):
Teraz wiemy, że istnieje „podobna” funkcja, która w oparciu o starą i nową sprawdza, czy oba są podobne. Oto fragment:
Nie sprawdziłem kodu C. Ograniczałem się do zaufania komentarzowi tuż przed definicją funkcji :-)
Różnice między platformami PAM i NON-PAM są zdefiniowane w pliku „obscure.c”, który ma następującą strukturę:
źródło
passwd
prosi o starych i nowych haseł jest odpowiedzią . Reszta tej odpowiedzi jest nieistotna.Odpowiedź jest o wiele prostsza niż myślisz. W rzeczywistości prawie kwalifikuje się jako magia, ponieważ kiedy wyjaśnisz sztuczkę, zniknie:
Wie, że twoje nowe hasło jest podobne ... Ponieważ stary wpisałeś już przed chwilą.
źródło
Chociaż pozostałe odpowiedzi są prawidłowe, warto wspomnieć, że nie trzeba podawać starego hasła, aby to zadziałało!
W rzeczywistości można wygenerować kilka haseł podobnych do nowego hasła, które podałeś, haszować je, a następnie sprawdzić, czy któryś z tych skrótów pasuje do starego. W takim przypadku nowe hasło zostanie uznane za podobne do starego! :)
źródło
n
)62 * (n!)/(6 * (n - 3)!)
, co równa się 13540 dla hasła o długości 12 znaków. Ale jeśli ktoś myśli o czymś innym, równanie jest bezużyteczne, więc po co się tym przejmować?Nie uwzględniono jednego aspektu: historii haseł. Niektóre systemy to obsługują. W tym celu przechowuje historię haseł i szyfruje je przy użyciu bieżącego hasła. Po zmianie hasła używane jest „stare” hasło do odszyfrowania listy i weryfikacji. A kiedy ustawia nowe hasło, zapisuje listę (ponownie) zaszyfrowaną kluczem pochodzącym z nowego hasła.
Tak
remember=N
działa PAM (przechowywane w/etc/security/opasswd
). Ale także Windows i inni dostawcy Uniksa oferują podobne funkcje.źródło