Passkeys are a new authentication method that is gaining popularity. They are designed to be more secure and easier to use than traditional passwords. This scheme is developed by the FIDO Alliance, who also offer a database of certified passkey vendors. This database is called the FIDO Metadata Service (MDS).

Introduction to Passkeys

Passkey is the user-friendly name for FIDO2 Credentials. This scheme is based on public key cryptography. The basic idea is that the user generates a key pair, the server stores the public key and when the user wants to authenticate, the server sends a challenge to the user. The user signs the challenge with the private key and sends it back to the server. To make it work two specifications are used: WebAuthn and CTAP2. WebAuthn is a W3C standard that defines the API for web applications to use FIDO2 credentials. CTAP2 is a protocol that defines how the client (e.g. a browser) communicates with the authenticator (e.g. a hardware token or a mobile phone) over NFC, BLE or USB.

Advantages of Passkeys

The sales pitch of passkeys is that they are phishing resistant, resitant to stuffing, can optionally have a second factor built in, always have high entropy, but don’t require the user to remember anything. Of course, these things are implementation dependent. A CVE was published which allows phishing. See this writeup on CVE-2024-9956 by Tobia Righi.

Attestation and the Metadata Service

Attestation is how the authenticator proves to the server that it is a genuine, secure, device. The authenticator uses a special keypair to sign the attestation statement, ensuring that the credential keypair was generated on this device. The server checks the attesation signature agains public keys of the vendor. For this FIDO offers the MDS. Olivier Potonniée has developed a good explorer website, which is available at FIDO MDS Explorer. Devices can be FIDO certified, ensuring functionality and some security properties. Read more about the certification in FIDO Certification Program. Certification is done by accredited labs. These labs must be accredited according to ISO/IEC 17025 and hold additional accreditation such as Common Criteria (CC) or FIPS 140-3. The labs are listed here. The MDS explorer shows the certification status of the devices.

Analyzing the MDS

I will only focus on certified devices. FIDO MDS Explorer is used as a source for the data.

The Good

No vendor currently offers a device that is cerified at the highest level L3. There are currently 9 vendors with L2 devices. L2 requires the use of a secure element, thus software implementations are not allowed. From these, some are not purchasable, either becvause they are not available or because they are not sold to consumers. The following vendors are looked at in more details: Feitian, Token2, TrustKey and Yubico.

Yubico

Yubico is the most well known vendor. They offer a wide range of devices, with different form factors, connectors and fingerprint readers. Notably, their firmware is not updatable. Yubico is a good choice for most users, as they are well supported and established, but they are not the cheapest and only support 100 credentials.

TrustKey

TrustKey is a korean vendor, their devices are purchasable on Amazon, but the reviews are not great and their documentation is lacking.

Feitian

Feitian is a chinese vendor, uniquly they support unlimited credentials. They offer various devices, with connectors and biometrics. They state at least 10 years of storage.

Token2

Token2 is a swiss vendor, they are cheap and support 300 credentials, as well as PIV. Their firmware is updatable and open source, having passed an independent audit. Their Firmware is available on GitHub and based on this project implementing FIDO2 for Java Card. Their security model states “This application is likely not secure” [security_model.md]. The certification of Token2 is done by Bank Card Test Center Shenzhen Branch. The device is programmable, which I like and the case has a nice design.

The Bad

Ledger

The Ledger (Zoomer) Crypto Wallet is a hardware wallet, but it also supports FIDO2, but it is not FIDO certified, which might cause incompatibility.

Windows Hello

Windows Hello is a software based authenticator and FIDO certified, but it only uses COSE Algorithm -257, which is RSASSA-PKCS1-v1_5 with SHA-256. This algorithm is not recommended according to RFC 7518, but TPMs support it.

The Ugly

Google Titan

I use the Google Titan YT1, which is a hardware token, but only supports FIDO 2.0 and not the newer FIDO 2.1. This is a problem as you cannot manage the credentials on the device, you can’t delete them and you can’t set a PIN. It lacks NFC. I got it for free from DEFCON, but I would not recommend it.

Nitrokey

Nitrokey is a german company and they offer Nitrokey, which supports FIDO2 and PIV, but it only supports 27 ECC keys and its pricing is comparable to Yubico. Its firmware is open source, but 27 keys is just not enough.

The Funny

The Company Token offers a Ring, a Token Ring. This is unrelated to the Token2 company. Valmido offers a device praising it as a “next-generation smartcard”, which has a wooden finish, a display and a fingerprint reader. Cryptnox build a smartcard based (Zoomer) crypto hardware wallet, which is FIDO certified.

Conclusion

For a hardware token I would buy one Token2 and one Feitian, as they are cheap and have good features. I would not buy a Yubico, as they are expensive and have limited features. If you have a Ledger, you can use it as an authenticator. For a software based authenticator I use Bitwarden.