2FA přes SMS vs TOTP: bezpečnost a UX
Kdy stačí SMS, kdy potřebujete TOTP nebo hardware klíč. Reálná bezpečnostní rizika, NIST doporučení a co to znamená pro vaši aplikaci.
V roce 2017 vydalo americké NIST kontroverzní guideline: "SMS jako 2FA se nedoporučuje". Od té doby se v komunitě bezpečnosti diskutuje, jestli je SMS pro autentizaci dost. Realita je nuancovaná. Tento článek vysvětluje kdy SMS stačí a kdy ne.
Tři druhy 2FA
- Něco, co víte — heslo
- Něco, co máte — telefon, hardware klíč
- Něco, čím jste — biometrie (otisk, obličej)
SMS, TOTP a hardware klíče jsou všechny kategorie 2 (máte telefon nebo zařízení). Liší se v tom, jak se ověřuje, že máte to zařízení.
| Metoda | Jak funguje |
|---|---|
| SMS OTP | Server pošle 6-místný kód SMSkou |
| TOTP | Aplikace (Authy, Google Auth, 1Password) generuje kód každých 30 s |
| Push notifikace | Aplikace přijme push, uživatel ťukne "Schválit" |
| Hardware klíč | YubiKey, Titan — fyzický klíč v USB nebo NFC |
Bezpečnostní slabiny SMS
SIM swap
Útočník přesvědčí mobilního operátora, že je vy a chce přenést SIM kartu na nový telefon. Operátor číslo přesune. Útočník přijímá vaše SMS = bypassuje 2FA.
Prevalence v ČR: vzácné, ale stoupající. Operátoři mají proces přenosu zpřísněný (osobní návštěva s OP), ale insider attacks na zaměstnance se objevují.
Reálný případ 2024: Útočník v ČR získal SIM oběti přes podplaceného technika T-Mobile (vyřízeno přes "ztrátu" SIM), pak ukradl 800k Kč z bankovního účtu. Banka soud prohrála, klient peníze dostal zpět.
SS7 attack
SS7 je signalizační protokol z 80. let, který telefonní operátoři používají pro routing. Má strukturální slabiny — kdo má přístup do SS7 (= operátor v nějaké zemi), může přesměrovat SMS z jiných operátorů. Útok stoji ~$500-2000 na darknetu.
Prevalence v ČR: velmi vzácné, ale teoreticky možné. Cílí typicky na high-value targets (CEO, politici, novináři).
Phishing OTP
Falešná stránka simuluje login. Vy zadáte heslo + SMS OTP. Útočník v reálném čase přihlašuje s vašimi credentials.
Prevalence: velmi častá. Bankovní phishing v ČR je týdenní záležitost.
Malware na telefonu
Vir na Androidu čte všechny příchozí SMS. Banking trojany typu Cerberus, Anubis to dělají systematicky.
Prevalence: roste s každým rokem. iOS výrazně bezpečnější, Android náchylný.
Bezpečnost TOTP
TOTP je generován lokálně na telefonu. Útočník musí mít:
- Fyzicky telefon a
- Odemčený telefon a
- Přístup k authenticator aplikaci
Žádné odposlechy přes síť, žádný SIM swap nepomůže. Bezpečnější než SMS.
Slabiny TOTP:
- Ztráta telefonu = problém. Bez backup kódů jste odříznutí.
- Phishing TOTP funguje stejně jako SMS — uživatel zadá kód do falešné stránky
- Malware může číst obrazovku TOTP aplikace
Co říká NIST 2024
NIST Special Publication 800-63B (2024 revize) říká:
"SMS-based authentication is NOT prohibited but should be evaluated for risk. For applications handling sensitive financial or health data, prefer TOTP, push notification, or hardware token."
Tedy: SMS NENÍ zakázané, je třeba ho vážit s rizikem aplikace.
Praktická doporučení
Použijte SMS 2FA, když:
- Aplikace je běžná SaaS (CRM, e-shop admin, web hosting)
- Hodnota účtu je < 100 000 Kč typicky
- Uživatelé jsou smíšení tech-savvy (TOTP by je odradil)
- Compliance neříká jinak
Příklady: TopSMS dashboard, většina B2B SaaS, většina e-shopů
Použijte TOTP, když:
- Aplikace má vyšší privilegia (admin, server access)
- Pracujete s citlivými daty (zdravotní, finanční, právní)
- Uživatelé jsou technicky zdatní (zvládnou nastavit aplikaci)
- Máte MFA strategy sjednocenou
Příklady: AWS, GitHub, internal admin paneluy, finanční apky
Použijte hardware key (FIDO2), když:
- High-value uživatelé (admini, CEO, finance)
- Compliance vyžaduje (PCI-DSS Level 1, bankovní)
- Aplikace má kritickou infrastrukturu
Příklady: root admin AWS, banking, kryptové burzy
Best practices pro SMS 2FA
Pokud SMS 2FA implementujete:
- OTP s expirací 5-10 minut — kratší = bezpečnější (ale UX pain)
- Rate limiting — max 3 OTP requesty per uživatel/15 min
- Backup kódy — uživatel může 8-10 jednoraz. kódů vytisknout
- Bind OTP k IP/session — kód vygenerovaný pro session X nelze použít pro session Y
- Notifikace každého použití — push/email "Přihlášení z X v Y"
- Žádné OTP přes URL parameters — POST request only
- Krátký OTP — 6 cifer (10^6 = 1M kombinací, s rate limitem dost)
TopSMS pro 2FA implementaci
V TopSMS máme všechno potřebné:
- OTP endpoint — generujeme kód, posíláme přes přímé routování s nejnižší latencí (typicky 1-3 sekundy do telefonu)
- Webhook delivery reporty — víte, že OTP skutečně dorazila
- Auto-retry při failure — pokud první neproide, automaticky druhý pokus
- TOTP backup (na naší straně dashboard) — pro admin přístup máme SMS + backup kódy
Pokud staví aplikaci s 2FA, REST API dokumentace má kompletní příklad OTP flow.
V příštím článku: 5 konkrétních use cases, kdy SMS šetří hodiny v call centru.