#authentication #passwordless #security

idea

FIDO authentication is a set of open protocols that use secure stores on devices owned by the user, and PK infrastructure, to authenticate users without the need for a password.

Auth happens by asking user to auth locally, possibly using biometrics or other hardware-based verification like physical tokens. This generates a key pair, and public key is registered to the user. When logging in, a challenge is issued to the user from the public key, that is resolved using the private key, using device protection to sign in the person.[1]

sequenceDiagram;

participant user;
participant device;
participant site;

alt registration
  user -» site: register
  site -» device: get key
  device -» user: please auth
  user →> device: auth
  device -» device: generate passkey
  device →> site: public key
  site →> user: done
end

alt login
  user -» site: login
  site -» device: validate creds
  device -» user: sign in using biometrics
  user →> device: biometric auth
  device →> site: validate creds using PK
  site →> user: welcome
end

In this context, each of the devices registered as credential to the user is referred to as a passkey[2]. The idea there is that the credential used when authenticating is synchronized between devices by the credential provider (e.g. iPhone -> Mac), which is handled by the OS itself (unless they are "single device passkeys")

Passkeys are supported by Apple, Google and Microsoft ; as well as FIDO keys

To sign-in accross devices (e.g. signup from Android and sign-in from Windows), the sign-in is requested from an existing device (Android) and the new device then acquires the passkey - this leverages Bluetooth Low Energy (BLE) to determine physical proximity.

The concept of passkey itself embeds MFA, as users need possession of a device (1st factor), and a second factor such as fingerprint or PIN.

To switch to a new device on a new platform without the old device, then the RP needs to implement a standard account recovery.

implementation

terminology

A service relying on a passkey is called Relying Party (RP)

The secure component handling authentication in a device is called authenticator.

W3C WebAuthn defines a standard web API built into browsers and OSs to enable FIDO Auth.

links

references

[1]: Fido Alliance / How FIDO works

[2]: Fido alliance / Passkeys (Passkey Authentication) (fidoalliance.org)

[3]: W3C / Web Authentication: An API for accessing Public Key Credentials Level 1 (w3.org)

[4]: Demo of WebAuthn: WebAuthn.io

SimpleWebAuthn, a lib to implement WebAuthn in TS/JS: GitHub - MasterKale/SimpleWebAuthn: WebAuthn, Simplified. A collection of TypeScript-first libraries for simpler WebAuthn integration. Supports modern browsers and Node.