Mapping Passkeys to NIST AAL2 and AAL3
The NIST digital identity guidance defines authenticator assurance levels in terms of factors, replay resistance and verifier impersonation resistance. Passkeys satisfy most of those properties comfortably, and one of them contentiously. This page covers what each level asks for, where a synced credential lands, and how to produce evidence for whichever claim you make. It sits under Enterprise Policy and Compliance Controls.
Property Reference
| Property | Mechanism in WebAuthn | Where checked |
|---|---|---|
| possession | signature by a non-exportable private key | server, on every assertion |
| verification of the claimant | the user-verification flag | server, per action |
| replay resistance | single-use challenge with an expiry | server, at consumption |
| verifier impersonation resistance | origin binding | browser, before the ceremony |
| hardware protection | attestation plus metadata | server, at enrolment |
The first four are available in every deployment. The fifth requires attestation, which is what separates the AAL3 conversation from the AAL2 one.
Root Cause Analysis
1. Claiming a level without checking the flag. An AAL2 claim rests on the authenticator having verified the claimant. If your server never reads the user-verification bit, the claim rests on a request option you sent rather than on anything that was checked.
2. Assuming AAL3 follows from “hardware”. The guidance asks for a hardware-based authenticator, and a synced passkey is hardware-held on each device it reaches — but the set of devices is governed by a consumer cloud account rather than by physical possession. That is the contested point, and it should be named rather than glossed.
3. Conflating phishing resistance with an assurance level. Verifier impersonation resistance is a property the guidance treats separately, and passkeys have it at every level. It is one of the strongest things you can say, and it gets lost when everything is compressed into a single level label.
4. Producing no evidence. The most common finding. The properties are satisfied; nothing records that they were checked, so the claim cannot be substantiated on demand.
Step-by-Step Resolution
Step 1 — decide which level the system needs, per action rather than globally
Reading an account and moving money rarely need the same assurance, and a single global level either over-constrains the first or under-protects the second.
Step 2 — enforce user verification where the level requires it
Request it, then check the flag in the response, then record the result on the session. All three steps, or the claim is unsupported.
Step 3 — make replay resistance demonstrable
A single-use challenge with an absolute expiry, consumed atomically. The evidence is the consumption record, not the code.
Step 4 — state verifier impersonation resistance plainly
Origin binding is enforced by the browser before your code runs. The supporting evidence is a flat-zero rate of origin-mismatch events.
Step 5 — for AAL3, require attested hardware
Attestation verified against pinned roots, model resolved through metadata, and the outcome recorded per credential. Without it there is nothing to evidence a hardware claim with.
Step 6 — write the evidence queries alongside the controls
One query per property, producing the records that substantiate it. Written during build, they take hours; reconstructed under assessment, they take weeks.
Verification and Testing
Run each evidence query against a test account and confirm it returns what an assessor would need: which credential, which verification result, which ceremony time, and which enrolment policy outcome. A query that returns a row but not the field the control depends on is not yet evidence.
Assert the negative case in your test suite: a ceremony without user verification must be refused at whichever action carries the requirement, and the refusal must be recorded with a reason code. That test is what proves the control is enforced rather than intended.
For an AAL3 claim, assert that a credential with no verified attestation cannot satisfy the higher-assurance actions. This is the check that most often turns out to be missing, because the enrolment policy records the outcome and nothing downstream reads it.
Pitfalls
1. A single global assurance level. Produces friction everywhere and protection nowhere in particular.
2. Claiming AAL3 for synced credentials. Defensible only with an argument the guidance does not obviously support; better to use attested hardware where the level is genuinely required.
3. Treating the level as a property of the credential. It is a property of the ceremony and the checks around it, and the same credential can support different claims in different contexts.
Frequently Asked Questions
Does a passkey on its own meet AAL2?
Where the authenticator verified the user, the argument is straightforward: a single multi-factor authenticator combining possession of a non-exportable key with a verification the device performed. The parts that need your attention are the ones you implement — checking the flag, enforcing single-use challenges, and recording both.
Why is AAL3 harder?
Because the level is framed around hardware-based authenticators and impersonation resistance, and a synced credential’s key material is available on any device the user’s platform account reaches. The cryptography is not the issue; the boundary around the key is. Deployments that genuinely need AAL3 generally use attested hardware authenticators, where the boundary is physical and provable.
Does phishing resistance map to a level?
It is called out as a distinct property rather than as a level, and passkeys have it inherently through origin binding. It is worth stating separately in any assessment, because it is often the strongest claim available and it is easy to lose inside a level label.
What if we cannot collect attestation?
Then you cannot evidence a hardware-protection claim, and the honest position is that the deployment supports the levels that do not require one. Attempting an AAL3 claim on unattested credentials is the kind of row an assessor will pull on first.
How should re-authentication requirements be handled?
The guidance sets expectations for how frequently a claimant must re-authenticate at each level, and the recorded ceremony time is what makes that enforceable. Comparing the session’s authentication time against a per-action maximum age is the same mechanism used for step-up, so the two requirements share an implementation.
Do the backup bits matter for an assurance claim?
They describe durability rather than assurance, so they do not feature directly. Where they are useful is in identifying which credentials are device-bound, which is the population that can support a hardware-related claim without attestation being available for everybody.
How should a mixed population be described in an assessment?
Per credential rather than per account, because the levels are properties of a ceremony rather than of a person. An estate where employees hold attested hardware keys and contractors hold synced platform passkeys supports different claims for different populations, and describing it that way is both more accurate and easier to substantiate than averaging into one statement. It also makes the remediation obvious when a gap is found: the question becomes which population needs a different credential type rather than what the whole system should be re-architected into.
What is the most common finding in this area?
Evidence rather than mechanism. Deployments almost always satisfy the properties — the challenge is single-use, the origin is bound, the flag is checked — and almost as often cannot produce a record showing that any of it happened for a particular sign-in on a particular date. Writing the evidence queries during the build, and running them once against a test account, turns the most common finding into a non-issue for the cost of an afternoon.
Related
- Enterprise Policy and Compliance Controls — the parent topic area and the four-column matrix
- Passkeys and PSD2 Strong Customer Authentication — a different framework with a dynamic-linking requirement
- Verifying the User Verification Flag — the check every AAL2 claim rests on
- When to Require Direct Attestation — the enrolment policy an AAL3 claim needs