FIDO/WebAuthn - Passwordless Authentication Standards
About 2 min read
FIDO (Fast IDentity Online) and WebAuthn are international standards for achieving authentication that does not rely on passwords. By combining the technical specifications developed by the FIDO Alliance with the WebAuthn API recommended as a web standard by the W3C, authentication based on public-key cryptography can be used from browsers and applications. Resistance to phishing is built into its design, and because no password is entrusted to the server, it reduces the paths by which a password leak turns into damage.
The Founding of the FIDO Alliance and the Evolution of the Standards
The FIDO Alliance was formed in July 2012 by PayPal, Lenovo, Nok Nok Labs, Validity, Infineon, and Agnitio, with its public launch following in February 2013. The Alliance states that it was formed to address the lack of interoperability among strong authentication technologies and the burden users face in creating and remembering multiple usernames and passwords. On December 9, 2014, the final versions of two specifications were published as FIDO 1.0. UAF (Universal Authentication Framework) covers passwordless login using biometrics and similar methods, while U2F (Universal 2nd Factor) covers two-factor authentication with an authenticator (security key) connected over USB or NFC.
Work then advanced on FIDO2, which combines the W3C's WebAuthn API with the FIDO Alliance's CTAP (Client to Authenticator Protocol), and WebAuthn became a W3C Recommendation - an official web standard - on March 4, 2019. WebAuthn is the API specification on the browser side, while CTAP is the communication protocol with the authenticator (security keys and biometric devices). By combining these two, it became possible to use hardware authenticators directly from a web browser. And since 2022, the mechanism of cloud-syncing FIDO2 credentials as passkeys has been implemented in the major operating systems and credential managers, so it can be used even by people who do not own a dedicated physical key.
The Authentication Flow Based on Public-Key Cryptography
FIDO/WebAuthn authentication operates on a challenge-response scheme. In conventional password authentication, a "secret string" is sent to the server, whereas with FIDO what goes to the server is not the private key itself but a signature over the challenge. The baseline design keeps the private key inside the authenticator, and in forms that sync to several devices, such as passkeys, it is synced in encrypted form according to the credential manager's implementation.
In this scheme, what the server stores is the public key and identifiers for the credential, not the authentication secret itself. Even if the server is compromised, deriving the private key from the public key cannot be computed in any practical amount of time by currently known methods, so a data breach does not by itself lead to the misuse of credentials.
How Phishing Resistance Works - Origin Verification
The biggest reason FIDO/WebAuthn is resistant to phishing is that origin (domain) verification is built into authentication. The browser records the origin that issued the authentication request in clientData, and the authenticator signs a value that includes a hash of that data together with a hash of the RP ID (the domain of the service). Because the server verifies that the origin it receives matches the one it expects, even if an attacker prompts the user for authentication on a fake site (e.g., examp1e.com), credentials registered for the legitimate site (example.com) cannot simply be reused there. Even if the user is deceived into accessing the fake site, authentication does not succeed, and the room for phishing to work narrows considerably. If a fallback to another method such as a password remains available, however, that path can still be targeted. This is also an important perspective when considering the challenges of migrating to passkeys.
The Relationship with Passkeys
A passkey is one implementation form of FIDO2/WebAuthn. Technically it is the same public-key-cryptography-based authentication, but a passkey differs from conventional FIDO2 in that credentials can be synced to multiple devices via the cloud. Because conventional FIDO2 security keys are tied to a physical device, recovery upon loss was a challenge. Synced passkeys address this by letting the same passkey be used on several devices through credential managers such as iCloud Keychain and Google Password Manager. On the other hand, the scope of syncing is set by each credential manager provider, and entrusting key storage to that provider remains a difference from a physical key. Combined with biometric authentication, you can sign in with the same gesture used to unlock the device.
Support Status and Practical Considerations
The major browsers - Chrome, Safari, Firefox, and Edge - all support the WebAuthn API (the finer details of what is supported differ by version and OS, so check each browser's documentation before implementing). At the OS level, Windows Hello, Touch ID / Face ID on macOS / iOS, and Android biometric authentication function as FIDO2 authenticators. In enterprise deployments, some configurations use hardware security keys such as YubiKey as a means of multi-factor authentication.
As a practical consideration, deploying WebAuthn also requires server-side support. You need to implement logic for generating challenges, storing public keys, and verifying signatures; libraries that handle these steps (such as SimpleWebAuthn and py_webauthn) are publicly available and can be used instead of writing the verification code yourself. In addition, having a basic knowledge of encryption, especially understanding how public-key cryptography works, is helpful when troubleshooting. Grasping the risks of biometric authentication and the basics of two-factor authentication as well will give you a complete picture of authentication design.
Was this article helpful?