Cyberbezpieczeństwo

Technologia

TOTP (time-based one-time password) - czym jest generator jednorazowych haseł czasowych?

7 min czytania
TOTP (time-based one-time password)

W tym artykule omówimy szczegółowo TOTP (time-based one-time password). Poznaj najważniejsze informacje o tym, jaką rolę TOTP odgrywa w uwierzytelnianiu i jak działa. Sprawdź też, dlaczego kod TOTP szybko traci ważność.

Czym jest TOTP? Co to i jaką rolę odgrywa w uwierzytelnianiu?

TOTP, czyli time-based one-time password, to algorytm generujący jednorazowe kody uwierzytelniające na podstawie aktualnego czasu i współdzielonego klucza tajnego. Kod zmienia się co 30 sekund i traci ważność po upływie tego okna. Przechwycony kod staje się bezużyteczny najpóźniej po kilkudziesięciu sekundach.

Bazuje na wcześniejszym standardzie HOTP (RFC 4226), zastępując licznik zdarzeń aktualnym czasem jako zmienną wejściową. Wynikiem jest kod, który zmienia się automatycznie co 30 sekund bez żadnej komunikacji między urządzeniem użytkownika a serwerem.

Rola TOTP w uwierzytelnianiu jest precyzyjnie określona: stanowi drugi składnik weryfikacji tożsamości. Nie zastępuje hasła, lecz uzupełnia je o dowód posiadania konkretnego urządzenia lub aplikacji. Serwis wymagający TOTP zakłada, że atakujący może zdobyć hasło, ale nie ma jednoczesnego dostępu do telefonu ofiary.

Protokół jest otwarty i publicznie udokumentowany. Każdy może zaimplementować zgodny generator lub weryfikator TOTP. To przełożyło się na szerokie zastosowanie – od platform społecznościowych, przez bankowość internetową, po systemy VPN i narzędzia deweloperskie.

TOTP (time-based one-time password)

Zdj. 1. TOTP Authenticator – 2FA Cloud w sklepie Play

Źródło: https://play.google.com/store/apps/details?id=com.authenticator.authservice2&hl=pl

Jak działa generowanie jednorazowych haseł czasowych?

Generator TOTP to aplikacja lub urządzenie sprzętowe, które zna klucz tajny przypisany do konkretnego konta i ma dostęp do aktualnego czasu. Na tej podstawie oblicza kod identyczny z tym, który wylicza serwer. Przy logowaniu klucz tajny nie jest przesyłany przez sieć – serwer sam wylicza kod i porównuje go z tym, który wpisał użytkownik.

Jeśli wyniki się zgadzają, uwierzytelnianie przechodzi. Serwery zazwyczaj akceptują kody z jednego lub dwóch kroków sąsiednich, czyli z okna ±30 lub ±60 sekund, żeby skompensować drobne rozbieżności zegarów między urządzeniem użytkownika a infrastrukturą serwisu.

Aplikacje takie jak Google Authenticator, Authy, Microsoft Authenticator czy Bitwarden Authenticator działają właśnie na tej zasadzie. Każda z nich przechowuje klucze tajne lokalnie i generuje kody bez połączenia z internetem. 

Urządzenia sprzętowe, takie jak tokeny OATH TOTP z wyświetlaczem czy klucze YubiKey (kody pokazuje aplikacja Yubico Authenticator), działają analogicznie – klucz tajny jest zapisany w zabezpieczonym układzie scalonym, a nie w aplikacji mobilnej.

Jak skonfigurować TOTP w aplikacji lub serwisie internetowym?

Konfiguracja TOTP przebiega przez jednorazową wymianę klucza tajnego między serwisem a aplikacją użytkownika. Serwis generuje hasła jednorazowe, zazwyczaj jest to 160-bitowy ciąg zakodowany w Base32, i udostępnia je użytkownikowi w formie kodu QR lub ciągu znaków do ręcznego wpisania.

Kroki konfiguracji wyglądają następująco:

  • użytkownik wchodzi w ustawienia bezpieczeństwa konta i wybiera opcję dodania aplikacji uwierzytelniającej,
  • serwis generuje unikalny klucz tajny i wyświetla go jako kod QR,
  • użytkownik musi zeskanować kod QR aplikacją (Google Authenticator, Authy, Bitwarden Authenticator i inne),
  • aplikacja dekoduje klucz tajny z QR i zapisuje go lokalnie,
  • serwis prosi o wpisanie pierwszego kodu wygenerowanego przez aplikację, żeby potwierdzić poprawność konfiguracji,
  • po weryfikacji TOTP jest aktywny dla tego konta.

Gdzie przechowywany jest sekret TOTP i dlaczego trzeba go chronić?

Klucz tajny TOTP przechowywany jest w dwóch miejscach jednocześnie: na serwerze serwisu i w aplikacji uwierzytelniającej na urządzeniu użytkownika. Obie kopie muszą być identyczne, bo algorytm wymaga tego samego klucza po obu stronach do wygenerowania zgodnych kodów.

W aplikacjach mobilnych klucz tajny trafia do zaszyfrowanego magazynu systemu operacyjnego. Na Androidzie jest to zwykle Android Keystore, na iOS – Keychain (chroniony sprzętowo przez Secure Enclave). Aplikacje takie jak Authy dodatkowo szyfrują klucze własnym hasłem i umożliwiają synchronizację między urządzeniami przez chmurę. Google Authenticator przez długi czas nie oferował kopii zapasowej w chmurze. Zgubienie telefonu mogło oznaczać trwałą utratę dostępu. Nowsze wersje aplikacji oferują opcjonalną synchronizację z kontem Google.

Klucz tajny to jedyna rzecz, która pozwala generować poprawne kody dla danego konta. Kto zna klucz tajny, może zainstalować go w dowolnej aplikacji TOTP i generować kody bez wiedzy właściciela konta. Dlatego:

  • klucz tajny wyświetlany podczas konfiguracji (kod QR lub ciąg Base32) nie powinien być fotografowany w miejscach publicznych ani udostępniany osobom trzecim,
  • zrzuty ekranu z kodami QR nie powinny trafiać do niezaszyfrowanych galerii ani chmury bez kontroli dostępu,
  • eksport kluczy z aplikacji uwierzytelniającej wymaga takiej samej ochrony jak hasła główne,
  • dostęp do telefonu z aplikacją TOTP powinien być chroniony kodem PIN, odciskiem palca lub inną blokadą ekranu.

Na serwerze klucze tajne powinny być przechowywane w zaszyfrowanej formie, oddzielnie od haseł użytkowników. Wyciek bazy danych zawierającej klucze TOTP w postaci jawnej oznacza kompromitację drugiego składnika uwierzytelniania dla wszystkich kont. Dobrą praktyką jest szyfrowanie kluczy TOTP kluczem głównym przechowywanym w sprzętowym module bezpieczeństwa (HSM) lub w usłudze zarządzania kluczami (KMS).

Jakie są zalety i ograniczenia uwierzytelniania TOTP?

TOTP ma kilka właściwości, które wyróżniają go spośród innych metod drugiego składnika uwierzytelniania.

Zalety uwierzytelniania TOTP

  • działa offline – aplikacja nie potrzebuje połączenia z internetem do generowania kodów, co czyni TOTP użytecznym w środowiskach z ograniczonym dostępem do sieci,
  • nie zależy od operatora telekomunikacyjnego – w przeciwieństwie do SMS-ów nie można go przechwycić przez atak SIM swapping ani przez podatności protokołu SS7,
  • jest otwarty i standaryzowany – RFC 6238 opisuje algorytm publicznie. To umożliwia niezależną weryfikację i szeroką implementację bez uzależnienia od jednego dostawcy,
  • jeden telefon obsługuje konta z wielu serwisów jednocześnie, bez potrzeby osobnych tokenów sprzętowych dla każdego konta,
  • kody są krótkotrwałe. To ogranicza okno ataku przy przechwyceniu do maksymalnie kilkudziesięciu sekund.

Ograniczenia uwierzytelniania TOTP

  • wymaga zsynchronizowanych zegarów – duże rozbieżności między zegarem urządzenia a serwerem powodują błędy uwierzytelniania, choć większość implementacji toleruje odchylenia do ±60 sekund,
  • utrata urządzenia bez kopii zapasowej kluczy oznacza utratę dostępu do kont i konieczność przechodzenia przez procedury odzyskiwania u każdego serwisu osobno,
  • TOTP nie chroni przed phishingiem w czasie rzeczywistym – atakujący może przekazać przechwycony kod do prawdziwego serwisu w ciągu kilku sekund, zanim wygaśnie,
  • wymaga dodatkowego kroku przy każdym logowaniu. To część użytkowników uznaje za uciążliwe w porównaniu z metodami opartymi na powiadomieniach push,
  • aplikacje bez synchronizacji chmurowej utrudniają migrację na nowe urządzenie i wymagają wcześniejszego planowania.

Phishing w czasie rzeczywistym (real-time phishing) to największe praktyczne ograniczenie TOTP. Fałszywa strona logowania może zebrać hasło i kod TOTP, a następnie natychmiast użyć ich na prawdziwym serwisie, zanim kod wygaśnie. Klucze sprzętowe FIDO2/WebAuthn eliminują ten problem przez kryptograficzne powiązanie uwierzytelniania z domeną serwisu – podpis złożony dla fałszywej domeny nie zadziała na prawdziwej.

Czym TOTP różni się od HOTP, kodów SMS i powiadomień push?

Porównanie metod drugiego składnika uwierzytelniania pokazuje, że każda z nich ma inny model bezpieczeństwa i inne słabe punkty.

HOTP a TOTP – różnica

HOTP (HMAC-based One-Time Password, RFC 4226) to poprzednik TOTP. Zamiast czasu używa licznika zdarzeń, który rośnie przy każdym wygenerowaniu kodu. Kod HOTP nie traci ważności po 30 sekundach – jest ważny do momentu użycia lub do czasu, gdy licznik po stronie serwera i klienta się rozjedzie. Przechwycony kod HOTP można użyć znacznie później niż przechwycony kod TOTP. Rozbieżność liczników między klientem a serwerem to też praktyczny problem operacyjny – serwery muszą akceptować kody z szerokiego okna licznikowego. To osłabia bezpieczeństwo. TOTP eliminuje ten problem przez powiązanie z czasem.

Kody SMS a TOTP

Kody SMS to najpopularniejsza, ale jednocześnie najsłabsza metoda drugiego składnika. Sieć GSM ma znane podatności protokołu SS7, które umożliwiają przechwycenie wiadomości SMS przez osoby z dostępem do infrastruktury telekomunikacyjnej. Atak SIM swapping – wyłudzenie duplikatu karty SIM od operatora – pozwala przejąć numer telefonu i odbierać kody SMS przeznaczone dla ofiary. TOTP nie ma tych słabości, bo nie korzysta z sieci telefonicznej. Mimo to SMS jako drugi składnik jest lepszy niż brak jakiegokolwiek drugiego składnika.

Powiadomienia push a TOTP

Powiadomienia push (stosowane np. przez Duo Security lub Microsoft Authenticator w trybie push) wysyłają żądanie zatwierdzenia do aplikacji na telefonie. Użytkownik zatwierdza lub odrzuca logowanie jednym kliknięciem. To wygodniejsze niż wpisywanie kodu, ale podatne na atak MFA fatigue – atakujący wysyła dziesiątki żądań push, licząc, że zmęczony lub zdezorientowany użytkownik kliknie „zatwierdź” bez zastanowienia. 

Kilka głośnych incydentów bezpieczeństwa w dużych firmach technologicznych zostało przeprowadzonych właśnie tą metodą. TOTP wymaga aktywnego przepisania kodu. To eliminuje ten wektor.

Klucze sprzętowe FIDO2 a TOTP 

Klucze sprzętowe FIDO2 (YubiKey i podobne) są bezpieczniejsze od TOTP, bo kryptograficznie wiążą uwierzytelnianie z domeną serwisu i są odporne na phishing. Ich wadą jest koszt i konieczność posiadania fizycznego urządzenia, które można zgubić lub zapomnieć.

Jak bezpiecznie korzystać z kodów TOTP?

Bezpieczne korzystanie z TOTP wymaga kilku nawyków, które razem znacznie zmniejszają ryzyko utraty dostępu lub kompromitacji konta.

Odpowiedni wybór aplikacji uwierzytelniającej

Wybór aplikacji uwierzytelniającej ma znaczenie. Aplikacje z synchronizacją chmurową (Authy, Bitwarden Authenticator, 1Password) ułatwiają migrację między urządzeniami, ale wymagają zaufania do dostawcy chmury i jego procedur bezpieczeństwa. Aplikacje bez synchronizacji (Aegis na Androidzie, 2FAS z wyłączoną kopią w chmurze na iOS i Androidzie) dają pełną kontrolę nad kluczami, ale wymagają ręcznego zarządzania kopiami zapasowymi. Wybór zależy od modelu zagrożeń i gotowości do zarządzania kopiami zapasowymi.

Blokada ekranu na urządzeniu z aplikacją TOTP

Blokada ekranu na urządzeniu z aplikacją TOTP to podstawa. Telefon bez kodu PIN lub biometrii daje fizyczny dostęp do wszystkich kluczy TOTP każdemu, kto go znajdzie lub ukradnie. Warto też włączyć szyfrowanie pamięci urządzenia, jeśli system operacyjny tego nie robi domyślnie.

Weryfikacja domeny przed wpisaniem kodu TOTP

Weryfikacja domeny przed wpisaniem kodu TOTP chroni przed phishingiem. Przed wpisaniem kodu warto sprawdzić, czy adres w pasku przeglądarki odpowiada prawdziwemu serwisowi. Menedżery haseł, które automatycznie wypełniają dane logowania tylko na właściwej domenie, pomagają wykryć fałszywe strony zanim użytkownik wpisze cokolwiek.

Regularne sprawdzanie listy aktywnych metod uwierzytelniania w ustawieniach konta 

Regularne sprawdzanie listy aktywnych metod uwierzytelniania w ustawieniach konta pozwala wykryć nieautoryzowane dodanie nowego urządzenia TOTP. Niektóre serwisy wysyłają powiadomienia e-mail przy dodaniu nowej metody 2FA – warto zwracać uwagę na takie alerty.

Przechowywanie kluczy tajnych (kodów QR z konfiguracji) w zaszyfrowanym sejfie 

Przechowywanie kluczy tajnych (kodów QR z konfiguracji) w zaszyfrowanym sejfie to dodatkowe zabezpieczenie. Jeśli podczas konfiguracji TOTP serwis wyświetla klucz w formacie tekstowym, można go zapisać w menedżerze haseł jako notatkę. Przy utracie telefonu taki zapis pozwala skonfigurować TOTP od nowa bez przechodzenia przez procedury odzyskiwania dostępu.

tło banera
Genialne firmy mnożą
swój potencjał z
Ocena Clutch
5.0
Ocena Google
4.8
tło banera
Bądź widoczny w Google i wyszukiwarkach przyszłości (ChatGPT, Gemini, Perplexity i inne)
Zostaw adres e-mail — porozmawiamy o widoczności Twojej strony w AI.
Dane przetwarzamy w celu kontaktu, zgodnie z naszą
polityką prywatności
Marcin Stypuła
Copywriter, który swoją przygodę z tworzeniem treści rozpoczął w 2020 roku. Od początku skupił się na materiałach eksperckich związanych z SEO i tematyką techniczną. Jego ambicją jest przekładanie skomplikowanych zagadnień marketingowych na prosty, przystępny język. Poza pracą stawia na aktywność i regenerację, latem biegając, a zimą morsując.

Udostępnij

Oceń tekst

Średnia ocen 0 / 5. Liczba głosów: 0

Brak głosów - oceń jako pierwszy!

Zapytaj o ofertę SEO
Dołącz do newslettera
Powiązane artykuły Najnowsze Popularne

Zbuduj Twój potencjał SEO

Skonsultuj z nami Twoją sytuację w wyszukiwarce. Porozmawiajmy o Twoich celach i możliwościach współpracy