Blog

Głodny wiedzy? Na evoBlogu czekają artykuły napisane przez naszych specjalistów.

Algorytm TOTP

TOTP (Time‑Based One‑Time Password) to algorytm generujący jednorazowe hasła w oparciu o aktualny czas i niejawny klucz. Dzięki unikalności tych haseł – gwarantowanych dzięki wykorzystaniu aktualnego czasu – metoda ta bardzo często wykorzystywana jest w uwierzytelnianiu dwuskładnikowym (2FA). Algorytm TOTP, zdefiniowany przez standard RFC 6238 (https://datatracker.ietf.org/doc/html/rfc6238), stanowi, bazującą na czasie, wersję algorytmu HOTP.

Zasada działania

TOTP, do swojego działania, wymaga unikalnego tajnego klucza, współdzielonego pomiędzy serwisem a klientem, oraz informacji o bieżącym czasie (Unix time). Wartość TOTP zdefiniowana jest w następujący sposób:

TOTP = HOTP(K, T)

gdzie K jest współdzielonym tajnym kluczem, natomiast T jest wartością całkowitą, oznaczającą liczbę przedziałów czasowych pomiędzy aktualnym czasem a czasem, od którego wyznaczane są przedziały. Precyzyjniej, wartość T jest wyznaczana następująco:

 

TC ‑ aktualny czas (Unix time)

T0 – czas początkowy, od którego wyznaczane są przedziały (zazwyczaj 0)

Tx – długość przedziału czasowego

Wszystkie czasy podane są w sekundach. Wyznaczona wartość zaokrąglana jest w dół do wartości całkowitej.

Dla danego przedziału czasowego Tx (oraz klucza) generowana przez algorytm TOTP wartość jest zawsze taka sama. Wspomniany wcześniej standard RFC 6238 zaleca domyślną wartość kroku czasu (Tx), wynoszącą 30 sekund, co stanowi balans pomiędzy bezpieczeństwem a użytecznością. Większa wartość powoduje wydłużenie okna czasowego do przeprowadzenia potencjalnego ataku. Ponadto hasła są jednorazowe, co oznacza, że użytkownik musiałby dłużej czekać, zanim miałby kolejną możliwość wprowadzenia hasła.

Serwis weryfikujący porównuje otrzymany token z wartością wygenerowaną na serwerze, z uwzględnieniem potencjalnego opóźnienia wprowadzanego przez sieć.

HOTP (HMAC‑Based One‑Time Password)

Algorytm HOTP, na którym opiera się TOTP, został zdefiniowany przez standard RFC 4226 (https://datatracker.ietf.org/doc/html/rfc4226). HOTP generuje jednorazowe hasła (OTP), wykorzystując HMAC (Keyed‑Hashing for Message Authentication) zdefiniowany w standardzie RFC 2104 (https://datatracker.ietf.org/doc/html/rfc2104).

HOTP bazuje na niejawnym kluczu (K), liczniku (C) z inkrementowanymi wartościami, oraz kryptograficznej funkcji hashującej (H).

Wartość HOTP wyznaczana jest następująco:

gdzie wartość zwracana przez HMACH jest następnie skracana do użytecznej długości (co najmniej sześć znaków).

Bezpieczeństwo

Bezpieczeństwo TOTP zależy od właściwości HOTP. Szczegółowa analiza przeprowadzona w specyfikacji RFC 4226 wskazuje, że potencjalnie najlepszym sposobem złamania HOTP jest atak typu “brute force”. Biorąc pod uwagę, że TOTP wprowadza dodatkowo okno czasowe, w którym dane hasło jest ważne, jeszcze bardziej zwiększa to poziom bezpieczeństwa całego mechanizmu.

Resynchronizacja

Ponieważ TOTP działa w oparciu o czas, a generowane hasła są dostępne offline, bez połączenia pomiędzy zabezpieczanym serwisem a urządzeniem/aplikacją generującą weryfikowany token, nie możemy zapomnieć o kwestii synchronizacji.

Obecnie zegary dostępne w urządzeniach cechuje duża stałość w generowaniu czasu. Mimo to, w dłuższej perspektywie, może zwiększać się różnica pomiędzy czasem serwera a urządzenia klienckiego. Uwzględnić trzeba również potencjalne opóźnienie sieci. Z tego względu standard RFC 6238 zaleca akceptowanie jako poprawne także hasła wygenerowanego dla wcześniejszego przedziału czasu.

TOTP definiuje także sposoby ponownej synchronizacji. W tym celu serwer sprawdza dwa wcześniejsze kroki czasowe, żeby na tej podstawie określić rozbieżności pomiędzy zegarami. Wykryta rozbieżność jest zapamiętywana i uwzględniana przy ponownej weryfikacji tokena.

Planujesz wdrożenie bezpiecznego uwierzytelniania dwuskładnikowego w swoim projekcie SaaS? Poznaj zalety algorytmu TOTP. Zapraszamy do kontaktu, by omówić, jak możemy wspierać Twój projekt w zakresie nowoczesnych rozwiązań bezpieczeństwa.

{Również może Ci się spodobać}