Passkeys and WebAuthn
1.[3p] What does the authenticator actually sign during an authentication ceremony?
What does the authenticator actually sign during an authentication ceremony?
The answer is: The raw authenticatorData bytes followed by SHA-256 of the clientDataJSON
The answer is: The raw authenticatorData bytes followed by SHA-256 of the clientDataJSON
The answer is: The raw authenticatorData bytes followed by SHA-256 of the clientDataJSON
2.[3p] authenticatorData is rpIdHash, then flags, then the signature counter. How many bytes is it when no attested credential data or extensions follow?
authenticatorData is rpIdHash, then flags, then the signature counter. How many bytes is it when no attested credential data or extensions follow?
3.[3p] A flags byte of 0x41 arrives at registration. Which bits are set?
A flags byte of 0x41 arrives at registration. Which bits are set?
The answer is: UP and AT, so the user was present but not verified
The answer is: UP and AT, so the user was present but not verified
The answer is: UP and AT, so the user was present but not verified
4.[3p] Why can a phishing page on examp1e.com not obtain a usable signature for example.com?
Why can a phishing page on examp1e.com not obtain a usable signature for example.com?
Select all that apply
The answer is: The browser only offers credentials whose relying party identifier matches the current domain, The browser writes the real origin into clientDataJSON and the authenticator signs over it, The user has no secret to type, so there is nothing to hand over
5.[2p] Comparing clientData.origin with endsWith("example.com") is an acceptable origin check.
Comparing clientData.origin with endsWith("example.com") is an acceptable origin check.
The answer is: False
6.[3p] Match each part of the verification checklist to what it establishes.
Match each part of the verification checklist to what it establishes.
Exact origin equality
rpIdHash against SHA-256 of your domain
Challenge equals the stored one
UV flag set
a biometric or PIN was checked, so there are two factors
the authenticator signed for your relying party
this is not a replayed signature
the ceremony ran on your site and not a lookalike
Show the answer
Exact origin equality: the ceremony ran on your site and not a lookalike rpIdHash against SHA-256 of your domain: the authenticator signed for your relying party Challenge equals the stored one: this is not a replayed signature UV flag set: a biometric or PIN was checked, so there are two factors
7.[3p] Why does crypto.subtle.verify reject a WebAuthn ES256 signature that was passed through unchanged?
Why does crypto.subtle.verify reject a WebAuthn ES256 signature that was passed through unchanged?
The answer is: WebAuthn returns the signature DER encoded and Web Crypto expects the raw 64-byte r and s
The answer is: WebAuthn returns the signature DER encoded and Web Crypto expects the raw 64-byte r and s
The answer is: WebAuthn returns the signature DER encoded and Web Crypto expects the raw 64-byte r and s
8.[3p] What does a discoverable credential make possible that a non-discoverable one does not?
What does a discoverable credential make possible that a non-discoverable one does not?
The answer is: Signing in with no username, since the authenticator returns the user handle itself
The answer is: Signing in with no username, since the authenticator returns the user handle itself
The answer is: Signing in with no username, since the authenticator returns the user handle itself
9.[3p] Why has the signature counter largely stopped detecting cloned credentials?
Why has the signature counter largely stopped detecting cloned credentials?
The answer is: Synced passkeys report zero every time, because one counter cannot be kept across several devices
The answer is: Synced passkeys report zero every time, because one counter cannot be kept across several devices
The answer is: Synced passkeys report zero every time, because one counter cannot be kept across several devices