OTP

Cyber Katalog 9 min czytania One-Time Password Hasło jednorazowe Jednorazowy kod uwierzytelniający

Definicja OTP

OTP (One-Time Password, hasło jednorazowe) to kod uwierzytelniający ważny tylko raz albo przez krótkie okno czasu. Generuje go aplikacja w telefonie, token sprzętowy albo system wysyłający SMS lub e-mail. OTP służy jako drugi składnik logowania (MFA) obok hasła, a nie zamiast niego.

Kod z SMS-a, który bank każe przepisać przy przelewie, i sześć cyfr z aplikacji uwierzytelniającej to ten sam rodzaj mechanizmu. Hasło statyczne jest takie samo przy każdym logowaniu, więc raz skradzione działa wielokrotnie. Kod jednorazowy po użyciu albo po upływie okna czasu przestaje być przyjmowany, więc jego późniejsze przejęcie nic nie daje.

Generatorem bywa urządzenie użytkownika albo serwer usługi, ale weryfikatorem jest zawsze serwer usługi, który porównuje wpisany kod z własnym wynikiem obliczeń albo z zapamiętaną wartością. Skrót OTP oznacza też szyfr z kluczem jednorazowym (one-time pad) i pamięć programowalną jednokrotnie (one-time programmable memory), ale w uwierzytelnianiu chodzi zawsze o hasło jednorazowe.

Jak to działa

Kody jednorazowe powstają dwiema drogami. Pierwsza to generowanie lokalne: urządzenie i serwer znają ten sam tajny klucz, ustalony raz przy włączaniu drugiego składnika, na przykład przez zeskanowanie kodu QR. Klucz nie jest później przesyłany, a oba końce liczą kod niezależnie od siebie. Druga droga to dostarczanie kanałem: serwer losuje kod, zapamiętuje go i wysyła SMS-em albo e-mailem.

Generowanie lokalne opisują dwa dokumenty z serii RFC. RFC 4226 z grudnia 2005 roku definiuje HOTP (HMAC-based One-Time Password). Kod wynika z klucza K i licznika C: HOTP(K, C) = Truncate(HMAC-SHA-1(K, C)). Funkcja obcinająca zamienia wynik HMAC na liczbę, z której bierze się co najmniej sześć cyfr (dokument dopuszcza od sześciu do ośmiu), a każde użycie zwiększa licznik po obu stronach.

Liczniki mogą się rozjechać, na przykład gdy ktoś wygeneruje kod na tokenie bez logowania, dlatego serwer sprawdza kilka kolejnych wartości w oknie wyprzedzenia (parametr s), a po trafieniu synchronizuje licznik. RFC 4226 zaleca też ograniczanie liczby prób, bo krótki kod daje się zgadywać.

RFC 6238 z maja 2011 roku opisuje TOTP (Time-based One-Time Password) jako wariant, w którym licznik zastępuje liczba kroków czasu: T = floor((czas Unix - T0) / X), czyli liczba pełnych kroków. Domyślnie X wynosi 30 sekund, a T0 równa się 0. Domyślną funkcją jest HMAC-SHA-1, a dokument dopuszcza także HMAC-SHA-256 i HMAC-SHA-512.

Porównanie HOTP z RFC 4226 opartego na liczniku i TOTP z RFC 6238 opartego na zegarze: kiedy kod się zmienia, kiedy wygasa i skąd bierze się rozjazd
Oba warianty liczą kod tą samą funkcją HMAC. Różni je jedna wartość wejściowa: liczba użyć w HOTP albo upływ czasu w TOTP

Zegary urządzenia i serwera się rozchodzą, a wpisanie kodu zajmuje chwilę, dlatego RFC 6238 zaleca dopuszczenie co najwyżej jednego kroku opóźnienia sieciowego. Po udanej weryfikacji serwer może zapisać wykryte przesunięcie zegara tokena i uwzględniać je przy kolejnych kodach.

Kody z SMS-a i e-maila nie mają wzoru, bo serwer losuje je przy każdej prośbie. Czas ważności i liczbę prób ustala wtedy usługa, a opisane wyżej RFC tych kodów nie dotyczą.

Struktura i klasyfikacja

Metody dzielą się według tego, skąd bierze się kod. Kod liczony lokalnie (HOTP, TOTP) powstaje na urządzeniu użytkownika i nie potrzebuje łączności w chwili logowania, a kod dostarczany kanałem (SMS, e-mail) powstaje na serwerze i zależy od drogi, którą dojdzie. Osobny przypadek to powiadomienie push, w którym użytkownik zatwierdza prośbę w aplikacji zamiast przepisywać kod. Ściśle biorąc to nie jest hasło, ale bywa zaliczane do tej samej grupy metod.

Metoda Kto tworzy kod Co wyznacza kolejną wartość Co może zawieść
HOTP Token lub aplikacja Licznik użyć Rozjazd licznika po kodach wygenerowanych bez logowania
TOTP Aplikacja lub token Zegar, domyślnie krok 30 s Rozjazd zegara, utrata telefonu razem z kluczem
SMS Serwer usługi Losowanie przy każdej prośbie Zamiana karty SIM i przeniesienie numeru, bo kod trafia do tego, kto kontroluje numer
E-mail Serwer usługi Losowanie przy każdej prośbie Przejęcie skrzynki: kto ją kontroluje, odbiera kody. NIST wyklucza ten kanał z uwierzytelniania
Push Serwer usługi wysyła prośbę Zatwierdzenie zamiast kodu Zatwierdzenie prośby, której użytkownik nie wywołał

Ocena metod zależy od tego, kogo i przed czym ma chronić drugi składnik, a najważniejszym kryterium jest odporność na phishing.

W szerszym kontekście

OTP to jeden z dowodów z kategorii posiadania w uwierzytelnianiu wieloskładnikowym: użytkownik wykazuje, że ma telefon, token albo dostęp do numeru. Słabość tego dowodu leży poza samym kodem, bo użytkownik wpisuje go ręcznie, a nic w kodzie nie wiąże go z adresem strony, na której został wpisany.

Wykorzystuje to phishing z pośrednikiem, w którym fałszywa strona działa jak przekaźnik, czyli odmiana ataku man in the middle na poziomie aplikacji. Ofiara wpisuje hasło i kod, strona natychmiast przekazuje oba prawdziwej usłudze, a usługa widzi poprawne dane, więc obronie nie pomaga ani szybkość, ani jednorazowość kodu.

Przebieg ataku z pośrednikiem: ofiara wpisuje hasło i kod na fałszywej stronie, pośrednik przekazuje je usłudze, logowanie przechodzi, a sesja trafia do atakującego
Kod jest ważny w chwili użycia, więc jego jednorazowość niczego tu nie zmienia: pośrednik wykorzystuje go w tym samym oknie, w którym ofiara go wpisała

Kod wpisany na fałszywej stronie działa tak samo jak na prawdziwej. NIST w publikacji SP 800-63B Revision 4 z sierpnia 2025 roku stwierdza, że uwierzytelnianie kodem OTP nie jest odporne na phishing, a odporność wymaga uwierzytelniania kryptograficznego, na przykład WebAuthn. Zapewniają je FIDO2 i passkey: urządzenie podpisuje wyzwanie serwera, a podpis jest związany z domeną strony, więc podpis wytworzony dla fałszywej domeny nie zadziała w prawdziwej usłudze. Bez kodu do przepisania działa też starszy standard U2F.

Osobną sprawą jest kanał SMS, bo NIST klasyfikuje uwierzytelnianie poza pasmem przez sieć telefoniczną (SMS i połączenie głosowe) jako metodę ograniczoną (restricted). Weryfikator ma wtedy oferować alternatywne typy uwierzytelniaczy i powinien brać pod uwagę wskaźniki ryzyka, takie jak zmiana karty SIM i przeniesienie numeru.

Kod z e-maila NIST wyklucza z uwierzytelniania. Według sekcji 3.1.3.1 e-mail nie może służyć do uwierzytelniania poza pasmem, bo dostęp do skrzynki bywa chroniony samym hasłem, wiadomość można przechwycić w drodze albo na serwerach pośrednich, a ruch przekierować, na przykład przez podszycie się w DNS. Zakaz nie obejmuje kodów potwierdzających adres e-mail ani kodów odzyskiwania konta, bo te nie są uwierzytelnianiem.

Metody drugiego składnika ułożone według dwóch kryteriów NIST SP 800-63B: kod z e-maila wykluczony, kod z SMS ograniczony, TOTP i HOTP dopuszczone, ale podatne na phishing, FIDO2 i passkey odporne
Poziom wyznaczają kanał, którym kod dociera, i to, czy dowód logowania da się przenieść na inną stronę: przepisany kod da się, podpis związany z domeną nie

Kod z SMS ma więc dwa osobne ograniczenia: tak jak każdy przepisywany kod da się go przekazać fałszywej stronie, a do tego sam kanał podlega ryzyku zamiany karty SIM. TOTP i HOTP mają tylko pierwsze z nich, a FIDO2 i passkey żadnego.

Zastosowanie w praktyce

OTP potwierdza przelewy w bankowości i chroni logowanie do VPN, paneli administracyjnych i poczty. Przydaje się wszędzie tam, gdzie usługa nie oferuje silniejszej metody, bo odcina atak, w którym napastnik zna wyłącznie hasło, na przykład z wycieku bazy danych albo ze zgadywania.

OTP nie wystarcza tam, gdzie przeciwnik prowadzi ukierunkowany atak z pośrednikiem, czyli przy kontach administratorów, kontach uprawnionych do resetowania cudzych dostępów i innych kontach o wysokiej wartości. Tam pierwszym wyborem są klucze FIDO2 albo passkey, a kod OTP zostaje metodą zapasową.

Schemat wyboru drugiego składnika: jeśli usługa obsługuje klucze FIDO2 albo passkey, wybiera się je, a kod OTP zostaje zapasem; jeśli nie, kod z aplikacji TOTP, a SMS na końcu
Kolejność wynika z odporności na przejęcie: najpierw podpis związany z domeną, potem kod liczony lokalnie, na końcu kanał operatora. Wybór ogranicza to, co usługa udostępnia

Utrata telefonu oznacza utratę tajnego klucza TOTP, jeśli nie ma jego kopii, dlatego usługi wydają przy włączaniu drugiego składnika kody zapasowe: zestaw kodów jednorazowych, z których każdy działa raz i które przechowuje się poza telefonem, na przykład wydrukowane w bezpiecznym miejscu. Czy klucz da się przenieść na nowe urządzenie, zależy od aplikacji i od usługi. Ścieżka odzyskiwania dostępu sama bywa celem ataku, więc słaba procedura odzyskiwania obniża ochronę najsilniejszego składnika.

Kod jest dowodem, że loguje się właściciel konta, więc rozmówca, który prosi o odczytanie kodu z SMS-a, prosi o drugi składnik logowania. Kod wpisuje się wyłącznie w formularzu usługi, która go wysłała.

Najczęstsze nieporozumienia

  • "SMS z kodem to najbezpieczniejsza forma OTP" - nieprawda. Kod z aplikacji nie przechodzi przez sieć operatora, więc nie dotyczy go zamiana karty SIM. SMS ma inną przewagę: działa bez instalowania czegokolwiek. Wciąż jest lepszy niż samo hasło, ale NIST uznaje sam kanał za ograniczony.
  • "OTP chroni przed phishingiem" - nieprawda. OTP chroni przed ponownym użyciem przechwyconego kodu po jego wygaśnięciu, ale fałszywa strona, która przekazuje kod od razu, działa w oknie ważności, więc kod jest przyjmowany.
  • "Weryfikacja dwuetapowa to to samo co dwuskładnikowa" - nieprawda. Dwa etapy mogą dotyczyć tej samej kategorii, na przykład hasła i pytania pomocniczego, które są wiedzą. Dwa składniki pochodzą z różnych kategorii, na przykład hasło (wiedza) i telefon z aplikacją (posiadanie).
  • "Kod z aplikacji wygasa po użyciu" - zależy od weryfikatora. Kod TOTP jest ważny przez swoje okno czasu niezależnie od tego, czy ktoś go użył. Jednorazowość wymusza serwer: RFC 6238 stanowi, że weryfikator nie może przyjąć drugiej próby tego samego kodu po udanej weryfikacji. Usługa, która tego nie robi, przyjmuje ten sam kod wielokrotnie w jednym oknie.

FAQ

Co to jest OTP?

OTP to jednorazowe hasło, czyli kod, który system przyjmuje tylko przy jednym logowaniu albo przez kilkadziesiąt sekund. Dopełnia hasło jako drugi składnik uwierzytelniania. Kod tworzy aplikacja, token albo serwer usługi, a weryfikuje go zawsze serwer. Samo OTP nie zastępuje hasła i nie chroni przed fałszywą stroną.

Co to jest kod OTP i skąd go wziąć?

Kod OTP to ciąg cyfr, najczęściej sześciu, który wpisuje się po haśle. Źródło zależy od konfiguracji usługi: aplikacja uwierzytelniająca, token sprzętowy, SMS albo e-mail. Kod z nieoczekiwanej wiadomości może oznaczać, że ktoś zna login i hasło do konta, więc hasło warto zmienić. Kodu nie podaje się nikomu przez telefon ani w czacie.

Czym różni się TOTP od HOTP?

HOTP (RFC 4226) liczy kod z klucza i licznika, który rośnie z każdym użyciem, więc kod pozostaje ważny aż do następnego użycia. TOTP (RFC 6238) liczy kod z klucza i czasu, domyślnie w krokach po 30 sekund, więc kod wygasa bez użycia. HOTP grozi rozjazd licznika, TOTP rozjazd zegara.

Czy SMS z kodem OTP jest bezpieczny?

Dodaje drugi składnik do hasła, ale należy do metod ograniczonych. Kod trafia do tego, kto kontroluje numer, więc ryzykiem jest zamiana karty SIM i przeniesienie numeru. Przepisany kod można też przekazać fałszywej stronie. NIST wymaga od weryfikatorów, żeby oferowali alternatywę dla tego kanału.

Czy OTP chroni przed phishingiem?

Nie. Kod wpisany na fałszywej stronie może zostać natychmiast przekazany prawdziwej usłudze, która przyjmie go w oknie ważności. Odporność na phishing wymaga uwierzytelniania kryptograficznego, w którym podpis jest związany z domeną strony, jak w FIDO2 i passkey.

Powiązane pojęcia

Powiązane pojęcia
  • MFA - uwierzytelnianie wieloskładnikowe, w którym OTP pełni rolę składnika posiadania.
  • FIDO2 - standard uwierzytelniania kryptograficznego z podpisem związanym z domeną, odporny na przekazanie kodu.
  • Passkey - logowanie parą kluczy zamiast hasła, bez kodu do przepisania.
  • U2F - starszy standard klucza sprzętowego jako drugiego składnika.
  • Phishing - atak, który nakłania do wpisania hasła i kodu na fałszywej stronie.

Bezpieczeństwo infrastruktury

Znajdziesz tu powiązane pojęcia dotyczące uwierzytelniania i ochrony dostępu.

Zobacz kategorię

Kanał RSS

Nowe pozycje z tej sekcji w formacie RSS. Adres kanału do subskrypcji w dowolnym czytniku.

Hasła słownika https://cyberkatalog.pl/feed-slownik.xml