kod jednorazowy
| Po angielsku | one-time password (OTP/TOTP) |
|---|---|
| Którą formą pisać | obie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski. |
| Inne formy | hasło jednorazowe · kod jednorazowy z aplikacji · kod SMS (potocznie, węższe) |
| Kategoria | Kryptografia, tożsamość i uwierzytelnianie |
Kod jednorazowy (one-time password, OTP) to krótki ciąg cyfr, który serwer przyjmuje tylko raz i zwykle tylko przez krótki czas. Najczęściej powstaje z sekretu współdzielonego przez serwer i urządzenie użytkownika: z licznika zdarzeń w algorytmie HOTP [1] albo z bieżącego czasu w algorytmie TOTP [2]. Bywa też wysyłany SMS-em lub e-mailem. Kod jednorazowy jest typowym drugim składnikiem w uwierzytelnianiu wieloskładnikowym (MFA), ale NIST zaznacza, że nie jest odporny na phishing, bo użytkownik przepisuje go ręcznie [3].
Jak działa
Algorytm HOTP opisuje RFC 4226 z grudnia 2005 roku. Token i serwer znają ten sam sekret oraz licznik; kod powstaje przez obliczenie HMAC-SHA-1 z licznika i skrócenie wyniku do co najmniej 6 cyfr [1]. Sekret musi mieć co najmniej 128 bitów, a autorzy zalecają 160 bitów [1]. HMAC to konstrukcja oparta na funkcji skrótu (hashowaniu) i kluczu kryptograficznym.
TOTP, opisany w RFC 6238 z maja 2011 roku, zastępuje licznik liczbą przedziałów czasu, które upłynęły od ustalonego momentu: TOTP = HOTP(K, T) [2]. Domyślny przedział to 30 sekund [2]. Obok HMAC-SHA-1 standard dopuszcza HMAC-SHA-256 i HMAC-SHA-512 [2]. Aplikacja uwierzytelniająca w telefonie i serwer liczą kod niezależnie, więc nic nie jest przesyłane w chwili logowania.
Zegary urządzeń nie są idealnie zgodne. RFC 6238 zaleca, by serwer akceptował kod co najwyżej z jednego przedziału wstecz, co wystarcza na opóźnienie sieci [2]. Ten sam kod nie może zadziałać drugi raz: po udanej weryfikacji serwer musi odrzucić kolejną próbę z tym samym kodem [2]. NIST formułuje to ogólniej — weryfikator przyjmuje dany kod tylko raz w okresie jego ważności [3].
Rodzaje
| Rodzaj | Skąd bierze się kod | Uwagi |
|---|---|---|
| HOTP | licznik zdarzeń [1] | serwer toleruje rozjazd licznika w oknie wyprzedzenia [1] |
| TOTP | bieżący czas [2] | aplikacja w telefonie albo token sprzętowy |
| SMS lub połączenie głosowe | wysyłany przez operatora | NIST: uwierzytelnianie ograniczone [3] |
| wysyłany na skrzynkę | NIST: nie do uwierzytelniania pozapasmowego [3] | |
| Kody zapasowe | wygenerowane z góry, każdy raz | do odzyskania dostępu [4] |
NIST opisuje też dwa warianty urządzeń. Jednoskładnikowe urządzenie OTP dowodzi tylko posiadania. Wieloskładnikowe wymaga najpierw odblokowania hasłem lub biometrią i dopiero potem pokazuje kod [3].
W WordPressie
Społecznościowa wtyczka Two Factor z katalogu WordPress.org dodaje kody z aplikacji uwierzytelniającej (TOTP), kody wysyłane e-mailem i jednorazowe kody zapasowe [6]. Ma ponad 100 000 aktywnych instalacji [6]. Każdy użytkownik włącza metody w swoim profilu, w sekcji ustawień dwuskładnikowych [6]. Obsługa kluczy FIDO U2F została z niej usunięta z powodu braku wsparcia przeglądarek, a WebAuthn wymaga osobnej wtyczki [6].
Kody jednorazowe chronią także samych twórców rozszerzeń. Od 1 października 2024 roku WordPress.org wymaga uwierzytelniania dwuskładnikowego (2FA) od autorów wtyczek i motywów z prawem zapisu do repozytorium [7]. Uzasadnienie: takie konta mogą wypchnąć aktualizację do wtyczek i motywów używanych przez miliony witryn [7]. Przejęcie jednego konta autora byłoby więc atakiem na łańcuch dostaw (supply chain attack).
W konfiguracji witryny liczy się, gdzie kod trafia. Kod wysyłany e-mailem jest słabszy, gdy ta sama skrzynka służy do resetu hasła. NIST wprost wyklucza e-mail jako kanał uwierzytelniania pozapasmowego, bo dostęp do poczty bywa chroniony tylko hasłem [3].
Zagrożenia i skutki
Kod jednorazowy utrudnia użycie wykradzionych danych uwierzytelniających, ale nie zamyka wszystkich dróg ataku.
- Wyłudzenie kodu. Strona podszywająca się pod usługę prosi o kod i natychmiast przekazuje go prawdziwemu serwerowi. CERT Polska opisał w czerwcu 2026 roku kampanię UNC1151: po podaniu hasła atakujący automatycznie logowali się na konto ofiary i wyświetlali formularz z prośbą o kod, przejmując zarówno kody SMS, jak i kody z aplikacji Google Authenticator [5]. To schemat phishingu AiTM (adversary-in-the-middle).
- Przejęcie numeru telefonu. OWASP ostrzega, że kody SMS narażone są na podmianę karty SIM i przeniesienie numeru [4]; zob. wyłudzenie duplikatu karty SIM (SIM swap).
- Zgadywanie. Kod ma mało cyfr, więc bez limitu prób można go odgadnąć. RFC 4226 szacuje szansę powodzenia jako
sv/10^Digit, gdziesto wielkość okna synchronizacji, avliczba prób [1]. - Wyciek sekretu. Kto skopiuje sekret TOTP, generuje poprawne kody bez telefonu ofiary.
Skutkiem udanego ataku jest zwykle przejęcie konta, w tym konta administratora witryny.
Jak się bronić
OWASP zaleca traktować kody jednorazowe jak hasła: krótki czas życia, jednokrotne użycie, ścisły limit prób, brak zapisu kodów w logach i generowanie ich bezpiecznym generatorem losowym [4]. RFC 4226 wymaga dławienia kolejnych błędnych prób [1], a NIST każe zablokować dany uwierzytelniacz po najwyżej 100 kolejnych nieudanych próbach [3]. W WordPressie tę rolę pełni limit prób logowania, który utrudnia też atak siłowy (brute-force).
Przy konfiguracji konta warto wydrukować lub zapisać w menedżerze haseł kody zapasowe; OWASP zaleca wydawać je już przy włączaniu MFA [4]. Dla kont o najwyższych uprawnieniach lepsze są metody odporne na phishing. NIST zalicza do nich uwierzytelnianie kryptograficzne związane z sesją, na przykład WebAuthn, a wyklucza metody z ręcznym przepisywaniem kodu [3]; zob. też passkey.
Historia i przykłady
- Grudzień 2005: publikacja RFC 4226 z algorytmem HOTP [1].
- Maj 2011: publikacja RFC 6238 z algorytmem TOTP [2].
- 1 października 2024: obowiązkowe 2FA dla autorów wtyczek i motywów w WordPress.org [7].
- Sierpień 2025: NIST publikuje czwartą rewizję SP 800-63B, w której kody OTP nie są uznawane za odporne na phishing [3].
- Czerwiec 2026: CERT Polska opisuje kampanię UNC1151, w której wyłudzano kody SMS i kody z aplikacji [5].
Przypisy
7- [1] RFC 4226: HOTP: An HMAC-Based One-Time Password Algorithm · IETF
- [2] RFC 6238: TOTP: Time-Based One-Time Password Algorithm · IETF
- [3] SP 800-63B-4: Digital Identity Guidelines — Authentication and Authenticator Management · NIST
- [4] Multifactor Authentication Cheat Sheet · OWASP
- [5] Kampania phishingowa grupy UNC1151/Ghostwriter na pocztę Gmail · CERT Polska
- [6] Two Factor — wtyczka w katalogu WordPress.org · WordPress.org
- [7] Upcoming Security Changes for Plugin and Theme Authors on WordPress.org · WordPress.org
Hasła w tym artykule
15- uwierzytelnianie wieloskładnikowe
- phishing
- funkcja skrótu (hashowanie)
- klucz kryptograficzny
- FIDO2 / WebAuthn
- uwierzytelnianie dwuskładnikowe
- atak na łańcuch dostaw
- dane uwierzytelniające
- phishing AiTM (adversary-in-the-middle)
- wyłudzenie duplikatu karty SIM
- przejęcie konta
- limit prób logowania
- atak siłowy (brute-force)
- menedżer haseł
- passkey
Linkują tutaj
17- phishing
- passkey
- uwierzytelnianie wieloskładnikowe
- pharming
- dane uwierzytelniające
- phishing AiTM (adversary-in-the-middle)
- vishing
- wyłudzenie duplikatu karty SIM
- juice jacking
- trojan bankowy
- uwierzytelnianie dwuskładnikowe
- FIDO2 / WebAuthn
- uwierzytelnianie bez hasła
- oszustwo na BLIK-a
- oszustwo na policjanta / na pracownika banku
- nakładka (overlay) na aplikację bankową
- rootowanie / jailbreak telefonu