Extended Slackware

Hasła jednorazowe

Data dodania: Sat, 25 Jun 2005 23:32:27 +0200

Autor: dozzie

Co to są hasła jednorazowe?

Sama nazwa wskazuje, jakie właściwości mają hasła OTP (one-time passwords). Co ci to daje? Możesz się logować z hostów, którym nie ufasz (np. z kafejki). Jeśli ktoś podłożył keyloggera, zdobędzie tylko hasła, których nie będzie mógł później wykorzystać. OTP oczywiście nie broni przed aktywnym atakiem, na przykład przejęciem systemu, z którego się logujesz, ale taki atak jest trudniejszy od zwykłego podsłuchu.

Jak działają hasła jednorazowe?

Wybierasz sobie na początku tajne hasło, z którego będą wygenerowane hasła jednorazowe. System oblicza hasz tego hasła, potem hasz hasza itd. i kończy na takiej głębokości, ile chcesz mieć haseł. Zapisywany jest tylko ostatni obliczony hasz. Przy uwierzytelnianiu przedstawiasz hasz o głębokości o jeden mniejszej od tego, co jest zapamiętane. Jeśli hasz podanego przez ciebie ciągu zgadza się z zapamiętanym, to proces uwierzytelniania zakończył się poprawnie, a podany ciąg (hasz) jest zapamiętywany w miejsce starego hasza. W momencie, gdy podasz pierwszy hasz, musisz wygenerować nowy zestaw haseł.

Instalacja i konfiguracja OPIE

OPIE (One-Time Passwords in Everything) to biblioteka implementująca schemat haseł jednorazowych (jedna z trzech mi znanych; pozostałe dwie to S/Key i OTPW). Prawdopodobnie chcesz używać haseł jednorazowych głównie do logowania ze zdalnych hostów, czyli pewnie przez SSH. Niestety cię zmartwię: OpenSSH potrafi używać samodzielnie jedynie S/Key. Będziemy musieli to obejść dokładając do Slackware bibliotekę PAM. Gotowe pakiety (z PAM i stosownie skompilowanym OpenSSH, podobnie zresztą jak shadow i sudo) znajdziesz w liście moich pakietów. Potrzebujesz jeszcze pakietu z OPIE (w tym z modułem pam_opie), który również znajdziesz w liście. Włączenie OPIE sprowadza się do zmiany pliku common-auth w katalogu /etc/pam.d/ (przynajmniej w przypadku Slackware z pakietami Extended Slackware; w innych dystrybucjach plikiem wymagającym zmiany może być sshd albo ssh). Przykładowy plik common-auth:

#
# /etc/pam.d/common-auth - authentication settings common to all services
#
auth   required         pam_unix.so

Zastanówmy się, co powinniśmy tu zmienić. Przede wszystkim chcemy móc logować się zarówno hasłem wielokrotnym, jak i jednorazowym. Możemy wymagać hasła wielokrotnego, a jeśli ktoś poda poprawne hasło jednorazowe, to też nam wystarczy. Możemy również uznać, że nie wpuszczamy nikogo, ale jeśli ktoś poda hasło jednorazowe albo wielokrotne, to wystarczy, żeby go wpuścić. Ja wolę to drugie podejście, bo pozwala dodać kolejne mechanizmy uwierzytelniania użytkowników w nieco spójniejszy sposób.

#
# /etc/pam.d/common-auth - authentication settings common to all services
#
auth    sufficient      pam_unix.so
auth    sufficient      pam_opie.so
auth    required        pam_deny.so

Użytkownicy Extended Slackware wystarczy, że odkomentują stosowną linijkę w common-auth.

Używanie

Zasadniczo istotne są dwa programy: opiepasswd do zmiany haseł i opiekey do wyliczenia tych haseł. Najpierw uruchomimy zmianę haseł (zaraz będzie potrzebny drugi terminal).

[dozzie@hans dozzie]$ opiepasswd -n 100
Adding dozzie:
You need the response from an OTP generator.
New secret pass phrase:
        otp-md5 100 ha8310
        Response: 

Chcę tu wygenerować około 100 haseł (przy średnio częstym używaniu ta liczba powinna wystarczyć na jakieś trzy miesiące). opiepasswd oczekuje teraz od nas ostatniego hasza. Obliczmy na drugim terminalu, ile będzie wynosił:

[dozzie@hans dozzie]$ opiekey -n 2 100 ha8310
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: 
99: TIDE ACTS LOCK MUTT YEAH WING
100: SOP HERE FOND ALOE GIVE GILD
[dozzie@hans dozzie]$ 

Jako secret pass phrase wpisałem tajnehaslo.
Kazaliśmy obliczyć dwa hasła, przy czym ostatnie ma indeks 100. Ciąg ha8310 to ten sam ciąg, który został wypisany przez opiepasswd. Teraz musimy podać ciąg wyrazów z indeksem 100, a przy logowaniu jako hasło podamy ciąg 99. Przy kolejnym logowaniu będzie to 98, 97 itd. Aby wygenerować pełną listę haseł wystarczy, że uruchomisz opiekey -n 100 100 ha8310
Gdy zacznie ci brakować haseł, musisz wygenerować je ponownie. opiepasswd zapyta się ciebie o kolejne hasło jednorazowe ze starej listy, w związku z tym musisz sobie zostawić co najmniej jedno nienaruszone (w praktyce z dziesięć, tak na wszelki wypadek).

[dozzie@hans dozzie]$ opiepasswd -n 100
Updating dozzie:
You need the response from an OTP generator.
Old secret pass phrase:
        otp-md5 99 ha8310 ext
        Response: TIDE ACTS LOCK MUTT YEAH WING
New secret pass phrase:
        otp-md5 100 ha83
        Response: 

Reszta procedury jest taka sama, jak przy pierwszej zmianie hasła.
Jeśli stracisz listę haseł jednorazowych, możesz je szybko zablokować używając opiepasswd -d (zmiana hasła, z którego masz wygenerowaną listę, może nie wchodzić w grę, bo na przykład pracujesz na niezaufanej maszynie), ale odblokować może je tylko administrator, na przykład usuwając twój wpis z /etc/opiekeys.

Engine by Dozzie. Awful design by Dozzie.