Klíč 0: veřejný klíč peer zařízení
Nekomprimované bajty veřejného klíče X9.62 (33 bajtů pro P-256). Telefon to použije k navázání sdíleného ECDH tajemství s notebookem.
Standardy · FIDO CTAP 2.2 hybrid (QR kód passkey)
Pouze v případě, že JSTE právě spustili přihlášení pomocí passkey na zařízení zobrazujícím QR kód. Pokud kdokoli jiný zahájil přihlášení, naskenováním předáte svou passkey útočníkovi. Tato stránka vysvětluje protokol, útočný model a jak rozeznat bezpečné od nebezpečného.
Přístupový klíč (passkey) je přihlašovací údaj – pár veřejného a soukromého klíče – vázaný na jedno z vašich zařízení. Pokud jste si zaregistrovali přístupový klíč pro example.com v telefonu, pouze váš telefon může podepsat přihlašovací výzvu pro example.com.
To funguje dobře, když se přihlašujete NA svém telefonu. Co se ale stane, když se přihlašujete na notebooku, kde passkey nemáte? Máte tři možnosti:
Možnost 3 definuje FIDO CTAP 2.2 "hybrid". QR kód je spouštěčem — nese veřejný klíč peer zařízení, nonce pro tunelování, doménu tunelového serveru a časové razítko. Telefon tato data přečte, naváže Bluetooth spojení nebo tunelové spojení a propůjčí passkey notebooku pro přihlášení.
URI vypadá takto:
FIDO:/0123456789012345678901234567890123456789...
Desetinné číslice jsou kódování base10 CBOR mapy. Po dekódování base10 + CBOR parsování je obsah klíčované mapy:
Nekomprimované bajty veřejného klíče X9.62 (33 bajtů pro P-256). Telefon to použije k navázání sdíleného ECDH tajemství s notebookem.
10 bajtů náhodných dat. Identifikuje tento konkrétní QR kód; BLE reklama vysílaná notebookem nese hash tohoto tajemství, takže telefon ví, ke které relaci se připojit.
0 = make-credential (registrace nové passkey), 1 = get-assertion (přihlášení pomocí existující passkey), 2 = get-assertion s discoverable credential.
HTTPS hostitel, který zprostředkovává tunel mezi oběma zařízeními, když přímé BLE není dostupné (např. přes NAT). Zpravidla jde o server provozovaný dodavatelem, například cable.ua5v.com (Google) nebo cable.auth.com (Apple/MS).
Sekundy od epochy Unix, kdy byl QR kód vygenerován. Slouží k ochraně proti přehráváním — passkey klienti odmítají přihlášení přes zastaralé QR kódy (obvykle více než 3 minuty staré).
Booleovský příznak. Říká, zda notebook chce, aby se telefon aktivně zapojil do pasivního vyhledávání BLE (tzv. state-assisted flow pro rychlejší párování).
Protokol je kryptograficky solidní. Kontrola Bluetooth proximity je reálná a funguje, pokud obě zařízení jsou fyzicky blízko sebe. Útok nespočívá v prolomení šifrování.
Útok probíhá prostřednictvím sociálního inženýrství při zahájení. Útočník spustí přihlašovací seanci na webu, pro který má vaše přihlašovací údaje (nebo chce), jeho prohlížeč zobrazí FIDO QR kód a pak vás přiměje QR naskenovat.
Pokud naskenujete, váš telefon přenese váš podpis passkey zpět na útočníkův prohlížeč. Přihlásí se jako vy. Vy dostanete prázdnou obrazovku nebo zprávu o chybě.
Kontrola blízkosti nepomáhá – útočník je fyzicky přítomen. Obsah QR kódu nepomáhá – je kryptograficky platný. Přihlašovací cíl nepomáhá – jde o správný web, pro který máte přístupový klíč. Jedinou ochranou je rozpoznání situace: nikdy byste neměli skenovat FIDO QR kód, který jste sami nevygenerovali kliknutím na „Přihlásit se“ na vlastním zařízení.
Když do našeho skeneru vložíte FIDO QR kód, verdikt zobrazí:
cable.ua5v.com, tunelový server Apple atd.)?Třída hrozby je vždy podezřelá — ne proto, že by protokol byl vadný, ale proto, že každý platný FIDO QR, který jste zahájili VY, vám na to řekne kontext aplikace v prohlížeči, nikoli skenování jiným zařízením. Legitimní případ použití pro skenování FIDO QR cizím nástrojem prakticky neexistuje.
Bezpečné: sedíte u notebooku, otevřeli jste stránku přihlášení do banky nebo e-mailu, kliknuli na "Přihlásit se pomocí passkey" a notebook zobrazil QR kód. Vy jste zahájili přihlášení. Naskenování telefonem toto přihlášení dokončí.
Nebezpečné: kdokoli jiný inicioval přihlášení. Patří sem: někdo, kdo vám zavolal a požádal vás, abyste naskenovali QR pro "ověření účtu"; QR zobrazený na veřejném místě nebo v e-mailu; QR sdílený přes chat nebo video hovor.
Pokud si nejste jisti, zda QR pochází z přihlášení, KTERÉ jste zahájili VY, přihlášení zrušte. Znovu se přihlaste a tentokrát pozorně sledujte, kdy se QR kód zobrazí.
Přetáhněte obrázek nebo vložte FIDO: URI. Verdikt zobrazí operaci, tunelový server, časové razítko, délku veřejného klíče a délku QR tajemství.