-
Notifications
You must be signed in to change notification settings - Fork 181
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
Backup state of credentials #1692
Comments
Looks good to me, either encoded in an extension, or using two of the three bits of flags. |
I prefer to use two of the bit flags, that will allow for the response information to be unsolicited. |
Haven't we already changed so extensions may now be unsolicited, motivated by
But I agree the flags should be tamper-protected, so either authenticator flags or an authenticator extension. |
If we choose extension route, then platforms and authenticators have to support it. RP may or may not need to change the request depending upon whether we can include the extension by default in user-agent/platform and whether they care. But this is not called tampering the request. It is called supporting a new extension. :) It seems like flags may be simpler. Need some more time to think on this. |
We changed level 2 to allow unsolicited. Flags are less likely to break existing RP and don't require additional bits to be sent in both the request and response that an extension would. I could live with it as an extension but think using the bit flags is cleaner. |
I think bit flags are a cleaner approach overall, for reasons @ve7jtb expresses. |
AFAIK are already long-broken via the (relatively popular) combination of authenticators which support I would be more inclined to reserve these bits for mandatory-to-understand extensions as well as changes to the structure of authenticator data. Bits are also very hard to change the meaning of once (beta) implementations have shipped or to otherwise semantically version. A |
credProps is a client extension only. |
oops - changed to |
Some additional considerations:
1. Security Related: Following scenario: Note that in reality step b+c could even be omitted, making it more complex for the RP to determine the risk. For me it means that (from a security perspective), it is important 2. Adoption Related |
My feeling is that an authenticator is defined today effectively as "abstract thing that performs user presence and verification, and registers, asserts, and protects its public keys". There's nothing about the authenticator being a single device, being hardware or software, or whether it stores into a TPM-protected storage or into a GitHub gist. The concept of a device is being added, and extensions are being added to give multi-device authenticators additional capabilities specifically because otherwise, relying party policies will reject their use. An attestation continues to infer such implementation details to policy. How one receives access to private keys, via sync fabric of approved TPMs or a PIN-protected file or a CSV would be part of those details. The weakest security link drags everything down - if it is possible to recover into an arbitrary authenticator, that greatly decreases the trustworthiness of the original registered credential. The device public key extension, sent on registration and on use, effectively allows one to make judgements both based on the details of the device and on the backup/restore mechanism.
If anything, it sounds like we need to make it clearer that these flags on their own do not imply some security policy is met, just as UP and UV on their own make no guarantee that the user is present or verified. But in addition - the backed-up flag is not meant for security use in general. It is meant to drive user experience for relying parties which want to eliminate passwords, but need a durable credential by which to replace them.
The device public key attestation would presumably let a relying party know that an unapproved implementation has gained control of the private key and is attempting to use it. Depending on the policy this might cause this one authentication request to be rejected, additional user challenges to be made, or the public key credential itself marked as no longer trusted. Note however that if the backup mechanism does allow arbitrary authenticator access, they may go from one 'authentic' device owned by the user to another equivalent 'authentic' device controlled by a malicious party. |
I'm not following this. There's no relationship between these bits and the DPK. |
Which bits? I'm speaking to the underlying implementation details of the asserted authenticator. |
Apple likes the proposal. |
Someone from apple contacted me directly to discuss, and it turns out there was a second bug in safari related to attestation and platform syncing, where my device was behaving incorrectly and creating a device-bound key with attestation even when sync was requested. That's what led to the confusion as it appears apple have an undocumented behaviour where passkeys do NOT respond to any attestation requests, but if sync is disabled, they will then allow attestation to proceed. As a result, my concerns about currently existing passkeys are invalid, meaning that the proposal "as is" is good to go then. Sorry for the pain @timcappalli :( |
With recent multi-device passkeys concept for backup and recovery purposes and the desire to remove passwords from the account, we need to provide signal to the RP that it can go ahead and remove passwords.
This is a refinement of original proposal of "durable" flags in https://github.com/w3c/webauthn/wiki/Explainer:-broadening-the-user-base-of-WebAuthn#durable-signal
(which is derived from: #1637 (comment))
dpk
, as per current definition in the WebAuthn PR #1663 is that it is just another key which is device bound. It does not tell whether primary credential is device bound or not.Windows current thinking is that if and when we implement multi-device backup, user will be given a choice of whether they want these credentials to be backed-up or not at registration time. User may also have ability to choose sync/backup state in the future depending on various factors like access to sync/backup fabric etc. and it's properties. Which means that backup state of the credential can change over time. And RP should be able to determine what is happening from the authenticator responses.
There are two possible solution around this.
Extension: "backup-state"
Need
Applicability
Values
Authenticator Flags (as proposed by @ve7jtb)
cc @agl / @equalsJeffH / @timcappalli
The text was updated successfully, but these errors were encountered: