Passkeys: přihlášení bez hesla

Jak passkey nahrazuje heslo dvojicí klíčů, proč ho nejde vylákat na falešné stránce a co z toho vidí M-ID.

  • 7 min čtení
  • kvíz: 10 z 13 otázek
  • certifikát na 24 měsíců

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.