Verify

Co oznacza OTP? Hasła jednorazowe w pigułce

OTP to skrót od one-time password (czasem one-time passcode), czyli hasło jednorazowe. To krótki kod, zwykle od czterech do ośmiu cyfr, ważny przy jednym logowaniu lub jednej transakcji, po czym wygasa. Ponieważ każdy kod działa tylko raz i tylko w krótkim oknie czasowym, kod, który wycieknie po użyciu, jest dla atakującego bezwartościowy. Ta jednorazowość to jedyny powód, dla którego OTP w ogóle istnieją.

Z dużym prawdopodobieństwem już taki kod wpisywałeś: sześć cyfr, które bank wysyła SMS-em przed przelewem, kod z aplikacji uwierzytelniającej przy logowaniu, numer, który strona wysyła e-mailem, żeby potwierdzić, że to naprawdę Ty. Wszystko to są OTP, które różnią się głównie sposobem generowania kodu i kanałem dostarczenia.

Jak działa OTP?

Usługa i użytkownik potrzebują sposobu na uzgodnienie, jaki kod jest właśnie ważny, bez przesyłania samego hasła w sposób możliwy do odgadnięcia. Istnieją dwie standardowe metody, a różnica polega na tym, co powoduje zmianę kodu.

  • HOTP (hasło jednorazowe oparte na HMAC). Kod jest wyprowadzany ze wspólnego sekretu i licznika. Token użytkownika zwiększa licznik przy każdym generowaniu kodu. Weryfikator usługi zwiększa swój odpowiadający stan po zaakceptowaniu oczekiwanego kodu. Kod HOTP nie wygasa tylko dlatego, że upłynął czas.
  • TOTP (hasło jednorazowe oparte na czasie). Kod jest wyprowadzany ze wspólnego sekretu i bieżącego czasu zaokrąglonego do okna (zwykle 30 sekund). Kod zmienia się sam, gdy czas mija, niezależnie od tego, czy ktoś go użył. Właśnie to generują aplikacje uwierzytelniające.

TOTP jest powszechniejsze, ponieważ automatyczne wygasanie ogranicza czas, przez który skradziony kod jest przydatny. HOTP nadal pojawia się w tokenach sprzętowych i w przepływach, gdzie trudno zagwarantować zsynchronizowany zegar.

Jak dostarczany jest OTP?

Metoda generowania i kanał dostarczenia to niezależne wybory. Kod może być obliczony na urządzeniu użytkownika albo wygenerowany na serwerze i do niego wysłany.

  • SMS. Serwer generuje kod i wysyła go SMS-em na numer telefonu użytkownika. Uniwersalny zasięg, nie wymaga aplikacji. To jednocześnie kanał najbardziej podatny na przechwycenie, np. przez SIM-swap lub ataki sieciowe.
  • E-mail. Kod trafia do skrzynki odbiorczej użytkownika. Wygodne i bez aplikacji, ale bezpieczeństwo jest takie, jak bezpieczeństwo samego konta e-mail.
  • Połączenie głosowe. Automatyczne połączenie odczytuje kod na głos, co pomaga użytkownikom, którzy nie mogą odebrać SMS lub potrzebują opcji dostępności.
  • Aplikacja uwierzytelniająca. Kod jest obliczany lokalnie za pomocą TOTP. Nic nie jest przesyłane przez sieć, więc nie ma czego przechwycić w transmisji.

Każdy kanał to kompromis między zasięgiem a odpornością na ataki. SMS i e-mail docierają do niemal każdego; kody z aplikacji są trudniejsze do kradzieży, ale wymagają wcześniejszego skonfigurowania aplikacji.

Gdzie stosuje się OTP?

Najczęstsze zastosowanie to drugi składnik w uwierzytelnianiu dwuskładnikowym, gdzie OTP potwierdza posiadanie telefonu lub urządzenia oprócz hasła. Ale OTP pojawiają się daleko poza logowaniem.

  • Weryfikacja logowania: potwierdzenie logowania, szczególnie z nowego urządzenia lub lokalizacji.
  • Potwierdzenie transakcji: zatwierdzenie płatności, przelewu lub zmiany danych do wypłat.
  • Odzyskiwanie konta: potwierdzenie kontroli nad numerem telefonu lub adresem e-mail przed resetowaniem hasła.
  • Dodatkowa weryfikacja: żądanie nowego kodu przed wrażliwą operacją, nawet w trakcie sesji.

Jeśli zastanawiasz się, czy OTP rzeczywiście sprawia, że logowanie jest "two-factor", zależy to od reszty przepływu. Różnica jest opisana w artykule uwierzytelnianie dwuskładnikowe a weryfikacja dwuetapowa.

Bezpieczeństwo i dobre praktyki

OTP są proste i właśnie dlatego szczegóły mają znaczenie. Kilka nawyków pozwala utrzymać ich skuteczność.

  • Krótkie wygasanie. Ogranicz czas ważności kodów. Kilka minut dla SMS i e-maila, standardowe 30-sekundowe okno dla TOTP. Im krótsze okno, tym mniejsza szansa na ponowne użycie kodu.
  • Ograniczanie liczby żądań. Ogranicz zarówno liczbę kodów, które użytkownik może zamówić, jak i liczbę prób odgadnięcia. Sześciocyfrowy kod ma milion możliwości, które nieograniczony atakujący może złamać siłowo; kilka prób na kod zamyka tę drogę.
  • Jednorazowe użycie, wymuszone po stronie serwera. Unieważnij kod w momencie jego zaakceptowania, a także po zbyt wielu nieudanych próbach. Nie polegaj na kliencie w kwestii blokowania ponownego użycia.
  • Nigdy nie loguj kodu. Trzymaj OTP z dala od logów aplikacji, analityki i raportów o błędach. Kod w pliku logu to kod, który może odczytać osoba wewnętrzna lub wyciek logów.
  • Powiąż kod z kontekstem. Przypisz kod do konkretnego użytkownika i akcji, dla której został wydany, tak aby kod przeznaczony do jednego celu nie mógł być odtworzony w innym.

Krótka uwaga o phishingu: użytkownik może zostać nakłoniony do podania kodu SMS lub kodu z aplikacji atakującemu na fałszywej stronie, więc OTP nie są odporne na phishing tak jak klucze sprzętowe. Nadal blokują znacznie częstszy atak, czyli logowanie wyłącznie za pomocą skradzionego hasła.

Wysyłanie i weryfikacja OTP

Możesz obsłużyć przepływ OTP samodzielnie: wygeneruj kod, zapisz go z datą wygaśnięcia, wyślij i sprawdź dane wejściowe użytkownika w wyznaczonym oknie. Jeśli chcesz, żeby dostarczanie i weryfikacja były obsługiwane za Ciebie (łącznie z ograniczaniem liczby żądań i wygasaniem), produkt Verifications od Bird wysyła i waliduje kody przez SMS, połączenia głosowe i e-mail. Jeśli potrzebujesz tylko transportu i chcesz sam obsługiwać logikę weryfikacji, produkt SMS zapewnia dostarczanie kodów na telefony.

FAQ

Jaka jest różnica między HOTP a TOTP?

HOTP zwiększa licznik tokena użytkownika przy generowaniu kodu. Weryfikator usługi aktualizuje swój stan po zaakceptowaniu oczekiwanego kodu. TOTP wyprowadza kod z bieżącego czasu, więc zmienia się według stałego harmonogramu (zwykle co 30 sekund). TOTP jest powszechniejsze, ponieważ automatyczne wygasanie ogranicza przydatność skradzionego kodu.

Czy OTP przez SMS są bezpieczne?

Są wystarczająco bezpieczne dla większości kont i blokują większość ataków opartych wyłącznie na haśle, ale SMS może zostać przechwycone przez oszustwa SIM-swap lub ataki sieciowe. W przypadku kont o wysokiej wartości wybierz aplikację uwierzytelniającą lub klucz sprzętowy.

Jak długo powinien być ważny OTP?

Wystarczająco długo, żeby użytkownik mógł go odczytać i wpisać, i ani chwili dłużej. Kilka minut dla SMS lub e-maila i standardowe 30-sekundowe okno dla TOTP. Krótsze okna zmniejszają szansę, że wyciekły kod będzie nadal użyteczny.

Czy ten sam OTP może być użyty dwukrotnie?

Nie powinien. Poprawnie zaimplementowany system unieważnia kod w momencie zaakceptowania, a także po zbyt wielu nieudanych próbach. Wymuszaj jednorazowe użycie po stronie serwera, nigdy po stronie klienta.

Hasła jednorazowe to prosty pomysł, który odgrywa dużą rolę w bezpieczeństwie kont. Aby zobaczyć, jak wpisują się w pełną ochronę logowania, przeczytaj czym jest uwierzytelnianie dwuskładnikowe lub sprawdź, jak Bird generuje, dostarcza i sprawdza kody w produkcie Verifications.

Buduj na tej samej sieci.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i zweryfikowaniu nadawcy.

Twój kolejny pomysł.
Gotowy do połączenia.