2FA (uwierzytelnianie dwuskładnikowe)

Two-Factor Authentication (2FA) jest procesem zabezpieczeń dodającym dodatkowy warstwę ochrony poza hasłem użytkownika. Dodaje on zwykle coś, czego znają użytkownik (hasło), something, co ma użytkownik (np. telefon mobilny z aplikacją do autoryzacji lub kluczem bezpieczeństwa) lub coś, co jest użytkownikiem (data biometryczne). Ta kombinacja make to niezwłocznie trudniejsze dla nieuprzężonych osób o dostępu do konta nawet jeśli mają hasło użytkownika. Drugi element często to kod jednorazowy z czasu (TOTP), kod wysyłany za pośrednictwem SMS, lub prompt do aplikacji do autoryzacji.

Uwierzytelnianie dwuskładnikowe (2FA) to metoda uwierzytelniania wieloskładnikowego (MFA), która zwiększa bezpieczeństwo, wymagając dwóch odrębnych czynników uwierzytelniających do weryfikacji tożsamości użytkownika. Czynniki te są zazwyczaj kategoryzowane na trzy typy: coś, co użytkownik zna (np. hasło, PIN), coś, co użytkownik posiada (np. fizyczny token, smartfon, karta inteligentna) i coś, czym użytkownik jest (np. odcisk palca, skan twarzy). Powszechne wdrożenie obejmuje hasło (czynnik wiedzy) w połączeniu z jednorazowym hasłem (OTP) generowanym przez aplikację uwierzytelniającą lub wysyłanym przez SMS (czynnik posiadania). Proces rozpoczyna się od wprowadzenia przez użytkownika głównego poświadczenia, zazwyczaj hasła. Po pomyślnej walidacji pierwszego czynnika, system prosi o podanie drugiego czynnika. Następnie sprawdzana jest ważność drugiego czynnika w stosunku do wstępnie zarejestrowanej wartości lub algorytmu opartego na czasie. Jeśli oba czynniki zostaną pomyślnie uwierzytelnione, dostęp jest przyznawany. Główną zaletą 2FA jest jego odporność na powszechne wektory ataków, takie jak phishing, credential stuffing i ataki brute-force, ponieważ naruszenie jednego czynnika jest niewystarczające do uzyskania nieautoryzowanego dostępu. Wadami są jednak zwiększone tarcie użytkownika, możliwość utraty lub kradzieży drugiego czynnika oraz zależność od bezpieczeństwa mechanizmu dostarczania drugiego czynnika (np. przechwytywanie SMS-ów). Zaawansowane wdrożenia mogą obejmować uwierzytelnianie oparte na ryzyku, gdzie system dynamicznie dostosowuje liczbę lub typ wymaganych czynników w zależności od kontekstu, takiego jak lokalizacja, urządzenie lub pora dnia.

        graph LR
  Center["2FA (uwierzytelnianie dwuskładnikowe)"]:::main
  Rel_authorization["authorization"]:::related -.-> Center
  click Rel_authorization "/terms/authorization"
  Rel_mfa_multi_factor_authentication["mfa-multi-factor-authentication"]:::related -.-> Center
  click Rel_mfa_multi_factor_authentication "/terms/mfa-multi-factor-authentication"
  Rel_single_sign_on_sso["single-sign-on-sso"]:::related -.-> Center
  click Rel_single_sign_on_sso "/terms/single-sign-on-sso"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Wyjaśnij jak 5-latkowi

To tak, jakbyś potrzebował dwóch kluczy do otwarcia specjalnej skrzyni ze skarbami: jednego klucza, który znasz (jak tajny kod), i drugiego klucza, który masz (jak specjalna zabawka).

🤓 Expert Deep Dive

Uwierzytelnianie dwuskładnikowe (2FA) zasadniczo zwiększa bezpieczeństwo poprzez nałożenie dodatkowego mechanizmu weryfikacji na główne poświadczenie (zazwyczaj hasło lub frazę). Proces ten jest zgodny z zasadą uwierzytelniania wieloskładnikowego (MFA), wymagając konkretnie dwóch odrębnych czynników z następujących kategorii:

  1. Coś, co znasz: Hasła, PIN-y, odpowiedzi na pytania bezpieczeństwa.
  2. Coś, co posiadasz: Fizyczne tokeny (np. YubiKey, RSA SecurID), smartfony z aplikacjami uwierzytelniającymi (np. Google Authenticator, Authy) lub karty SIM dla OTP opartych na SMS.
  3. Coś, czym jesteś: Dane biometryczne, takie jak odciski palców, skany twarzy lub wzorce tęczówki.

Powszechne wdrożenie obejmuje jednorazowe hasła oparte na czasie (TOTP), znormalizowane przez RFC 6238. Algorytmy TOTP generują nowy kod co 30-60 sekund na podstawie wspólnego klucza tajnego (udostępnianego podczas początkowej konfiguracji) i aktualnego czasu, często synchronizowanego przez NTP. Walidacja po stronie serwera obejmuje ponowne obliczenie oczekiwanych kodów OTP dla danego okna czasowego i porównanie go z kodem podanym przez użytkownika.

Inną powszechną metodą jest jednorazowe hasło oparte na HMAC (HOTP), zdefiniowane w RFC 4226, które generuje kody na podstawie licznika inkrementowanego z każdym użyciem. Serwer i klient muszą utrzymywać zsynchronizowane liczniki.

Bardziej zaawansowane wdrożenia wykorzystują Universal 2nd Factor (U2F) i jego następcę, FIDO2, które wykorzystują kryptografię klucza publicznego. Podczas rejestracji na kluczu bezpieczeństwa generowana jest unikalna para kluczy prywatny/publiczny, a klucz publiczny jest rejestrowany w usłudze. Uwierzytelnianie polega na tym, że serwer wysyła wyzwanie, które urządzenie FIDO podpisuje swoim kluczem prywatnym, a serwer następnie weryfikuje je za pomocą zarejestrowanego klucza publicznego, zapewniając silną odporność na ataki phishingowe, ponieważ klucz nigdy nie opuszcza urządzenia i jest powiązany z konkretnym pochodzeniem (domeną) strony internetowej.

📚 Źródła