Hi FIDO Developers,
We are in the process of implementing passkey support for our service and have encountered a specific scenario with Apple's "Automatic Passkey Upgrade" feature that we'd appreciate the community's insights on.
Context: Apple devices (iOS, macOS) running recent OS versions offer a feature where, after a user successfully logs in using a saved password via iCloud Keychain autofill, the system may offer to "upgrade" that password credential to a passkey. In some cases, particularly noted with more recent updates, this upgrade seems to happen automatically or "silently" in the background shortly after the successful password login.
Observation: When this automatic/silent upgrade occurs, our Relying Party (RP) backend receives a navigator.credentials.create() call result. However, upon inspecting the authenticatorData associated with the created credential, we consistently find that both the userPresence (UP) flag and the userVerified (UV) flag are set to false (0).
The Conflict with WebAuthn Expectations: Our understanding of the WebAuthn specification (L2/L3) and common RP best practices is that for a navigator.credentials.create() operation, User Presence is generally required (i.e., requireUserPresence defaults to true in authenticatorSelectionCriteria). RPs typically verify that the returned UP flag is true to ensure the user was actively involved in the creation ceremony. Consequently, our backend library (and likely many others strictly following the spec's intent for registration) rejects these credentials because the UP flag is false, failing the standard validation check.
We understand why UP might be false in this specific Apple flow – the create() call happens programmatically after a password login, potentially without a separate, explicit user interaction at the exact moment of passkey creation. However, the result conflicts with the standard RP security validation for new credential registration.
Questions for the Community:
We are trying to balance providing a smooth user experience (especially for Apple users encountering this feature) with maintaining robust security guarantees aligned with the WebAuthn specification. Any insights, experiences, or pointers to relevant discussions/documentation would be greatly appreciated.
Thanks
You need to understand the premise of FIDO/WebAuthn, as was
originally envisioned by the FIDO Alliance's founders: to be a
"strong authentication", privacy-protecting protocol, mandating
high levels of security, but that could be made ubiquitous and
cost-effective through a global industry standard. While unstated
in the specification - but discussed within technical meetings -
the resulting authentication protocol had to be simpler, stronger
and provide a better UX than ISO-7816 smartcards with X.509
digital certificates (which provided the highest
security level of passwordless strong authentication as
early as in the late '90s - albeit at high cost)!
ALL of those objectives were met with the FIDO2/WebAuthn Level-1
specification.
The problem was, there was only one browser manufacturer
participating in the earliest incarnations of developing the
WebAuthn spec; another joined, but had significantly fewer
engineering resources. Obviously, the larger manufacturer was able
to drive many of the specifications and development of browser
features. Not knowing the intricate details behind browser
development, it was not easy for outsiders to understand the
different ways the UX evolved between the two browsers.
A little later, another browser manufacturer joined the
specification, and much, much later, the last major manufacturer -
the company you specifically referenced, Apple - eventually joined
the party. By now, significant investments were being made by the
FIDO ecosystem in the manufacture of FIDO Security Keys, FIDO
servers, FIDO-enabled browsers and UX designs by hundreds of
companies. RPs were even deploying applications into production.
One significant problem that bogged down discussions was around
Account Recovery - what happens when the user loses their one and
only Security Key or device with their FIDO credential? How do
they get back access to their account? Companies in the regulated
environment, and security-conscious people understood the risk
implications of trying to get the user back into their account if
no other strong authentication mechanism was available.
The simpler answer to this problem was obvious: given that adoption of FIDO was likely to be highest in richer countries of the OECD, educate users/companies to acquire/provision two Security Keys to register two FIDO credentials and use either one of them to authenticate to the RP site. FIDO is unique among authentication protocols in its ability to create and use multiple, unique credentials to authenticate to a single user account at the RP site*. Or, if two Security Keys were infeasible, use one Security Key, and within a session authenticated by that Security Key, use a device with a secure element (TPM) or a TEE, and register a second device bound FIDO credential where the private key never leaves the computing device. This allows RPs to choose authentication flows that manage their risk appropriately:
The question of whether UP being optional was never
discussed; UV was optional from the start - and the market
responded with different Security Keys to support those needs.
Platform computing devices and browsers evolved to supporting UP,
and prompts for PINs or biometric options for UP/UV.
Apple, in its earliest incarnations of adopting FIDO/WebAuthn
conformed to these specifications, signalling great promise for
the adoption of FIDO to the industry. Regrettably, on their own
volition, they chose to change
the game. Google and Microsoft, the other two platform
providers, chose not to be left out and jumped on the
"synchronized passkey" bandwagon.
And, so here we are now. The strongest authentication protocol
since TLS ClientAuth, has been turned upside down and all privacy
promises have been broken in synced passkeys. Even UP - a given,
whose optionality was never discussed - is dispensed with.
The fact that FIDO/WebAuthn Level-1 delivered device bound
private keys, transaction confirmation, Android Key
Attestation, and the investment of hundreds of companies in
the ecosystem were all tossed out, so Apple users never have to
worry about where their passkey is, is a reflection of market
power. What could have been solved with education, and the
negligible cost of an additional Security Key for first-world
consumers, was left at the wayside and we now have a confused
ecosystem, potentially
massive consolidation of private keys in the cloud, and
complete loss of privacy for consumers**.
Bottom line? At WebAuthn level-1/Level-2, the FIDO ecosystem was at a place that enabled RPs to do the things you are trying to do - and you can still do them! You can even go further than the basics if you want - all the way up to NIST AAL-3 - and with enterprise attestation, even beyond. But you have to understand the implications for your company, and the investments (policy, training, development, procurement, etc.) you have to make for the level of security you want.
The FIDO/WebAuthn capability was expected to establish a baseline
level of security and privacy that was higher than what
smartcards+digital certificates offered; it is now "balkanized"
and RPs are going to have to live with it.
Arshad Noor
StrongKey
* Technically, it was/is possible to issue end-entities (aka users, applications, devices, etc.) multiple digital certificates that enable passwordless TLS ClientAuth to the same account; given its attendant cost, RPs that deployed PKIs just chose not to do it.
** The irony of the situation is, that a colleague just recently
brought to my attention that Apple is requiring two (2) Security
Keys when registering FIDO credentials through macOS settings -
and it is not through their browser - see attached images.
--
You received this message because you are subscribed to the Google Groups "FIDO Dev (fido-dev)" group.
To unsubscribe from this group and stop receiving emails from it, send an email to fido-dev+u...@fidoalliance.org.
To view this discussion visit https://groups.google.com/a/fidoalliance.org/d/msgid/fido-dev/98a64458-82ee-4b62-b609-b1c2a4df98c4n%40fidoalliance.org.
Enough with the FUD, Arshad. People come here with specific questions to help their deployment journey and shouldn’t be subject to your constant disgruntled rants and accusations.
It’s exhausting. Stop.
Respectfully,
tim
@nicol...@gmail.com, sorry you have to deal with this. passkeys.dev/discuss may be a more welcoming environment for deployment questions as you roll out passkeys.
To view this discussion visit https://groups.google.com/a/fidoalliance.org/d/msgid/fido-dev/9af8e610-2ffc-41e3-ba0e-371c31bd556a%40strongkey.com.