Dwuskładnikowe uwierzytelnianie (2FA)
Dwuskładnikowe uwierzytelnianie to dodatkowa warstwa zabezpieczeń przy logowaniu. Oprócz hasła użytkownik musi potwierdzić tożsamość drugim sposobem — kodem z telefonu, kluczem sprzętowym albo biometrią.
W aplikacjach SaaS to jeden z najważniejszych mechanizmów ochrony kont. Poniżej porównanie wszystkich popularnych metod — od najsłabszych do najsilniejszych.
Porównanie metod 2FA
Backup codes (kody zapasowe)
Bezpieczeństwo: ⭐ | Prostota: ⭐⭐⭐⭐⭐
8-10 jednorazowych kodów wygenerowanych przy konfiguracji 2FA. Użytkownik zapisuje je na kartce lub w pliku. Każdy kod działa raz.
Nie powinny być samodzielną metodą 2FA — to metoda awaryjna na wypadek utraty telefonu. Problem: ludzie fotografują kody telefonem, co sprawia, że oba faktory (hasło + kod) są na tym samym urządzeniu.
SMS OTP
Bezpieczeństwo: ⭐⭐ | Prostota: ⭐⭐⭐⭐⭐
6-cyfrowy kod wysyłany SMS-em na numer telefonu. Najprostszy dla użytkownika — każdy rozumie jak to działa.
Wady: podatny na atak SIM swap (przestępca przenosi numer na swoją kartę SIM), przechwycenie przez protokół SS7, phishing. Do tego koszt per wysyłka (~0.03-0.10 PLN/SMS) i opóźnienia dostawy.
Email OTP
Bezpieczeństwo: ⭐⭐ | Prostota: ⭐⭐⭐⭐
Kod lub magic link wysyłany na email. Podobne bezpieczeństwo jak SMS — zależy od tego czy skrzynka użytkownika jest bezpieczna. Darmowy, ale wolniejszy niż SMS.
TOTP (Google Authenticator, Authy) — polecany
Bezpieczeństwo: ⭐⭐⭐ | Prostota: ⭐⭐⭐
Aplikacja na telefonie generuje 6-cyfrowy kod co 30 sekund. Kod jest obliczany lokalnie na podstawie wspólnego sekretu — nie wymaga internetu ani SMS-ów.
Setup jednorazowy: użytkownik skanuje kod QR aplikacją Authenticator. Potem przy każdym logowaniu wpisuje aktualny kod z aplikacji.
Dlaczego polecamy TOTP:
- Wystarczające bezpieczeństwo dla 99% aplikacji SaaS
- Odporny na SIM swap i przejęcie maila (kod generowany lokalnie)
- Zero kosztów operacyjnych — open standard (RFC 6238), brak opłat per użycie
- Brak zależności zewnętrznych — nie płacisz za SMS-y, nie potrzebujesz własnej apki mobilnej
- Użytkownicy znają Google Authenticator / Authy
- Prosta implementacja — gem
rotpw Ruby, ~50 linii kodu - Naturalnie łączy się z backup codes jako metodą awaryjną
Wady: nadal podatny na phishing (użytkownik może wpisać kod na fałszywej stronie). Zmiana telefonu wymaga ponownej konfiguracji.
Push notification
Bezpieczeństwo: ⭐⭐⭐⭐ | Prostota: ⭐⭐⭐⭐⭐
Powiadomienie w aplikacji mobilnej — “Czy to Ty się logujesz? Tak/Nie”. Jedno stuknięcie zamiast przepisywania kodów. Najlepszy UX ze wszystkich metod.
Wymaga własnej aplikacji mobilnej, więc raczej dla dużych graczy (Duo, Microsoft Authenticator). Podatny na prompt bombing — atakujący spamuje powiadomieniami aż użytkownik kliknie “Tak” z frustracji.
WebAuthn / Passkeys (FIDO2) — polecany
Bezpieczeństwo: ⭐⭐⭐⭐⭐ | Prostota: ⭐⭐⭐⭐
Klucz kryptograficzny przechowywany w urządzeniu użytkownika. Uwierzytelnienie przez biometrię (odcisk palca, Face ID) lub PIN systemowy. Bez przepisywania kodów — przyłóż palec i gotowe.
Dlaczego polecamy Passkeys:
- Jedyna metoda w pełni odporna na phishing — klucz jest kryptograficznie powiązany z domeną, więc fałszywa strona nie dostanie odpowiedzi
- Lepszy UX niż TOTP — palec / Face ID zamiast przepisywania 6 cyfr
- Zero kosztów — standard W3C, wbudowany w przeglądarki (Chrome, Safari, Firefox) i systemy (Android, iOS, Windows Hello)
- Nie wymaga instalacji żadnej aplikacji
- Trend branżowy — Google, GitHub, Microsoft, Shopify już przeszły na passkeys
Wady: część użytkowników nie rozumie jeszcze konceptu (“co to passkey?”, “a jak zmienię komputer?”). Recovery przy utracie urządzenia wymaga przemyślanego flow.
Klucz sprzętowy (YubiKey, FIDO2)
Bezpieczeństwo: ⭐⭐⭐⭐⭐ | Prostota: ⭐⭐⭐
Fizyczny klucz USB/NFC — włóż i dotknij. Technologia ta sama co Passkeys (FIDO2), ale klucz jest osobnym urządzeniem, nie częścią telefonu/laptopa.
Najbezpieczniejsza opcja, ale wymaga kupienia klucza (~100-200 PLN) i noszenia go przy sobie. Głównie dla administratorów, kont uprzywilejowanych i firm z rygorystycznymi wymaganiami bezpieczeństwa.
Rekomendacja dla aplikacji SaaS
Etap 1: Passkeys / WebAuthn + backup codes
Passkeys to najlepsza metoda 2FA dostępna dziś — najwyższe bezpieczeństwo (odporne na phishing), świetny UX (palec / Face ID, zero kodów do przepisywania) i zero kosztów (standard wbudowany w przeglądarki). Backup codes jako metoda awaryjna przy utracie urządzenia.
Etap 2: TOTP jako alternatywa
Nie każdy użytkownik jest gotowy na passkeys. TOTP (Google Authenticator) to sprawdzona, znana metoda — dobra alternatywa dla tych, którzy wolą tradycyjne podejście z kodem z telefonu.
Etap 3: SMS jako recovery fallback
SMS nie powinien być metodą 2FA do codziennego logowania — jest za słaby. Ale ma sens jako ostatnia deska ratunku do odzyskiwania konta. Scenariusz: użytkownik stracił telefon (nie ma TOTP), nie ma backup codes, nowe urządzenie (nie ma passkey). SMS na zweryfikowany numer pozwala odzyskać dostęp.
Ważne: SMS jako recovery to świadomy kompromis między bezpieczeństwem a dostępnością. Lepsze to niż procedura “napisz do supportu i czekaj 3 dni”. Ale użytkownik powinien wiedzieć, że to opcja awaryjna, nie domyślna.
Czego unikać
SMS jako jedyna metoda 2FA to złudzenie bezpieczeństwa. Jeśli już — wyłącznie jako fallback do odzyskiwania konta, nigdy jako główna metoda.
Kluczowa różnica: phishing
To najważniejsze kryterium podziału metod 2FA:
- SMS, Email, TOTP, backup codes — podatne na phishing. Użytkownik może wpisać kod na fałszywej stronie, a atakujący użyje go na prawdziwej
- WebAuthn, Passkeys, klucze sprzętowe — odporne na phishing. Klucz kryptograficzny jest powiązany z domeną — fałszywa strona fizycznie nie może uzyskać odpowiedzi
To właśnie dlatego Passkeys/WebAuthn to przyszłość — rozwiązują fundamentalny problem, którego TOTP nie rozwiązuje.