The account recovery issue is a big one when you don't have any other credentials than WebAuthn credentials, as you touch on. I believe the next version of WebAuthn is working on standardizing this, which might help with the ecosystem issues you raise: https://www.w3.org/TR/webauthn-3/#sctn-usecase-new-device-re...
> a low-friction means to strongly re-authenticate on client devices having platform authenticators.
IE: People in big tech think everyone on the planet should have at least 2 modern devices and sign in to their big tech cloud accounts on all of their devices.
I'd also be willing to bet there's no thought given to de-authorizing a key, so when my parents/siblings/niblings recycle their 5+ year old devices without wiping them first they better hope there aren't any known security flaws for those devices.
After all the idea of passwordless authentication is to not even have any password as a fallback. If you do have a password based fallback, then obviously you can use it to sign in to register the new device, but since WebAuthn is far more secure than a password, the preference is to not have such a fallback. And of course, an account recovery flow based on emails or SMS and possibly "security questions" are almost worse than a password.
The QR code is far more convenient than needing to buy a fido2 security dongle, especially one that supports USB-A (for most desktops/laptops), USB-C (for android/iPad/other laptops), and lightning (for iPhone), so you can register it via any already registered device, and then use it on any other device for initial sign-in.
Really? I always thought it was a single key. How does that work without having devices run out of storage?
On registration, the server is handed a site/user-specific key pair _encrypted_ with the master key of the authenticator device (your usb key or your phone, etc), together with the plain-text site/user-specific public key.
On authentication, the server sends down that encrypted blurb, which is temporarily decrypted and then used to sign a challenge the server sent.
So basically the server is used as storage. There are exceptions to this (e.g. resident/discoverable credentials on hardware keys)
Each passkey is a modest amount of data, and I don't see a person having so many passkeys that the TPM gets full.
The problem though is that WebAuthn is most convenient when using the platform authenticator (so you don't need to plug in a U2F style dongle). But conceptually the platform authenticator is tied to a single device. (Because the private keys are supposed to be stored within a TPM or secure element of some form). But that means if you lose/damage the device you are locked out.
Obviously one option is to have a lockout flow that asks security questions, or sends an email or something, but obviously those are not nearly as secure as private key stored on a device you need to physically possess. Plus generally you need to authenticate to the device too, with biometrics, or pin, or something, before WebAuthn flow can proceed, making these flows inherently two factor (something you have, plus either who you are for biometrics, or something you know for pins).
The original solution for this was to always register a roaming key (like the U2F style dongle), as a backup, and as a method to initially sign in on a new device (aftwe which you could enroll the platform authenticator).
But nobody does that, so instead most platforms are also storing a copy of these passkeys in their associated clouds, meaning that if you lose your device, you can get a new one of the same type, sign in it the Microsoft/Google/Apple account, and you can now sign into sites that use WebAuthn as sole authentication again.
But this only helps when moving between devices in the same ecosystem, what if you only have an account on your iPhone, and want to sign in on a Windows PC? The new idea is to allow this via scanning a QR code, and verifying that the two devices are physically near each other (verified via bluetooth low energy). (So this will work for laptops, but not all desktops have bluetooth). Obviously once you sign in like this once, you could then add the new devices platform authenticator as a sign in method, so you don't need to do this every time.
This cross-device QR sign-in approach is being standardized via FIDO, although as far as I can tell there is no published specification right now. Draft versions of FIDO specifications are not publicly available, with the exception of the WebAuthn spec, since that is developed jointly with W3C, under the W3C process. But most of this would be on the CTAP side of FIDO2, which is a pure FIDO developed specification, so the only way to see the current draft specification would be to become a FIDO member.