Passkey nie jest „lepszym hasłem” i nie jest odciskiem palca. Jest poświadczeniem kryptograficznym: dla jednej usługi powstaje para kluczy. Prywatny służy do podpisywania i nie trafia do witryny; publiczny trafia do serwera i pozwala sprawdzić podpis. Przeglądarka spina tę rozmowę, ale zwykle nie jest właścicielem klucza.
Raport zakłada podstawową znajomość logowania do stron, ale nie kryptografii. Po lekturze powinieneś umieć odtworzyć mechanizm, wybrać rodzaj passkey, zarejestrować go w typowych środowiskach oraz nie pomylić nazwy produktu z poziomem bezpieczeństwa NIST.
Cztery role i jedna ważna granica
W typowym przepływie WebAuthn uczestniczą: usługa, klient i authenticator. „Klientem” jest zwykle przeglądarka z systemem operacyjnym. „Authenticatorem” może być Windows Hello, menedżer passkeys telefonu, Microsoft Authenticator albo fizyczny klucz FIDO2.
RP: skrypt + serwer
Skrypt usługi wywołuje WebAuthn. Jej serwer przechowuje rekord konta oraz:
- credential ID,
- klucz publiczny,
- politykę i dane ryzyka.
RP nie otrzymuje klucza prywatnego.
Przeglądarka + system
Sprawdza relację origin–RP ID, przekazuje challenge, pokazuje wybór dostawcy i zwraca odpowiedź stronie.
Nie udostępnia stronie klucza prywatnego.
Magazyn i podpis
Tworzy parę kluczy, wiąże credential z RP ID, wykonuje obecność lub lokalną weryfikację użytkownika i podpisuje.
Tu kontrolowany jest klucz prywatny.
Dostawca poświadczeń
Zarządza dostępnością credential i — jeśli to wariant synced — chronioną synchronizacją między urządzeniami.
Nie jest serwerem RP. Przy security key może nie występować jako osobna usługa.
Hasło: udowodnij, że znasz sekret
Wpisujesz sekret stronie. Serwer zwykle przechowuje jego bezpieczny weryfikator, ale fałszywa strona może nakłonić Cię do ujawnienia hasła i przekazać je dalej.
Passkey: udowodnij kontrolę nad kluczem
Nie wysyłasz prywatnego klucza. Authenticator tworzy świeży podpis dla właściwego RP i jednorazowego challenge; serwer sprawdza go publiczną częścią pary.
„Klucz prywatny nie opuszcza urządzenia” jest prawdą dla poświadczenia związanego z urządzeniem. W passkey synchronizowanym zaszyfrowana reprezentacja klucza może przejść przez usługę synchronizacji i trafić na inne urządzenie. Nadal nie trafia do witryny ani jej JavaScriptu. NIST Appendix B.2
Osiem pojęć, których nie warto sklejać
- WebAuthn
- Webowe API i protokół używania poświadczeń klucza publicznego. Może zastąpić hasło albo działać jako kolejny składnik — samo słowo WebAuthn nie gwarantuje „passwordless”.
- Passkey
- W WebAuthn Level 3: poświadczenie wykrywalne przez klienta (discoverable credential). Authenticator potrafi odnaleźć je dla RP ID bez listy credential IDs przesłanej przez serwer. W3C: discoverable credential
- Passwordless
- Logowanie bez hasła współdzielonego z usługą. Lokalny PIN, kod blokady urządzenia lub biometria mogą nadal odblokowywać użycie passkey; nie są przez to hasłem do witryny.
- Authenticator
- Komponent zarządzający poświadczeniem i wykonujący operację kryptograficzną. Może być platformowy (telefon, komputer, aplikacja) albo przenośny (security key).
- RP ID i origin
RP IDto domenowy zakres credential, np.example.com.originobejmuje schemat, host i port, np.https://login.example.com. Serwer sprawdza oba w odpowiednich miejscach.- Credential ID
- Nieprzezroczysty identyfikator rekordu poświadczenia. Pomaga odnaleźć klucz publiczny, ale sam nie jest sekretem ani dowodem logowania.
- UP / UV
- User Presence mówi „ktoś wykonał gest”, np. dotknął klucza. User Verification mówi „authenticator lokalnie zweryfikował osobę”, np. PIN-em lub biometrią. UP nie zastępuje UV.
- Attestation / assertion
- Attestation może opisać pochodzenie i właściwości authenticatora podczas rejestracji. Assertion to świeży, podpisany dowód używany przy logowaniu. Attestation nie potwierdza tożsamości naturalnej osoby.
W zwykłym WebAuthn odcisk lub twarz służą do lokalnego UV. Witryna otrzymuje podpisaną flagę, że weryfikacja zaszła — nie wzorzec odcisku ani obraz twarzy. NIST również nie uznaje biometrii za samodzielny authenticator. NIST §3.2.3
Co dokładnie dzieje się przy „Utwórz passkey”
Rejestracja dopisuje nowy publiczny klucz do istniejącego konta. Najbardziej ryzykowny moment nie polega na generowaniu pary, lecz na odpowiedzi na pytanie: kto ma prawo dodać temu kontu nowy authenticator? Dlatego usługa powinna wymagać świeżego, silnego uwierzytelnienia przed enrolmentem.
Rejestracja · create()
- RP wysyła challenge i opcje tworzenia.
- Authenticator potwierdza UP i — gdy wymaga tego polityka — wykonuje lokalne UV, po czym tworzy parę.
- Do RP wracają credential ID, klucz publiczny i dane rejestracyjne.
- RP weryfikuje całość i zapisuje nowy rekord. Zmiana stanu: powstaje credential po obu stronach.
Logowanie · get()
- RP wysyła świeży challenge i opcje żądania.
- Authenticator potwierdza UP i wymagane UV, po czym używa istniejącego klucza.
- Do RP wracają credential ID, kontekst i świeży podpis.
- RP sprawdza podpis publicznym kluczem i tworzy sesję. Zmiana stanu: credential zostaje ten sam; nowa jest sesja.
-
serwer RP Tworzy jednorazowy challenge
Serwer wiąże losowe wyzwanie z sesją, kontem, zamierzoną operacją, dozwolonym originem, RP ID i czasem wygaśnięcia. W3C zaleca co najmniej 16 bajtów entropii. W3C §13.4.3
-
skrypt RP Wywołuje
navigator.credentials.create()Opcje wskazują RP, nieprzezroczysty
user.id, dozwolone algorytmy oraz wymagania, np. credential wykrywalny iuserVerification: "required". -
przeglądarka / client Sprawdza zakres domeny
Przeglądarka nie pozwala dowolnej stronie zażądać credential dla cudzej domeny. Pokazuje systemowy wybór: lokalny authenticator, menedżer passkeys, telefon lub klucz sprzętowy.
-
authenticator Potwierdza UP/UV i generuje parę
Potwierdza obecność użytkownika. Jeśli polityka wymaga UV, lokalnie sprawdza PIN, blokadę urządzenia lub biometrię; w pokazanym dalej wariancie passwordless ustawiono
userVerification: "required". Tworzy nowy credential związany z RP ID. Klucz prywatny pozostaje pod jego kontrolą; publiczny wróci do RP. -
przeglądarka / client Buduje odpowiedź rejestracyjną
clientDataJSONniesie m.in. typwebauthn.create, challenge i faktyczny origin.attestationObjectniesie authenticator data, credential ID i publiczny klucz oraz — zależnie od polityki — attestation. -
serwer RP Weryfikuje, a dopiero potem zapisuje
Sprawdza challenge, typ, origin,
rpIdHash, flagi UP/UV, algorytm, strukturę i politykę attestation oraz unikalność credential ID. Po sukcesie zapisuje klucz publiczny i metadane. Pełna procedura: W3C §7.1.
Biometria nie „tworzy konta” i nie zostaje wysłana serwerowi. Autoryzuje lokalne użycie komponentu, który generuje klucz. Serwer ufa wynikowi tylko wtedy, gdy poprawnie zweryfikuje całą odpowiedź i swoją politykę enrolmentu.
Logowanie: świeży podpis, nie powtórka starego kodu
-
serwer RP Wysyła nowy challenge
W przepływie username-first może także wysłać listę credential IDs. Przy passkey wykrywalnym może pominąć
allowCredentials; wtedy authenticator pokaże konta pasujące do RP ID. -
skrypt RP Wywołuje
navigator.credentials.get()Przeglądarka przekazuje wyzwanie do właściwego authenticatora i pokazuje systemowy interfejs wyboru.
-
authenticator Znajduje credential i potwierdza UP/UV
Passkey jest wyszukiwany według RP ID. Authenticator potwierdza obecność; jeżeli polityka wymaga UV, użytkownik odblokowuje użycie lokalnym PIN-em lub biometrią. Przy
preferredodpowiedź może legalnie miećUV=0, więc serwer sprawdza faktyczną flagę, nie samo żądanie. -
authenticator Podpisuje kontekst
Podpis obejmuje authenticator data i skrót client data. W tych danych znajdują się m.in. hash RP ID, flagi UP/UV, challenge, origin i typ operacji.
-
serwer RP Odtwarza warunki i sprawdza podpis
Odnajduje zapisany publiczny klucz po credential ID, wiąże odpowiedź z właściwym kontem, porównuje challenge, origin,
rpIdHashi flagi, a następnie weryfikuje podpis. -
serwer RP Zużywa challenge i tworzy sesję
Sesja powstaje dopiero po pełnym sukcesie. Ten sam challenge nie może posłużyć ponownie. Pełna procedura: W3C §7.2.
credential ID wybiera rekord, ale dopiero poprawny podpis dowodzi kontroli nad prywatnym kluczem. Licznik podpisów może być sygnałem klonowania lub awarii, lecz przy passkeys wielourządzeniowych nie jest samodzielnym dowodem ataku.
Dlaczego passkey opiera się phishingowi
Odporność nie zależy od tego, czy użytkownik dostrzeże literówkę w domenie. Powstaje z technicznego związania credential i podpisu z właściwym verifierem.
example.com
Credential powstał dla tego RP ID. Authenticator może go odnaleźć i użyć, a prawdziwy serwer zna odpowiadający mu klucz publiczny.
examp1e.com
Fałszywa strona nie może zadeklarować cudzego RP ID. Może utworzyć lub użyć wyłącznie credential z własnego zakresu, którego podpis prawdziwy serwer odrzuci.
- Każdy RP otrzymuje osobną parę kluczy.
- Klient wymusza relację origin–RP ID.
- Authenticator wiąże credential z RP ID i podpisuje jego hash.
- Faktyczny origin i challenge trafiają do podpisywanego kontekstu.
- Serwer odrzuca nieoczekiwany origin, hash RP ID albo zużyty challenge.
NIST nazywa ten mechanizm verifier name binding. Kody OTP i odpowiedzi przepisywane ręcznie nie są według NIST phishing-resistant, ponieważ oszust może przechwycić lub przekazać kod do prawdziwego serwera w czasie rzeczywistym. NIST §3.2.5
Passkey nie naprawia słabego odzyskiwania konta, przejętej aktywnej sesji, malware działającego w prawdziwym originie, błędu w serwerowej walidacji ani sytuacji, w której napastnik nakłoni już zalogowaną osobę do dodania jego authenticatora. Chroniona jest konkretna ceremonia logowania — nie cały cykl życia konta.
„Gdzie jest klucz?” ma więcej niż dwie odpowiedzi
Public-key credential w WebAuthn może być wykrywalny lub niewykrywalny, ale passkey w terminologii WebAuthn Level 3 jest credentialem wykrywalnym. Pozostałe osie są niezależne: miejsce i mobilność klucza, rodzaj authenticatora oraz sposób użycia z innego urządzenia. W3C: passkey / discoverable credential
| Oś | Możliwe wartości | Co rozstrzyga | Czego nie rozstrzyga |
|---|---|---|---|
| Wykrywalność | Discoverable / non-discoverable | Discoverable credential można odnaleźć dla RP ID bez listy IDs; passkey należy właśnie do tej klasy | Czy klucz się synchronizuje i w jakim sprzęcie jest chroniony |
| Mobilność materiału klucza | Synced / device-bound | Czy provider może bezpiecznie udostępnić credential innym urządzeniom, czy pozostaje on na jednym | Czy authenticator jest wbudowany, czy przenośny jako sprzęt |
| Rodzaj authenticatora | Platform / roaming (cross-platform) | Czy authenticator jest częścią urządzenia, czy np. fizycznym security key przenoszonym między hostami | Samej synchronizacji; security key zwykle przechowuje device-bound credentials |
| Ścieżka użycia | Lokalna / hybrid cross-device | Czy ten sam host rozmawia z authenticatorem, czy pobliski telefon podpisuje dla komputera po przepływie QR | Miejsca zapisu; cross-device nie kopiuje credential na komputer |
W WebAuthn flagi BE (Backup Eligible) i BS (Backup State) rozróżniają możliwość oraz aktualny stan backupu. BE=1 nie dowodzi, że credential został już zsynchronizowany. W3C §6.1.3
Jak dodać passkey „w przeglądarce”
Passkey zwykle tworzy się z ustawień bezpieczeństwa konkretnej usługi, nie przez import prywatnego klucza w menu przeglądarki. Przeglądarka otwiera WebAuthn i pozwala wybrać właściwego providera. Jej ustawienia służą głównie do zarządzania tym, co provider już przechowuje.
Przepływ uniwersalny
- Zaloguj się do usługi dotychczasową metodą i otwórz Bezpieczeństwo / Metody logowania.
- Wybierz Utwórz passkey, Dodaj klucz dostępu albo funkcjonalny odpowiednik.
- W oknie przeglądarki lub systemu wybierz miejsce: menedżer synchronizowany, ten komputer/telefon, inne urządzenie albo security key.
- Potwierdź operację lokalną blokadą urządzenia: PIN-em, twarzą lub odciskiem.
- Nazwij credential po stronie usługi tak, by później rozpoznać urządzenie.
- Sprawdź, czy masz drugi niezależny authenticator albo świadomie zaprojektowane recovery.
Przykład: Chrome i Google Password Manager na Androidzie
- Na stronie obsługującej passkeys wybierz utworzenie klucza.
- W systemowym oknie wybierz Create / Utwórz i potwierdź blokadą ekranu.
- Credential zostanie zapisany w Google Password Manager i może synchronizować się na urządzenia zalogowane do tego samego konta Google.
- Zarządzaj nim w aplikacji Passwords albo w Chrome: Settings → Google Password Manager → Passkeys. Etykiety zależą od wersji.
Google wymaga na Androidzie wersji 9 lub nowszej i blokady ekranu. Google Chrome Help
Przykład: iPhone i iCloud Keychain
- W ustawieniach konta na obsługiwanej stronie wybierz utworzenie passkey i naciśnij Continue.
- Potwierdź Face ID, Touch ID lub kodem urządzenia.
- Credential pojawi się w aplikacji Passwords i zsynchronizuje przez iCloud Keychain, jeśli ta funkcja i 2FA Apple Account są włączone.
- Usuniesz go w Passwords → Passkeys → konto → Edit → Delete Passkey; pamiętaj też o usunięciu rejestracji po stronie usługi, jeśli nie propaguje się automatycznie.
Przykład: prywatne konto Microsoft
- Otwórz account.live.com/proofs/manage i wybierz Add a new way to sign in or verify.
- Wybierz Face, Fingerprint, PIN, or Security Key, a następnie kontynuuj tworzenie.
- W systemowym oknie wybierz Microsoft Password Manager lub innego providera, lokalny Windows Hello, telefon albo fizyczny security key.
- Potwierdź lokalnie i sprawdź nową metodę na stronie zabezpieczeń konta.
To przepływ konta konsumenckiego. Nie należy utożsamiać go z dedykowanym Passkey in Microsoft Authenticator dla kont Entra work/school. Microsoft Support: create and save a passkey
Przykład: fizyczny security key
- Rozpocznij dodawanie passkey w witrynie i wybierz Inne opcje / Security key.
- Podłącz klucz USB, zbliż NFC albo użyj odpowiedniego transportu.
- Podaj PIN klucza, jeśli jest wymagany, i dotknij sensora.
- Zarejestruj drugi zapasowy klucz i trzymaj go w innym bezpiecznym miejscu.
Przykład: QR z telefonu na komputer
- Na komputerze wybierz Use a passkey from another device / Telefon lub tablet.
- Zeskanuj QR zwykłym aparatem telefonu i potwierdź bliskość, Bluetooth oraz połączenie sieciowe, gdy platforma o to poprosi.
- Odblokuj passkey na telefonie biometrią lub PIN-em.
Rezultat: telefon podpisał logowanie; passkey nie został przeniesiony na komputer. Nie skanuj niespodziewanego QR otrzymanego w wiadomości — inicjuj ten przepływ samodzielnie z ekranu logowania.
Microsoft Authenticator: passkey to nie starsze phone sign-in
Passkey w Authenticator
Dla kont work or school w Microsoft Entra ID jest device-bound credential FIDO2/WebAuthn zapisanym na konkretnym telefonie. Nie synchronizuje się na drugi telefon.
Passwordless phone sign-in
Starszy mechanizm powiadomienia i number matching po wpisaniu nazwy użytkownika. Może być „bez hasła”, ale nie tworzy passkey i nie jest ceremonią WebAuthn.
Dokumentacja dedykowanego providera Passkey in Microsoft Authenticator dotyczy Entra, czyli kont organizacyjnych. Dla prywatnego konta Microsoft oficjalny kreator może użyć Windows Hello, security key, telefonu lub dostawcy systemowego; samo skanowanie QR aplikacją Authenticator nie dowodzi, że klucz zapisano właśnie w niej.
Warunek zerowy: administrator Entra
- W Entra admin center otwiera Entra ID → Security → Authentication methods → Policies → Passkey (FIDO2).
- Włącza self-service i przypisuje profil do wybranej grupy, określając typy passkeys, attestation oraz ewentualne ograniczenia AAGUID.
- Prowadzi pilotaż przed objęciem wszystkich; organizacja może świadomie ograniczyć miejsca zapisu.
Microsoft Learn: włączenie Passkey (FIDO2)
Rejestracja bezpośrednio w Authenticator
- Zainstaluj Microsoft Authenticator, wybierz Work or school account i dodaj konto organizacyjne.
- Otwórz konto w aplikacji i wybierz Create a passkey, a następnie ukończ wymagane MFA.
- Jeśli aplikacja tego wymaga, najpierw ustaw blokadę ekranu urządzenia.
- Włącz Authenticator jako systemowego providera passkeys:
- iOS 18: Settings → General → AutoFill & Passwords;
- iOS 17: Settings → Passwords → Password Options;
- Android: systemowe Passwords & accounts → Additional providers → Authenticator.
- Wróć do Authenticator, dokończ kreator i wybierz Done.
- Sprawdź nową metodę na mysignins.microsoft.com/security-info i zarejestruj alternatywę na wypadek utraty telefonu.
Alternatywnie: Security info → Add sign-in method → Passkey in Microsoft Authenticator. Przy wymuszonym attestation Microsoft wymaga bezpośredniej rejestracji w aplikacji; przepływ cross-device nie dostarczy wtedy oczekiwanego attested passkey. Aktualne wymagania to iOS 17+ lub Android 14+; na Androidzie 14 Microsoft może zalecić przejście do Androida 15, jeśli system nie pozwala wybrać providera. Microsoft Learn: rejestracja w Authenticator
Usunięcie aplikacji, wyczyszczenie telefonu lub jego utrata może odebrać dostęp do tego credential. Sam passkey nie „odtworzy się” na nowym urządzeniu. Drugi authenticator, sprzętowy klucz albo kontrolowana procedura recovery nie są dodatkiem — są częścią projektu.
Microsoft Entra: co kończy się 1 lutego 2027
Dokładna zmiana: Microsoft wycofuje własną telekomunikacyjną dostawę SMS i połączeń głosowych w Microsoft Entra ID. Nie jest to uniwersalny zakaz SMS, nie dotyczy automatycznie prywatnych kont wszystkich dostawców i nie oznacza, że organizacja nigdy nie może kupić obsługi SMS od zewnętrznego operatora. Microsoft Learn: harmonogram wycofania
Obecny harmonogram dotyczy tenantów public-cloud Microsoft Entra ID oraz natywnego SMS/voice także w SSPR. B2B i goście wewnętrzni są w zakresie, choć ich obsługa passkeys ma własny harmonogram. Azure AD B2C nie jest objęty tym ogłoszeniem, Entra External ID ma dostać osobny komunikat, a chmury suwerenne przejdą zmianę później. Microsoft: FAQ wycofania
Cztery mechanizmy, które brzmią jak „migracja”, ale robią coś innego
System-preferred
Podpowiada najlepszą już zarejestrowaną metodę. Nie tworzy passkey, nie usuwa SMS i nie zastępuje polityk dostępu.
Auto-enablement
Od 1 września dynamiczna migracja obejmuje użytkowników SMS/voice polityką passkey i profilem dopuszczającym typy passkeys. Nie tworzy jeszcze credential.
Registration Campaign
Nie włącza metody ani profilu. Nakłania użytkowników już objętych polityką passkey do samodzielnej rejestracji. Numer telefonu nie zostaje „przekonwertowany” na parę kluczy.
Retirement
Po terminie Microsoft przestaje dostarczać natywny kanał. To zdarzenie operacyjne niezależne od tego, czy użytkownik skutecznie ukończył rejestrację.
Microsoft: system-preferred authentication
-
Passkeys stają się domyślnym kierunkiem
Użytkownicy włączeni dla SMS lub voice są automatycznie obejmowani metodą passkey i kampanią rejestracji. Po ukończeniu MFA otrzymują zachętę do utworzenia passkey. Domyślnie zachętę można jeszcze odraczać.
-
Informacje o operatorach zewnętrznych
Microsoft zapowiada publikację obsługiwanych dostawców telekomunikacyjnych w Security Store dla organizacji z rzeczywistą potrzebą SMS/voice.
-
Konfiguracja własnego providera
Ma ruszyć ścieżka Choose Your Own Telephony Provider. Organizacja przejmuje umowę, koszty, dostępność, konfigurację i monitoring dostawy.
-
Microsoft-provided SMS i voice przestają działać
Nie ma opt-outu od końcowego egzekwowania. Bez zewnętrznego providera użytkownik, którego jedyną metodą było SMS/voice, dostanie blokujący obowiązek rejestracji passkey przed dalszym logowaniem.
Co to oznacza dla użytkownika
- Telefon z samą możliwością odbierania SMS przestaje wystarczać w domyślnym modelu Entra.
- Jeśli Microsoft-managed SMS/voice jest jedyną metodą MFA i organizacja nie wybiera własnego operatora, przed lutym trzeba dodać metodę zastępczą; w przeciwnym razie logowanie wymusi blokującą rejestrację passkey.
- Istniejący push lub TOTP może zachować ciągłość dostępu, a własny provider może zachować telefoniczne MFA. Te warianty nie realizują jednak rekomendowanego celu phishing-resistant.
- Po terminie wymuszona rejestracja może zablokować pracę, jeśli urządzenie jest niezgodne, współdzielone, offline albo polityka organizacji wyklucza dostępnego providera.
- Passkey w Microsoft Authenticator wymaga smartfona z blokadą ekranu i zgodnej wersji systemu; nie jest dobrym jedynym rozwiązaniem dla każdej populacji.
Co to oznacza dla administratora
- Trzeba znaleźć nie tylko użytkowników enabled dla SMS/voice, lecz przede wszystkim tych, którzy faktycznie polegają wyłącznie na tych kanałach.
- Najpierw należy włączyć właściwe profile passkey, sprawdzić platformy, attestation, Conditional Access i recovery, a dopiero potem wygaszać stare metody.
- Frontline, urządzenia współdzielone, użytkownicy bez nowoczesnego telefonu, dostępność i procedury awaryjne wymagają osobnych ścieżek — często sprzętowych kluczy lub metod organizacyjnych.
- Jeżeli SMS pozostaje wymogiem regulacyjnym lub operacyjnym, potrzebny jest obsługiwany operator, funkcja routingu w Azure, pilotaż i nowy podział odpowiedzialności.
- Zewnętrzny provider może podtrzymać SMS/voice jako MFA, ale nie zachowuje SMS sign-in jako podstawowej metody logowania. Microsoft FAQ o providerach
- Natywne SMS/voice znikają również z SSPR; własny provider może je tam obsłużyć, ale passkey sam w sobie nie jest automatycznie projektem resetowania hasła.
| Obszar | Korzyść przejścia | Koszt lub ryzyko przejściowe |
|---|---|---|
| Bezpieczeństwo | Odporność na phishing, SIM swap i replay typowy dla kodów | Słabe recovery lub błędny enrolment mogą przenieść atak w inne miejsce |
| Doświadczenie | Brak przepisywania kodu; szybkie lokalne potwierdzenie | Nowy model jest niejasny bez dobrego komunikatu i wsparcia pierwszej rejestracji |
| Urządzenia | Możliwość wyboru synced, device-bound, Windows Hello lub security key | Nie każdy ma prywatny, zgodny smartfon; shared devices wymagają innego projektu |
| Operacje | Mniej zależności od sieci telekomunikacyjnej i dostarczenia kodu | Help desk musi umieć obsłużyć utratę urządzenia, wymianę i usuwanie credential |
Bezpieczna migracja ma kolejność: inwentaryzacja → zgodność urządzeń i polityk → pilotaż → rejestracja co najmniej jednej nowej metody i recovery → test rzeczywistego logowania → dopiero potem ograniczanie SMS. Inaczej poprawa kryptografii może zamienić się w falę blokad kont.
Minimalny ślad WebAuthn w JavaScript
Poniższe fragmenty są ilustracyjne. Pokazują granicę przeglądarka–serwer; nie implementują parserów CBOR/COSE, kryptografii, pełnej polityki attestation, ochrony CSRF, rate limitingu ani bezpiecznego recovery.
Rejestracja
// 1. Serwer generuje i zapamiętuje challenge oraz zwraca opcje.
const optionsJSON = await fetch("/webauthn/register/options", {
method: "POST",
credentials: "same-origin"
}).then(requireOK).then(r => r.json());
// 2. Pola base64url muszą stać się bajtami ArrayBuffer.
const publicKey = decodeCreationOptions(optionsJSON);
// 3. To wywołanie otwiera systemowy wybór authenticatora.
const credential = await navigator.credentials.create({ publicKey });
// 4. Odpowiedź wraca do serwera; prywatnego klucza w niej nie ma.
await postJSON("/webauthn/register/finish", encodeCredential(credential));
Przykładowy rdzeń opcji dla passkey wykrywalnego i UV-required:
{
challenge: "<losowe bajty jako base64url>",
rp: { id: "example.com", name: "Example" },
user: {
id: "<nieprzezroczysty userHandle>",
name: "anna@example.com",
displayName: "Anna"
},
pubKeyCredParams: [
{ type: "public-key", alg: -7 },
{ type: "public-key", alg: -257 }
],
authenticatorSelection: {
residentKey: "required",
userVerification: "required"
},
attestation: "none"
}
Logowanie
const optionsJSON = await fetch("/webauthn/authenticate/options", {
method: "POST",
credentials: "same-origin"
}).then(requireOK).then(r => r.json());
const publicKey = decodeRequestOptions(optionsJSON);
const credential = await navigator.credentials.get({ publicKey });
await postJSON(
"/webauthn/authenticate/finish",
encodeCredential(credential)
);
Puste lub pominięte allowCredentials pozwala discoverable passkey wskazać konto przez userHandle. W przepływie username-first serwer może przesłać credential IDs związane z podaną nazwą użytkownika.
Serwerowa lista warunków — nie opcjonalne „szczegóły”
| Rejestracja | Logowanie |
|---|---|
| Jednorazowy challenge związany z sesją i kontem | Jednorazowy challenge związany z tą ceremonią |
type = webauthn.create, oczekiwany origin i rpIdHash |
type = webauthn.get, oczekiwany origin i rpIdHash |
| UP/UV zgodne z polityką, algorytm, struktura attestation | UP/UV zgodne z polityką oraz powiązanie credential z kontem |
| Unikalność credential ID; zapis publicznego klucza i metadanych | Podpis publicznym kluczem; BE/BS i licznik jako wejścia do polityki ryzyka |
Biblioteka powinna obsłużyć binarne formaty i kryptografię, ale nadal musisz poprawnie skonfigurować expected origin, RP ID, UV, challenge, attestation, backup flags i autoryzację dodawania nowego credential. Biblioteka nie naprawi słabego procesu enrolmentu ani recovery.
Jak czytać passkeys przez NIST SP 800-63B-4
NIST ocenia cały proces i właściwości authenticatora, nie nazwę produktu. Dwa rozwiązania nazwane „passkey” mogą mieć inne UV, eksportowalność, ochronę sprzętową, attestation, sync fabric i recovery — a więc inny możliwy poziom AAL.
| Poziom | Rdzeń wymagania | Co może znaczyć dla passkey | Czego nie wolno założyć |
|---|---|---|---|
| AAL1 | Dopuszczalny jeden czynnik; phishing resistance niewymagane | Credential kryptograficzny z samym UP może działać jako single-factor | Że sam napis „passkey” czyni proces wieloskładnikowym |
| AAL2 | Dwa różne czynniki; verifier musi oferować opcję phishing-resistant | Passkey z potwierdzonym UV może działać jako multi-factor cryptographic authenticator; synced passkey jest dopuszczalny, jeśli cały system spełnia wymagania | Że userVerification: "preferred" gwarantuje UV albo że każda metoda AAL2 musi być phishing-resistant |
| AAL3 | Nieeksportowalny, sprzętowo chroniony klucz; phishing i replay resistance; intent; wymagania kryptograficzne i FIPS | Odpowiedni device-bound authenticator może być kandydatem | Synced passkeys są wykluczone; device-bound również nie daje AAL3 automatycznie |
NIST §2: Authentication Assurance Levels
Ogólna zasada AAL2 wymaga zaoferowania opcji phishing-resistant, ale federalni pracownicy, kontraktorzy i partnerzy korzystający z federalnych systemów mają obowiązek używać uwierzytelniania odpornego na phishing. Organizacje spoza administracji federalnej mogą przyjmować NIST jako wzorzec, lecz powinny jawnie określić własny zakres i podstawę wymagań.
Dlaczego UV zmienia klasyfikację
Posiadanie urządzenia z kluczem to „coś, co masz”. Lokalny PIN lub biometria aktywująca klucz reprezentuje odpowiednio „coś, co wiesz” albo „coś, czym jesteś”. NIST każe inspekować podpisaną flagę UV: bez niej synchronizowalny authenticator należy traktować jako single-factor. NIST Appendix B.3
Synced passkey: wygodniejszy, ale najwyżej AAL2
Synchronizacja wymaga eksportowalności chronionej reprezentacji klucza. NIST dopuszcza ją do AAL2, stawiając wymagania m.in. szyfrowaniu, ochronie konta sync fabric i lokalnemu wykonywaniu operacji kluczem. AAL3 wymaga klucza nieeksportowalnego, więc synced passkey odpada z definicji tego poziomu.
Attestation: dowód o authenticatorze, nie o człowieku
Attestation może pomóc organizacji rozpoznać model i cechy authenticatora. NIST zaleca wykorzystywanie tej możliwości w federal enterprise, lecz mówi, że jej brak nie powinien blokować synchronizowanych authenticatorów w szerokich usługach publicznych. Wymaganie attestation bez uzasadnienia może wypchnąć użytkowników do słabszych fallbacków. NIST Appendix B.3: attestation
Recovery jest częścią assurance
Silny podpis nie pomoże, jeśli napastnik może telefonicznie przekonać help desk do podpięcia nowej metody. NIST opisuje recovery jako osobny, kontrolowany proces z powiadomieniami i wymaganiami zależnymi od poziomu konta. NIST §4.2: Account Recovery
Nie pytaj „czy passkey jest AAL2?”. Pytaj: czy ten konkretny credential wykonał UV, czy jest eksportowalny, jak chroniony jest klucz i synchronizacja, co sprawdził verifier oraz jak działają enrolment, odwołanie i recovery?
Jak przejść bezpiecznie i nie stracić dostępu
Preferowany przez Microsoft kierunek jest warstwowy: dla typowych użytkowników pierwszym wyborem ma być synced passkey, a dla administratorów i środowisk regulowanych — przede wszystkim sprzętowy klucz FIDO2; passkey w Authenticator i inne metody phishing-resistant uzupełniają tę mapę. Microsoft zaleca co najmniej dwa poświadczenia: jedno przenośne oraz jedno lokalne na regularnie używanym urządzeniu. Microsoft: wdrożenie phishing-resistant passwordless
Wygoda na wielu urządzeniach
Synced passkey u zaufanego providera. Chroń konto synchronizacji, poznaj jego recovery i dodaj drugą metodę dla kluczowych usług.
Kontrola organizacyjna
Profil zgodny z urządzeniami i ryzykiem: Authenticator device-bound, Entra passkey/Windows Hello, synced passkey lub sprzętowy FIDO2. Pilotaż przed skalą.
Nieeksportowalny klucz
Sprzętowo chroniony, device-bound authenticator spełniający pełną politykę. Osobny zapas i recovery o porównywalnej sile.
Checklista użytkownika
- Wiem, u którego providera passkey jest zapisany i czy się synchronizuje.
- Mam co najmniej dwie realne drogi odzyskania dostępu do ważnego konta.
- Drugi authenticator nie jest przechowywany razem z pierwszym w miejscu narażonym na tę samą utratę.
- Konto providera synchronizacji ma silne MFA i aktualne recovery.
- Po utracie urządzenia usuwam credential po stronie usługi, sprawdzam listę urządzeń i unieważniam podejrzane sesje.
- Nie zatwierdzam niespodziewanego tworzenia passkey ani QR z wiadomości.
Checklista administratora
- Inwentaryzuję rzeczywiste użycie metod, populacje urządzeń oraz scenariusze niedostępności — nie tylko stan polityki.
- Rozdzielam profil dla użytkowników mobilnych, współdzielonych stanowisk, administratorów i kont awaryjnych.
- Wymagam UV tam, gdzie passkey zastępuje dwa czynniki, i sprawdzam flagę po stronie verifiera.
- Chronię dodawanie i usuwanie authenticatorów świeżym uwierzytelnieniem oraz powiadomieniem poza bieżącą sesją.
- Testuję utratę telefonu, wymianę urządzenia, brak Bluetooth/sieci, wygaśnięcie sesji i odzyskanie konta.
- Mierzę udane rejestracje i logowania, fallback do słabszych metod, zgłoszenia help desk oraz konta pozostające tylko na SMS.
- Wycofuję słabszą metodę dopiero po potwierdzonym działaniu docelowej i procedury awaryjnej.
Bootstrap, recovery i konta awaryjne
Temporary Access Pass (TAP) może po pozytywnej weryfikacji osoby bezpiecznie uruchomić pierwszą rejestrację albo odtworzenie dostępu. Powinien być krótko ważny i kontrolowany; przy recovery po utracie lub kompromitacji należy następnie usunąć utracony credential. Internal guest może otrzymać TAP w danym tenancie. External guest nie może dostać TAP w tenancie zasobu — może użyć TAP wydanego przez tenant macierzysty tylko przy spełnieniu jego wymagań oraz właściwym zaufaniu MFA w cross-tenant access. Microsoft: Temporary Access Pass
Przed egzekwowaniem nowych zasad organizacja powinna mieć co najmniej dwa niezależne, cloud-only konta emergency access w domenie .onmicrosoft.com, chronione metodą inną niż codzienni administratorzy — np. FIDO2 lub CBA — przechowywane oddzielnie, monitorowane przy każdym użyciu i regularnie testowane. Wyłączenie ich z blokujących zasad musi być wąskie i jawne; to bezpiecznik przed błędem konfiguracji, nie konto do codziennej pracy. Microsoft: emergency access accounts
Przejście z SMS wyłącznie na powiadomienie Authenticator lub kod TOTP może zapobiec przerwaniu logowania po 1 lutego 2027 r., lecz nadal nie daje technicznego związania z RP ID właściwego dla WebAuthn. Jeżeli celem jest phishing-resistant MFA, docelową metodą powinien być passkey/FIDO2, Windows Hello for Business albo inna metoda spełniająca tę właściwość.
Dla wygody wybierz passkey synchronizowany. Dla zarządzanego urządzenia wybierz device-bound. Dla najwyższego assurance wybierz nieeksportowalny authenticator spełniający pełną politykę. W każdym wariancie zaprojektuj drugi dostęp, zanim pierwszy zniknie.
Źródła pierwotne i zakres
Mechanizm oparto na normatywnej specyfikacji W3C WebAuthn Level 3; wymagania assurance na NIST SP 800-63B-4; instrukcje produktów i harmonogram na bieżącej dokumentacji ich dostawców. Nazwy ekranów mogą zmieniać się szybciej niż mechanizm protokołu.
- W3C — Web Authentication: An API for accessing Public Key Credentials, Level 3, Recommendation z 25 sierpnia 2026 r.; terminologia, ceremonie, walidacja i bezpieczeństwo.
- NIST SP 800-63B-4 — Authentication Assurance Levels; wymagania AAL1–AAL3.
- NIST SP 800-63B-4 — Authenticator and Verifier Requirements; kryptograficzne authenticators, biometria i phishing resistance.
- NIST SP 800-63B-4 — Appendix B: Syncable Authenticators; UV, BE/BS, attestation, sync fabric i granica AAL2.
- NIST SP 800-63B-4 — Account Recovery; wymagania cyklu życia i powiadomień.
- Microsoft Learn — Enable passkeys (FIDO2) in Microsoft Entra ID; profile, zakres, attestation i polityki.
- Microsoft Learn — Register passkeys in Microsoft Authenticator; wymagania i kroki dla iOS/Android.
- Microsoft Learn — Microsoft Authenticator authentication method; rozróżnienie passkey oraz passwordless phone sign-in.
- Microsoft Learn — Passkeys by default and retirement of Microsoft-provided SMS and voice authentication, aktualizacja 10 sierpnia 2026 r.; daty i skutki.
- Microsoft Learn — FAQ wycofania SMS i voice; zakres public cloud, SSPR, B2B, B2C/External ID i chmur suwerennych.
- Microsoft Learn — Telephony providers FAQ; zakres zewnętrznego providera i brak wsparcia dla primary SMS sign-in.
- Microsoft Learn — System-preferred authentication; wybór istniejącej metody, nie migracja poświadczenia.
- Microsoft Learn — Deploy phishing-resistant passwordless authentication; dobór metod, pilotaż i docelowe authentication strength.
- Microsoft Learn — Temporary Access Pass; bootstrap i odzyskiwanie dostępu.
- Microsoft Learn — Manage emergency access accounts; konta awaryjne i ich testowanie.
- Microsoft Learn — Register a passkey with a FIDO2 security key; przepływ sprzętowego klucza w Entra.
- Microsoft Support — Create and save a passkey; konta konsumenckie Microsoft.
- Google Chrome Help — Manage passkeys in Chrome; Google Password Manager i cross-device.
- Apple — Use passkeys on iPhone; iCloud Keychain, Face ID/Touch ID i zarządzanie.
- FIDO Alliance — Passkeys; terminologia synced i device-bound. Mechanizm bezpieczeństwa w raporcie oparto jednak na W3C, a nie opisie promocyjnym.
To materiał edukacyjny, nie certyfikacja konkretnego wdrożenia ani gwarancja zgodności z NIST. Rzeczywisty poziom zależy od konfiguracji authenticatora, verifiera, polityk, kryptografii, urządzenia, attestation, synchronizacji i recovery.