Generator TOTP

Wyniki

Za każdym razem, gdy Google Authenticator albo Authy pokazuje sześciocyfrowy kod zmieniający się co 30 sekund, to właśnie TOTP: HMAC obliczony ze wspólnego sekretu i bieżącego czasu Unix, ustandaryzowany w RFC 6238. Ten generator oblicza te same kody z dowolnego sekretu Base32, co przydaje się do debugowania nowej integracji uwierzytelniania dwuskładnikowego (2FA), ustalenia, czemu serwis odrzuca Twoje kody, albo obserwowania, jak algorytm reaguje na różne parametry. Używaj go z sekretami testowymi: kod jest obliczany na naszym serwerze, więc prawdziwe sekrety chroniące Twoje konta powinny zostać w aplikacji uwierzytelniającej, a nie na stronie internetowej.

Jak działa ten generator TOTP

  1. 1

    Wklej sekret Base32

    Litery A-Z i cyfry 2-7, czyli format z kodów QR otpauth://. Spacje i małe litery nie przeszkadzają; wszystko inne jest zgłaszane jako nieprawidłowe Base32.

  2. 2

    Wybierz algorytm skrótu

    SHA-1 stosują niemal wszystkie serwisy; na SHA-256 lub SHA-512 przechodź tylko wtedy, gdy serwis wyraźnie tego wymaga.

  3. 3

    Ustaw cyfry i okres

    Wybierz 6, 7 lub 8 cyfr oraz okno 30 lub 60 sekund. Standardowa kombinacja to 6 cyfr co 30 sekund.

  4. 4

    Odczytaj bieżący kod

    Kod odświeża się co sekundę, a odliczanie pokazuje, ile sekund zostało bieżącemu oknu.

  5. 5

    Porównaj URI otpauth

    Narzędzie wyświetla URI otpauth:// dla Twoich parametrów, więc możesz je porównać z tym, co koduje QR konfiguracyjny serwisu.

Algorytm prostymi słowami

TOTP to HOTP (hasło jednorazowe oparte na HMAC, RFC 4226), w którym licznik zastąpiono bieżącym czasem Unix podzielonym przez krok czasowy (zwykle 30 sekund):

counter = floor(unix_time / 30)
hash = HMAC-SHA1(secret, counter_as_8_byte_big_endian)
offset = last byte of hash AND 0x0F
truncated = 4 bytes from offset, with the top bit zeroed
code = truncated mod 10^digits

Twoje urządzenie i serwer wykonują te same obliczenia na tym samym sekrecie i tym samym zegarze, więc dochodzą do tego samego kodu, a sam kod nigdy nie jest nigdzie przesyłany. Kod 6-cyfrowy to po prostu skrócony HMAC modulo 10^6. Żadnej magii, tylko haszowanie.

Częste parametry

Serwis Algorytm Cyfry Okres
Większość stron i aplikacji SHA-1 6 30 s
GitHub SHA-1 6 30 s
Cloudflare SHA-1 6 30 s
Konta Microsoft SHA-1 6 30 s
Niektóre banki i firmowe VPN-y SHA-256 lub SHA-512 8 60 s

Jeśli serwis odrzuca Twoje kody, sprawdź najpierw liczbę cyfr i okres, a dopiero potem algorytm. Pamiętaj też, że część aplikacji uwierzytelniających po cichu ignoruje niestandardowe parametry (Google Authenticator historycznie traktował wszystko jak SHA-1, 6 cyfr, 30 sekund), więc zawsze testuj z dokładnie tą aplikacją, której będą używać Twoi użytkownicy.

Bezpieczne przechowywanie sekretów

  • Nigdy nie wysyłaj sekretu 2FA mailem ani wiadomością. Gdy raz trafi do skrzynki, zostaje na zawsze w logach i kopiach zapasowych dostawcy.
  • Rejestruj 2FA, skanując kod QR. Kod QR zawiera URI otpauth://totp/..., które łączy sekret, algorytm, liczbę cyfr i okres w jeden jednoznaczny pakiet.
  • Zrób kopię przy rejestracji. Przechowuj kody odzyskiwania, albo sam sekret, w menedżerze haseł; utrata telefonu bez nich oznacza zablokowanie dostępu.
  • Jeden sekret na serwis. Każdy serwis wydaje własny sekret przy konfiguracji; jeśli któryś wycieknie, zarejestruj 2FA ponownie, aby stary przestał działać.

Dryf zegara

TOTP działa tylko wtedy, gdy oba zegary się zgadzają. Ta strona oblicza kody zegarem serwera, więc jeśli kod tutaj różni się od tego w Twojej aplikacji uwierzytelniającej, pierwszym podejrzanym jest zegar urządzenia. Większość walidatorów akceptuje jedno okno odchylenia w każdą stronę (30-60 sekund); powyżej tego zsynchronizuj zegar urządzenia przez NTP, zanim obwinisz sekret.

Używaj tutaj sekretów testowych

To narzędzie oblicza kod na naszym serwerze: wpisany sekret jest przesyłany przez HTTPS przy każdej aktualizacji, a przy przechodzeniu między krokami narzędzia pojawia się także w adresie URL strony. To w porządku przy programowaniu, demach i debugowaniu z jednorazowymi sekretami. To nie jest miejsce na prawdziwy sekret chroniący Twoją pocztę czy konto bankowe; ten powinien mieszkać w dedykowanej aplikacji uwierzytelniającej w telefonie. Jeśli prawdziwy sekret trafił już gdzieś poza Twój authenticator, zarejestruj 2FA w tym serwisie od nowa, aby sekret został wymieniony.

Najczęściej zadawane pytania

Traktuj tę stronę jak narzędzie deweloperskie i testowe, a nie sejf. Kod jest obliczany po stronie serwera, więc sekret wędruje na nasz serwer przez HTTPS i może pojawić się w adresie URL strony między krokami. Sekretów demonstracyjnych i deweloperskich używaj swobodnie; nigdy nie wklejaj prawdziwego sekretu konta, na którym Ci zależy. Jeśli już to zrobisz, zarejestruj 2FA w tym serwisie ponownie, aby wymienić sekret.

Najpierw sprawdź parametry: algorytm, liczba cyfr i okres muszą dokładnie odpowiadać temu, co wydał serwis. Potem sprawdź zegary: ta strona używa zegara serwera, więc rozjazd zwykle wskazuje na drugie urządzenie. Pamiętaj wreszcie, że niektóre aplikacje ignorują niestandardowe parametry, a klasycznym przykładem jest Google Authenticator.

Wyłącznie Base32: litery od A do Z i cyfry od 2 do 7, z opcjonalnym dopełnieniem =. Spacje są usuwane, a małe litery zamieniane automatycznie. Sekrety w postaci hex lub surowych bajtów trzeba najpierw przekonwertować na Base32, inaczej narzędzie zgłosi nieprawidłowy sekret Base32.

Tracisz dostęp do 2FA tego konta. Skorzystaj z procedury odzyskiwania serwisu (kody odzyskiwania, weryfikacja tożsamości, awaryjny SMS). Przy konfiguracji zawsze zapisuj kody odzyskiwania albo początkowy kod QR w bezpiecznym miejscu.

Tak. Wygeneruj losowy sekret po stronie serwera, co najmniej 128 bitów (RFC 4226 zaleca 160), pokaż go raz jako kod QR i waliduj przesyłane kody, obliczając ten sam HMAC, zwykle z tolerancją jednego okna w każdą stronę. Dojrzałe biblioteki istnieją dla każdego stosu: pyotp (Python), otplib (JavaScript), rotp (Ruby).

Powiązane narzędzia

Narzędzie jest dostępne w innych językach