FIDO2
FIDO2 to otwarty standard uwierzytelniania opracowany przez FIDO Alliance, umożliwiający bezhasłowe logowanie przy użyciu kluczy kryptograficznych, biometrii lub fizycznych kluczy bezpieczeństwa. Jest następcą standardów U2F i UAF.
Co to jest FIDO2?
Definicja FIDO2
FIDO2 (Fast Identity Online 2) to otwarty standard uwierzytelniania opracowany przez FIDO Alliance we współpracy z W3C. Umożliwia bezhasłowe, odporne na phishing uwierzytelnianie przy użyciu kryptografii klucza publicznego, biometrii lub fizycznych kluczy bezpieczeństwa.
Komponenty FIDO2
WebAuthn (Web Authentication API)
Standard W3C do uwierzytelniania w przeglądarkach:
- API JavaScript dla stron internetowych
- Obsługa przez wszystkie główne przeglądarki
- Komunikacja z authenticatorami
CTAP (Client to Authenticator Protocol)
Protokół komunikacji między urządzeniem a authenticatorem:
- CTAP1 - kompatybilność wsteczna z U2F
- CTAP2 - pełna funkcjonalność FIDO2
Jak działa FIDO2?
Proces rejestracji
1. Użytkownik wybiera "Zarejestruj klucz bezpieczeństwa"
2. Serwer wysyła challenge (losowe dane)
3. Authenticator generuje parę kluczy (publiczny + prywatny)
4. Klucz prywatny pozostaje na urządzeniu
5. Klucz publiczny jest wysyłany do serwera
6. Serwer zapisuje klucz publiczny dla użytkownika
Proces logowania
1. Użytkownik podaje nazwę użytkownika
2. Serwer wysyła challenge
3. Authenticator podpisuje challenge kluczem prywatnym
4. Podpis jest weryfikowany kluczem publicznym na serwerze
5. Użytkownik jest zalogowany
Typy authenticatorów
Roaming Authenticators (zewnętrzne)
Fizyczne klucze bezpieczeństwa:
| Producent | Model | Cechy |
|---|---|---|
| Yubico | YubiKey 5 | USB-A/C, NFC, biometria |
| Titan | USB-C, NFC, Bluetooth | |
| Feitian | ePass | USB, NFC |
| SoloKeys | Solo V2 | Open source |
Platform Authenticators (wbudowane)
Authenticatory zintegrowane z urządzeniem:
- Windows Hello - biometria, PIN
- Touch ID / Face ID - Apple devices
- Android Biometrics - fingerprint, face
- Passkeys - synchronizowane między urządzeniami
Passkeys - ewolucja FIDO2
Co to są Passkeys?
Passkeys to implementacja FIDO2 z synchronizacją:
- Przechowywane w chmurze (iCloud, Google)
- Synchronizowane między urządzeniami użytkownika
- Backup i recovery
- Pełna kompatybilność z FIDO2
Passkeys vs tradycyjne klucze FIDO2
| Aspekt | Klucze FIDO2 | Passkeys |
|---|---|---|
| Przechowywanie | Fizyczne urządzenie | Chmura + urządzenie |
| Synchronizacja | Brak | Automatyczna |
| Backup | Brak (celowo) | Tak |
| Przenośność | Wymaga klucza | Każde urządzenie |
| Bezpieczeństwo | Bardzo wysokie | Wysokie |
Bezpieczeństwo FIDO2
Odporność na ataki
Phishing:
- Origin binding - klucz działa tylko na zarejestrowanej domenie
- Atakujący nie może przechwycić credentials
Man-in-the-Middle:
- Kryptograficzna weryfikacja serwera
- Challenge-response uniemożliwia replay
Credential stuffing:
- Unikalne klucze dla każdego serwisu
- Brak współdzielonych sekretów
Brute force:
- Klucze kryptograficzne (nie hasła)
- Ograniczenia prób (lockout)
Model bezpieczeństwa
Klucz prywatny nigdy nie opuszcza authenticatora
↓
Serwer przechowuje tylko klucz publiczny
↓
Nawet przy wycieku bazy - brak zagrożenia
FIDO2 vs inne metody
FIDO2 vs hasła
| Aspekt | Hasła | FIDO2 |
|---|---|---|
| Phishing | Podatne | Odporne |
| Reuse | Częsty problem | Niemożliwy |
| Brute force | Możliwy | Niemożliwy |
| Wygoda | Słaba | Bardzo dobra |
| Wycieki | Duże ryzyko | Brak ryzyka |
FIDO2 vs SMS/TOTP
| Aspekt | SMS/TOTP | FIDO2 |
|---|---|---|
| Phishing | Podatne (real-time) | Odporne |
| SIM swap | Podatne (SMS) | Odporne |
| Wygoda | Średnia | Dobra |
| Koszty | SMS ma koszty | Jednorazowy zakup |
Implementacja FIDO2
Wsparcie przeglądarek
- Chrome 67+
- Firefox 60+
- Safari 13+
- Edge 18+
Platformy
- Windows 10/11 (Windows Hello)
- macOS Big Sur+ (Touch ID)
- iOS 14+ / Android 7+
Przykład implementacji (JavaScript)
Rejestracja:
const credential = await navigator.credentials.create({
publicKey: {
challenge: serverChallenge,
rp: { name: "Example Corp" },
user: {
id: userId,
name: "user@example.com",
displayName: "User"
},
pubKeyCredParams: [
{ type: "public-key", alg: -7 }, // ES256
{ type: "public-key", alg: -257 } // RS256
],
authenticatorSelection: {
userVerification: "preferred"
});
Logowanie:
const assertion = await navigator.credentials.get({
publicKey: {
challenge: serverChallenge,
allowCredentials: [{
type: "public-key",
id: credentialId
}]
});
Przypadki użycia
Enterprise
- Logowanie do stacji roboczych
- VPN i dostęp zdalny
- Aplikacje wewnętrzne
- Zgodność z regulacjami (PCI DSS, HIPAA)
Consumer
- Logowanie do serwisów (Google, Microsoft, GitHub)
- Bankowość online
- E-commerce
- Media społecznościowe
Wysokie bezpieczeństwo
- Infrastruktura krytyczna
- Systemy finansowe
- Administracja publiczna
- Healthcare
Wyzwania i ograniczenia
Wyzwania
- Adoption - wymaga wsparcia serwisów
- Recovery - co gdy zgubisz klucz?
- Koszt - fizyczne klucze kosztują
- Edukacja - użytkownicy przyzwyczajeni do haseł
Rozwiązania
- Backup authenticator - drugi klucz zapasowy
- Recovery codes - jednorazowe kody
- Passkeys - synchronizacja w chmurze
- Stopniowe wdrażanie - MFA przed passwordless
Przyszłość uwierzytelniania
Trendy
- Passkeys jako domyślna metoda
- Eliminacja haseł
- Biometria + FIDO2
- Integracja z identity providers
Standardy i regulacje
- NIST 800-63-4 - rekomenduje FIDO2
- PSD2/SCA - spełnia wymagania silnego uwierzytelniania
- Zero Trust - FIDO2 jako fundament
FIDO2 reprezentuje przyszłość uwierzytelniania, oferując znacznie wyższe bezpieczeństwo niż hasła przy jednoczesnej poprawie wygody użytkownika.