Jak działa hasło jednorazowe (OTP)?
W tym artykule wprowadzimy dwa różne sposoby działania jednorazowego hasła: e-mail/telefon + kod weryfikacyjny oraz kod dynamiczny.
W miarę jak internet się rozwijał, korzystaliśmy z szerokiej gamy usług online, aby zaspokoić niemal wszystkie nasze potrzeby. Pierwszym krokiem w korzystaniu z tych usług jest często rejestracja i logowanie. Jeśli chodzi o rejestrację i logowanie, uwierzytelnianie za pomocą identyfikatora użytkownika i hasła jest nadal szeroko stosowane, mimo że minęły już ponad trzy dekady od czasów korzystania z samodzielnych komputerów stacjonarnych, które nie mogły się łączyć z internetem.
W przeszłości być może musieliśmy pamiętać tylko hasło do naszego konta e-mailowego, ale teraz często korzystamy z dziesiątek, a nawet setek usług online, i nie możemy używać tego samego hasła do wszystkich z nich (jeśli hasło do jednego konta zostanie skompromitowane, wszystkie konta używające tego samego hasła będą zagrożone). W rezultacie logowanie bez hasła staje się coraz bardziej popularne i stopniowo staje się mainstreamowym podejściem.
Istnieje wiele różnych metod uwierzytelniania bez hasła, w tym, ale nie tylko, logowanie społecznościowe, e-mail/telefon + kod weryfikacyjny oraz użycie aplikacji uwierzytelniających z dynamicznymi hasłami. Te ostatnie dwie metody można zaklasyfikować jako hasła jednorazowe (OTP).
Co to jest hasło jednorazowe (OTP)?
OTP to automatycznie generowana sekwencja znaków, która jest ważna tylko do jednej sesji logowania lub przez krótki okres czasu. Ponieważ OTP może być użyte tylko raz, może zapobiec ryzyku wycieku danych uwierzytelniających, takich jak zgubione lub skradzione hasło.
W teorii OTP może być losowym ciągiem znaków o określonej długości, w tym wielkich i małych liter, a nawet specjalnych symboli. Jednak dla lepszych doświadczeń użytkownika, większość usług używa czystych cyfr podczas korzystania z OTP.
E-mail / telefon + kod weryfikacyjny
Wiele stron internetowych wymaga od ciebie potwierdzenia tożsamości poprzez wysłanie kodu weryfikacyjnego (lub hasła) na zarejestrowany e-mail lub numer telefonu.
Wyobraź sobie, że Jack i Joe grają w grę zgadywaną, w której Jack wymyśla liczbę od 0 do 999 i daje Joemu trzy szanse na odgadnięcie liczby w ciągu jednej minuty. Poza znajomością zakresu liczby, Joe nie ma żadnych innych informacji.
Wszyscy wiemy, że jest to prawie niemożliwe dla Joego, aby odgadł liczbę poprawnie w ciągu jednej minuty używając tylko trzech prób.
E-mail / telefon + kod weryfikacyjny działa na tej samej zasadzie: kod weryfikacyjny jest zazwyczaj ważny przez bardzo krótki okres, zwykle nie dłużej niż 10 minut (podobnie jak Jack daje Joemu „jedną minutę” na odgadnięcie liczby). Dodatkowo, API lub metoda weryfikacji kodu weryfikacyjnego zwykle ma limit szybkości, aby zapobiec atakom siłowym na hasło (jak Jack daje Joemu „trzy szanse”).
Dla potencjalnych atakujących, jest to prawie niemożliwe do złamania tej metody. Jednak system przekazuje użytkownikowi kod weryfikacyjny przez zaufany kanał (e-mail lub telefon), co pozwala użytkownikowi zweryfikować go bezpośrednio.
Kod dynamiczny
Kod dynamiczny, znany również jako OTP oparte na czasie (TOTP), jest „dynamiczny” w tym sensie, że zmienia się z upływem czasu. Ogólnie rzecz biorąc, jeśli aplikacja internetowa używa TOTP, będzie przestrzegać RFC6238 - Algorytm hasła jednorazowego opartego na czasie (TOTP).
Hasło jednorazowe oparte na funkcji hash
Przed wprowadzeniem TOTP, musimy krótko omówić RFC4226 - Algorytm hasła jednorazowego opartego na HMAC (HOTP) (HMAC jest algorytmem haszującym). Algorytm HOTP działa następująco:
-
Sekret: HOTP wymaga współdzielonego klucza sekretu K, który jest taki sam między serwerem a klientem.
-
Licznik: Rdzeniem HOTP jest licznik C, który jest zwiększany za każdym razem, gdy generowane jest nowe hasło.
-
Obliczenie HMAC:
-
Użyj HMAC-SHA-1 (lub innych funkcji hash) do obliczenia kodu uwierzytelniającego:
-
Tutaj H jest 160-bitową wartością hash.
-
-
Trunkowanie: Wyciągnij część wartości hash H, aby wygenerować OTP. Zakładając, że chcemy 6-cyfrowe OTP, proces jest następujący:
- Wyciągnij ostatni bajt H jako offset trunkacji O.
- Wyciągnij 4 bajty zaczynając od O, przekształć je w liczbę całkowitą T.
- Weź ostatnie d cyfry T, tj. OTP = T mod 10^d.
Podsumowując, formuła HOTP to:
gdzie d to pożądana długość OTP (zazwyczaj 6-8 cyfr).
Jednorazowe hasło oparte na czasie
TOTP jest rozszerzeniem HOTP, w którym licznik jest zastąpiony krokiem czasowym. Używa bieżącego czasu do generowania dynamicznego kodu weryfikacyjnego, więc OTP automatycznie wygasa z czasem. Podstawowa zasada działania jest następująca:
-
Krok czasowy: TOTP używa bieżącego czasu T zamiast licznika C HOTP. Krok czasowy to zestaw stałego interwału czasowego (zazwyczaj 30 sekund).
- Na przykład, zakładając, że krok czasowy wynosi 30 sekund, a bieżący znacznik czasu Unix wynosi T. Licznik TOTP jest obliczany jako: T' = T / krok_czasowy
- Gdzie T′ jest licznikiem kroku czasowego, w jednostkach 30 sekund.
-
Generowanie OTP: Podstaw T′ do algorytmu HOTP, aby wygenerować OTP:
-
Dynamiczna aktualizacja: Ponieważ TOTP bazuje na kroku czasowym, OTP zmienia się z czasem, więc serwer może zweryfikować jego ważność, o ile OTP znajduje się w oknie czasowym.
Podsumowując, formuła TOTP to:
W oparciu o nasze doświadczenia związane z używaniem aplikacji uwierzytelniających, możemy synchronizować wartość sekretu między urządzeniem a serwerem, skanując kod QR lub bezpośrednio kopiując i wklejając, a następnie musimy wprowadzić bieżący kod dynamiczny raz, aby upewnić się, że wartość sekretu jest taka sama.
Na początku korzystania z urządzeń mobilnych mogliśmy zauważyć, że czas na różnych urządzeniach nie był taki sam i musieliśmy ręcznie dostosowywać czas na urządzeniach okresowo. W ostatnich latach niemal wszystkie urządzenia używają usługi czasu sieciowego (NTP) do regularnego synchronizowania i aktualizowania czasu urządzenia. Nawet jeśli zegar urządzenia nie jest całkowicie dokładny, częste aktualizacje mogą zapewnić, że czas jest rozsądnie zgodny na różnych urządzeniach. W oparciu o to założenie, kod dynamiczny można nadal używać, nawet jeśli urządzenie jest offline, podczas gdy trudno byłoby odbierać kod weryfikacyjny w stanie offline.
Zakończenie
W tym artykule przedstawiliśmy dwa różne sposoby działania hasła jednorazowego: e-mail/telefon + kod weryfikacyjny oraz kod dynamiczny.
E-mail/telefon + kod weryfikacyjny opiera się na infrastrukturze komunikacyjnej i usłudze e-mail lub wiadomości SMS od stron trzecich; kod dynamiczny nie zależy od zewnętrznych usług i urządzeń komunikacyjnych, i może być używany offline.
Logto, jako popularna, potężna i wysoce elastyczna usługa IAM (Zarządzanie Tożsamością i Dostępem), wspiera oba sposoby działania OTP, umożliwiając użytkownikom wybór rozwiązania, które najlepiej odpowiada ich potrzebom z perspektywy biznesowej.