Téma navazuje na přihlášení přes M-ID: tam aplikace posílá uživatele na https://id.melichar.dev a zpátky dostane jen potvrzení, kdo se přihlásil. Tady jde o to, jak se uživatel prokáže samotnému M-ID. Vedle hesla to umí passkey: přihlašovací údaj podle standardů WebAuthn a FIDO2, který žádné heslo nemá.
Dvojice klíčů místo hesla
Heslo je sdílené tajemství. Zná ho uživatel i server (aspoň v podobě otisku) a kdo ho opíše, může se přihlásit odkudkoli. Passkey stojí na kryptografii veřejného klíče. Při registraci vytvoří zařízení uživatele (telefon, počítač nebo bezpečnostní klíč) novou dvojici klíčů jen pro jeden web:
- soukromý klíč zůstává v zařízení, nebo ve správci hesel, který ho šifrovaně synchronizuje; server ho nikdy nedostane;
- veřejný klíč si uloží server k účtu spolu s identifikátorem passkey.
Na serveru tedy není nic, co by po úniku databáze šlo použít k přihlášení: z veřejného klíče se soukromý odvodit nedá.
Přihlášení je podpis výzvy
Při každém přihlášení pošle server náhodnou výzvu (challenge). Zařízení ji podepíše soukromým klíčem a server podpis ověří uloženým veřejným klíčem. Výzva je pokaždé jiná, takže zachycený podpis nejde použít podruhé.
Než zařízení podepíše, ověří uživatele samo: otiskem prstu, obličejem nebo PINem zařízení. Tomu se říká ověření uživatele (user verification). Biometrie přitom zařízení neopouští: server se dozví jen to, že ověření proběhlo, nikdy otisk prstu ani PIN.
Vázaný na doménu, proto odolný proti phishingu
Každý passkey patří k jednomu identifikátoru webu (RP ID, z anglického relying party), u M-ID je to id.melichar.dev. Prohlížeč dovolí passkey použít jen na stránce, jejíž doména k tomuto identifikátoru patří, a doménu do podepsaných dat přidá sám. Falešná stránka na podobně vypadající adrese proto nedostane od prohlížeče vůbec nic, i když ji uživatel přehlédne. U hesla rozhoduje o adrese člověk, u passkey prohlížeč.
Kde passkey žije
- Synchronizovaný passkey uloží správce hesel platformy (třeba iCloud Klíčenka, Správce hesel Google nebo samostatný správce hesel) a přenese ho šifrovaně na další zařízení téhož účtu. Ztráta telefonu pak neznamená ztrátu přístupu.
- Passkey vázaný na zařízení nikdy neopustí jeden kus hardwaru, typicky bezpečnostní klíč připojený přes USB nebo NFC.
- Na cizím počítači lze použít passkey z telefonu: prohlížeč ukáže QR kód, telefon ho naskenuje a přihlášení potvrdí přes Bluetooth, které ověří, že je telefon opravdu nablízku.
Passkey, který si zařízení pamatuje i s účtem, se nazývá zjistitelný (discoverable credential, dříve resident key). S ním se uživatel přihlásí bez psaní e-mailu: prohlížeč sám nabídne účty, ke kterým má pro danou doménu passkey.
Počítadlo podpisů
Autentizátor může ke každému podpisu přidat počítadlo, které roste s každým použitím. Server si poslední hodnotu ukládá; kdyby přišla menší nebo stejná, než jakou už viděl, mohl by jít o naklonovaný autentizátor. Synchronizované passkeys počítadlo často neposílají (hlásí nulu), protože stejný klíč žije na více zařízeních zároveň.
Atestace
Při registraci může zařízení přiložit atestaci: podepsané tvrzení výrobce, o jaký typ autentizátoru jde. Hodí se tam, kde organizace povoluje jen určité bezpečnostní klíče. Běžná služba pro veřejnost ji nepotřebuje a nežádá ji: dostane jen veřejný klíč.
Passkey v M-ID
M-ID nabízí passkey vedle hesla. Registrace i přihlášení běží jen na id.melichar.dev, takže aplikace rodiny melichar.dev passkey nikdy neuvidí; dostanou stejné tokeny jako po přihlášení heslem. Při registraci M-ID preferuje zjistitelný passkey a ověření uživatele (nevynucuje je, když je zařízení neumí), atestaci nežádá a ukládá si počítadlo podpisů, aby poznalo naklonovaný autentizátor.
Shrnutí
- Passkey je dvojice klíčů pro jeden web; soukromý klíč server nikdy nedostane.
- Přihlášení je podpis náhodné výzvy po místním ověření uživatele; biometrie zařízení neopouští.
- Prohlížeč použije passkey jen na doméně, ke které patří, proto ho nejde vylákat na falešné stránce.
- Synchronizovaný passkey přežije ztrátu telefonu, bezpečnostní klíč drží passkey v jednom kusu hardwaru.
- Únik databáze s veřejnými klíči útočníkovi k přihlášení nepomůže.