Key 0 — peer public key
Uncompressed X9.62 public-key bytes (33 bytes for P-256). The phone uses this to establish the encrypted tunnel.
Standards · FIDO CTAP 2.2 hybrid (passkey QR)
Only if YOU just started a passkey sign-in on the device showing the QR. If anyone else generated the QR — a stranger, a "helpdesk" agent, a tech-support call — scanning it on your phone signs them into your account, not you. The protocol's open standard (FIDO CTAP 2.2 hybrid) is solid; the threat is social engineering around who pressed the "Sign in with a passkey" button first.
A passkey is a credential — a public/private key pair — bound to one of your devices. If you registered a passkey for example.com on your phone, only your phone can sign the login challenge for example.com.
That works fine when you're signing in ON your phone. But what happens when you're signing in on a laptop that doesn't have a passkey for that site? You can:
Option 3 is what FIDO CTAP 2.2 "hybrid" defines. The QR is the bootstrap — it carries enough information for your phone to discover the laptop over Bluetooth Low Energy, establish a one-time secure tunnel, and proxy the WebAuthn ceremony.
The URI looks like:
FIDO:/0123456789012345678901234567890123456789...
The decimal digits are a base10 encoding of a CBOR map. After base10 decode + CBOR parse, the map has integer keys:
Uncompressed X9.62 public-key bytes (33 bytes for P-256). The phone uses this to establish the encrypted tunnel.
10 bytes of random data. Identifies this specific QR; the BLE advertisement broadcasts a hash of it so the phone can find the right laptop.
0 = make-credential (registering a new passkey), 1 = get-assertion (signing in), 2 = discoverable-credential.
The HTTPS host that proxies the tunnel between the two devices when direct BLE isn't reachable (e.g., across NAT). Usually a vendor-operated server like cable.ua5v.com (Google) or cable.auth.com (Apple/MS).
Seconds-since-epoch when the QR was generated. Used for replay protection — the phone refuses to honor a QR older than a few minutes.
Boolean. Indicates whether the laptop wants the phone to participate in passive state-keeping (mostly relevant for credential-enumeration flows).
The protocol is cryptographically sound. The Bluetooth proximity check is real and limits the attack to whoever is physically near you. So how does this go wrong?
Through social engineering on the initiation. The attacker starts a passkey sign-in to YOUR account on THEIR laptop. Their laptop shows a FIDO QR. They get that QR in front of you somehow:
If you scan, your phone proxies your passkey signature back to the attacker's laptop's browser. The site you have a passkey for thinks you signed in. The attacker is now logged into your account.
Note the proximity check doesn't help — the attacker is physically present. The QR contents don't help — they're cryptographically valid. The login destination doesn't help — it's the correct site you have a passkey for. The only thing that helps is recognizing the situation: you should never be scanning a FIDO QR that you didn't generate yourself by clicking "Sign in" on your own device.
When you drop a FIDO QR into our scanner, the verdict shows:
cable.ua5v.com, Apple's tunnel server, etc.)?The threat class is always suspicious — not because the protocol is broken but because the safety call is contextual and the scanner can't know who pressed "Sign in." The verdict's disclosure tells you exactly that: "scanning completes a sign-in someone STARTED ON ANOTHER DEVICE. If you did not just initiate a login yourself, refuse."
Safe: you sat down at your laptop, opened your bank or email site, clicked "Sign in with a passkey", and your laptop showed the QR. You pick up your phone, scan the QR, approve the proximity prompt. Done.
Not safe: anyone other than you initiated the sign-in. This includes anyone over the phone, anyone on a remote-support call, anyone who emailed you a QR, anyone who showed you a "QR to verify your identity," and any QR in a place that isn't your own freshly-displayed device.
If you're not sure whether a QR is from a sign-in YOU started, cancel the sign-in on the original device (close the browser tab), then restart from scratch on the device you intended to use. Real FIDO QRs are valid for only ~10 minutes — restarting flushes any in-flight session and makes the threat impossible.
Drop the image or paste the FIDO: URI. Verdict shows operation, tunnel server, timestamp, and a hard warning to refuse unless you started the sign-in yourself.