FIDO2 vs WebAuthn vs Passkeys: What Each Name Means
Three names, one stack. FIDO2 is the umbrella, WebAuthn is the browser API, CTAP is the protocol to the authenticator, and a passkey is a credential type. What each actually refers to.
People ask which of these to use as though they were alternatives. They are layers of one stack plus a name for the credential that comes out of it.
Scope: WebAuthn Explained owns the API and the ceremony in detail, Passkeys Explained owns adoption and user experience, and Best Hardware Security Keys owns the devices. This page owns the terminology, because the terminology is what the question is actually about.
The stack
| Name | What it is | Who defines it | You interact with it by |
|---|---|---|---|
| FIDO2 | The umbrella specification set | FIDO Alliance and W3C | Saying "we support FIDO2" |
| WebAuthn | The browser API for creating and using credentials | W3C | Calling it from your web application |
| CTAP2 | The protocol between client and external authenticator | FIDO Alliance | Nothing, the platform handles it |
| Passkey | A discoverable credential created through the above | FIDO Alliance branding | Registering and signing in |
Read down that table and the confusion resolves. A developer implements WebAuthn. The browser uses CTAP2 to reach a security key, or an internal platform interface to reach the phone's secure element. Both sit inside FIDO2. What the user ends up with is a passkey.
What WebAuthn does
Two ceremonies.
Registration. The site asks for a new credential. The authenticator generates a key pair, keeps the private key, and returns the public key with a credential ID. The site stores those against the account.
Authentication. The site sends a challenge. The authenticator signs it with the private key, after whatever user verification is configured, and returns the signature. The site verifies it against the stored public key.
The security property that matters is in the details of what gets signed: the assertion is bound to the origin the credential was registered to. The browser supplies that origin, not the page. A phishing site on a lookalike domain cannot get the authenticator to produce anything it can use, because as far as the authenticator is concerned no credential exists for that origin.
That is why every credential in this family is phishing-resistant, and it is a structural property rather than a matter of user vigilance.
What CTAP is for
WebAuthn stops at the browser. Something has to carry the request to a security key over USB, NFC or Bluetooth, and that is CTAP.
For most people building things, CTAP is invisible: browsers and operating systems implement it. It matters when you are choosing hardware, because CTAP2 support is what makes a key a FIDO2 key rather than a legacy U2F device, and it is what enables discoverable credentials and PIN-based user verification.
What makes a passkey a passkey
The technical distinction is discoverability.
In the original model, credentials were non-discoverable. The server sent a list of credential IDs, the authenticator matched one and signed. That works and it requires the user to identify themselves first, because the server has to know which IDs to send.
A discoverable credential stores enough on the authenticator, including a user handle, that it can be offered without the server naming it. That is what allows the sign-in flow with no username: the authenticator presents the accounts it holds for that site and the user picks one.
Passkey is the name the industry settled on for that credential, and it was chosen for users rather than for engineers. It is not a new protocol.
Synced versus device-bound
This is the distinction with real operational consequences, and it is where most decisions actually land.
| Synced passkey | Device-bound passkey | |
|---|---|---|
| Stored in | Platform keychain or password manager | The authenticator's secure element |
| Survives losing the device | Yes, restores to a new one | No |
| Can be exported | Within the provider's ecosystem | No |
| Recovery depends on | The provider account, and its own security | Your backup authenticator |
| Attestable | Limited | Yes, you can require specific hardware |
| Right for | Ordinary users, consumer accounts | Administrators, regulated and high-assurance accounts |
The trade is legible. Synced credentials make the credential as strong as the account that syncs it, and they solve the problem that stops people adopting anything: what happens when the phone goes in the river. Device-bound credentials give you a real guarantee about where the private key is and cannot be recovered when the hardware is gone.
For a high-value account, that lack of recovery is the feature. For a consumer, it is the reason they never enrol.
What to do
If you are implementing:
- Implement WebAuthn with a maintained library. Do not write the verification yourself.
- Support discoverable credentials so passkeys work as users expect.
- Allow several credentials per account, and prompt for a second at registration.
- Keep a recovery path until adoption is high, and make that path at least as strong as the credential it recovers, since it becomes the weakest link.
- If you have administrative or regulated users, support attestation so you can require device-bound authenticators for them.
If you are choosing for yourself:
- Synced passkeys for everyday accounts, in whichever ecosystem you already trust with your credentials.
- A hardware key with device-bound credentials for email, your password manager, financial accounts and anything administrative.
- Two hardware keys, one kept elsewhere. The failure people actually experience is losing their only authenticator.
The verdict
There is no choice to make between FIDO2, WebAuthn and passkeys, because they are not the same kind of thing. FIDO2 is the family, WebAuthn is what you implement, CTAP is how the hardware is reached, and a passkey is what the user ends up holding.
The decision that does exist is synced against device-bound, and it turns on one question: what happens when the device is lost. Answer that per account and the rest of the terminology stops mattering.
Related guides
Sources & further reading
- Web Authentication: An API for accessing Public Key Credentials (W3C)
- Client to Authenticator Protocol (CTAP) (FIDO Alliance)
- Passkeys overview (FIDO Alliance)
- NIST SP 800-63B: Digital Identity Guidelines, Authentication and Lifecycle Management (NIST)
- passkeys.dev (FIDO Alliance and W3C community)