- Edited
As far as I understand, they use public-key cryptography, the same as something like PGP or any proper end-to-end encryption protocol.
So basically, they're SSH keys? Except most current implementations don't give you access to the unencrypted private key, from what I understand.
I must admit I plugged the FIDO Alliance article into Kagi's Discuss Document tool after writing these three posts, and it affirmed what you've written. You can blame my lack of reading comprehension or the FIDO Alliance's obtuse method of communication, but either way, your explanation is much better.
One thing Kagi's tool emphasized was passkeys not using shared secrets like TOTP. I think that's a great improvement; public-private keys is a much more breach-resistant method of authentication. As you point out, even if the server is breached, they will only get the public key, not the private key. This also completely defeats credential stuffing attacks. A game-changing improvement over current methods of authentication for most people.
However...hardware security keys supporting FIDO2 U2F offer the exact same benefit and they have wider adoption currently and are more convenient (in my humble opinion). Of course, it won't stay that way. Very few users are going to buy a hardware security key, but modern society demands you have an Android/iOS phone today.
The weak link is the physical device, usually your phone, that stores the private keys and you need to have in your possession to get into your accounts. If someone has access to your phone and unlocks it, because you have a easy to hack pin or biometrics that aren't as hard to defeat as people think, then they have access to your accounts.
Same thing as password managers, which most people should be using. Most people protect their password managers behind biometrics, too, and their 2FA app is usually completely unprotected. This is no worse for most people. As you mentioned, physical attacks are rare anyway.
One thing that's super confusing about the way passkeys have been promoted is the claim that they represent the end of passwords. That's true on the back end. The mode of authentication bettween client and server no longer uses passwords, it uses public-key cryptography which is fundamentally different and just is not a password in any way shape or form. But the end user will still have to unlock their phone or a password manager, to allow it to autheticate your login to a website and that is still a lot like using passwords.
The fact that a lot of coverage focuses on how to use passkeys (using your biometrics to unlock them) and not on how they work exacerbates this confusion.
Also, what do you do if you want to login to an account, on someone else's computer, and you don't have your phone? You now do not have your private keys, so I guess it's impossible to login? That's actually much less convenient than a password, whatever its downsides are. It's all kind of predicated on the idea that people have their phones with them all the time.
I very much agree with this notion, but also have to concede that most people do have their phones with them all the time. The more realistic risk is their phone runs out of battery. But as mentioned previously, Bitwarden and other password managers plan to adopt passkeys. Keepass might do this too. In my opinion, password managers offer the only passkey implementation that should be adopted. Bitwarden can be used anywhere, including the web. You aren't locked into any 'ecosystem'.
I don't remember most of my passwords either, depending on my password manager for that, so the situation is no worse for me. Unfortunately, the only convenient method of logging in on another person's computer is probably going to be carrying your phone around in both scenarios. Or remembering your 40-character randomly generated password. Or if it's an account you see yourself doing that with, not using passkeys.
Edit: Another scenario where the passkey implementation is weaker than traditional passwords is you unlocking your phone in public, then having it stolen. In this scenario, the password manager implementation of passkeys is much better. If you protect your passwords with your 128-bit entropy master password and not biometrics, you're good.
Thank you very much for that explanation. I know I would have struggled for some time to understand the passkey standard properly without it.
So, all in all, my opinion is:
- Passkey standard = good
- Most passkey implementations = bad because they only work within an 'ecosystem'. Most implementations are also proprietary.
- Most people will use the bad passkey implementations unless they know better. Most people will not know better until they experience first-hand why the passkey implementations are bad. Like when I realized Google Authenticator was a bad 2FA implementation because it doesn't give you the secrets, and then had to re-create 15 2FA secrets.