-
Notifications
You must be signed in to change notification settings - Fork 172
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Consider allowing RPs to indicate that they want platform authenticators to be synced across devices #969
Comments
Wouldn't that void most of the point of putting private keys on a secure element (that it's "impossible" to get them back out)? What problem would this solve that is not solved as well (or better) by simply registering the individual devices? |
This is somewhat similar to iOS keychain feature. Is it allowed to extract keys from one device and migrate to other devices in terms of FIDO and WebAuth? |
IIUC, this issue is only in regards to providing a means for an RP webapp to signal that from the RP's perspective it is permissible for the user's public key credential source(s) (for that RP) to be "sync'd" to another device. Yes? If so, the actual means of such "synchronizing", and whether it exists or not, is separate (see isssue #931. Tho this issue anticipates its existence. See also: Recovering from lost devices in WebAuthn |
The ability of an authenticator to export keys (e.g. to an different authenticator instance of either (1) the same model or (2) different model with at least the same authenticator security level or (3) a different model with any authenticator security level) has major impact on the ability of the relying party to understand how good the keys are protected and how the user is verified. Meaning in scenario (3) the user could potentially "migrate" keys from a TEE based authenticator using fingerprint user verification to a Rich-OS based authenticator with user presence check only. While the former would be considered strong enough for providing strong customer authentication according to PSD2, the latter wouldn't (and hence would need another factor). Scenario (1) is typically supported by HSMs these days. It typically requires some cryptographic effort and sometimes even an admin type role to ensure that only this type of key migration works. |
I would recommend pairing such a flag (if we should end up supporting it) with the ability of an authenticator to express support for non-exportable/non-migratable keys in the attestation statement (e.g. similar to never exportable flag in PKCS#11 - but with crptographic assertion on it). |
I'm not incredibly familiar with the details of the webauthn specification, but am fairly familiar with the general flow given we support U2F today. I just wanted to leave a short comment from an outsider's perspective, given a few of us chatting with @leshi on Twitter resulted in this issue being opened: https://twitter.com/aczeskis/status/1011302905872297984. From an implementors perspective (i.e. if/when we add support for webauthn), we would have no interest in mandating a hardware backed token. Let's look at where we are starting (just to summarize the obvious):
In short, all of the above have lots of issues that eventually lead to users getting compromised and/or locked out of their accounts. Many sites are in a tough spot trying to strike the right balance between account security and usability (i.e. hoping a legitimate user doesn't get locked out of their own account). I don't deny there is value in a HSM style authenticator for some people and/or specific use cases. But, for the vast majority of users and sites, an API driven exportable webauthn key pair that can be synced using their platform of choice (iCloud Keychain, Google account (ala password syncing today), etc) would be a huge ^ 💯 step forward. Some folks have suggested existing synced password manager based systems are sufficient for this use case. Sure, it is "sufficient". But, once we have a programatic API between a browser and RP, why would anyone want to use passwords anymore? Key pairs are meaningfully better across all axes for this kind of thing. Even if a password is randomly generated and unique per-site, it still is far more probable to leak sensitive information in various logs, be stored insecurely, etc.
I'm not super clear on the implementation details, but some notion of attestation sounds ideal. If a RP actually wants to require per-device tokens they can. I can imagine some sites might even have a use case for this based on administrative settings (ex. a google apps account admin that can choose whether their organization wants to require per-device tokens or not). As an aside, what would happen today if a browser implemented a "soft token"? In other words, if Apple released a version of Safari tomorrow that implemented this full flow purely in software and stored the key pair in iCloud keychain, would that violate something in terms of compliance, certification, ....? |
Thanks @ptoomey3! I agree that (almost) anything that simply moves people away from passwords is a good thing. That said, I don't think it's necessary that the RP can indicate it allows credentials to be portable and/or synced. Like you say...
I wouldn't say that would violate the spec in any way, but it would indeed not be eligible for many certifications. It also probably wouldn't be able to produce a meaningful attestation statement, since a software authenticator (without cooperation from the OS) can do very little to protect an attestation key. That said, none of that matters as long as the RP accepts the (possibly empty) attestation statement - so in a way, RPs can already opt in to allowing syncable credentials by accepting credentials from authenticators that do not promise to not do that. Actually, it's rather something they need to opt out of, since the RP by default will not ask for attestation. Adding a standardised way to express features like that in attestation certificates sounds reasonable, but perhaps in the scope of a certification authority rather than the core WebAuthn spec? (I'm thinking a list of such feature indicators would likely grow over time) |
This was my thought as well. It feels like the cases where a RP would require an attestation might be the exception and not the rule. So, a default of no attestation would imply that the RP assumes nothing about the authenticator (which is probably fine for the vast majority of RPs). And, if they do want to have restrictions, the RP looks for an attestation from an authenticator capable of that. |
Yes, that is how the spec is written. See https://www.w3.org/TR/webauthn/#ref-for-enumdef-attestationconveyancepreference and https://www.w3.org/TR/webauthn/#enumdef-attestationconveyancepreference. thanks for linking to the twitter thread behind @leshi (aka @aczeskis on twit)'s orig post. @rlin1 -- your comment wrt key migration/export #969 (comment) perhaps is more appropriate for issue #931 ? |
Gotcha. So, read another way, does the existing |
In practice, yes. There's no API for expressing this particular preference, but the only way for the RP to enforce - or even know - anything about how the authenticator operates is to require and verify a trusted attestation statement (with the assumption that trusted authenticators do behave as promised by their certificate/vendor/whatever). If the RP does not verify or ask for attestation (which it won't by default, since |
@leshi Out of scope for the current version, moving to next level |
Regarding: @rlin1 -- your comment wrt key migration/export #969 (comment) perhaps is more appropriate for issue #931 ? |
Since PR #1226 added this (emphasis added):
I suggest we close this issue since the proposal here conflicts with the above. |
Well, the above language can be altered. Since we are still figuring out account recovery/device loss/new device(s), I'm inclined to keep it open. |
Would it be possible to have some form of derived key that can be synced to trusted devices while still retaining the authority of the original key but doesn't carry its attestation? e.g. A flow would look something like this:
|
@Jamesernator That sounds similar to our recovery extension proposal: https://gist.github.com/emlun/4c3efd99a727c7037fdb86ffd43c020d |
From call of 2021-03-03: we believe this has been superseded by issues such as #1546 |
Some RPs may want to allow key material associated with platform authenticators to be synched across devices.
For example, this might allow a user who sign into their browser or OS to automatically have all their platform authenticators available in the new browser session.
I believe that for this to be a feature, RPs must explicitly indicate that they want this. We should also consider adding some kind of additional platform binding such that it's clear when the user comes from a new machine (though cookies might be enough for this).
The text was updated successfully, but these errors were encountered: