w3ctag / design-reviews

W3C specs and API reviews
Creative Commons Zero v1.0 Universal
322 stars 55 forks source link

WebAuthn PRF extension #806

Closed agl closed 1 year ago

agl commented 1 year ago

I'm requesting a TAG review of the WebAuthn PRF extension

This extension lets WebAuthn assertions also contain secret keys for the decryption of data. With it, the confidentiality of data can be protected by a security key.

Further details:

We'd prefer the TAG provide feedback as (please delete all but the desired option):

💬 leave review feedback as a comment in this issue and @-notify [github usernames]

MattMenke2 commented 1 year ago

The privacy properties are unclear. Is there a single random_oracle() exposed globally, which could then be used to track a user across sites? Are they scoped per-site or per origin? Are these persisted or not?

There's mention of this being UI gated, but neither the explainer nor the spec mention the UI, or what triggers it. Does the UI expose whether this feature is available before a user grants permission (e.g., only show a dialog if the feature is available), or is it just for the existence of a security key in general? Or does it reveal nothing?

A privacy section in the explainer would make the privacy properties of this proposal much easier to evaluate.

agl commented 1 year ago

The privacy properties are unclear.

Have added a section to the explainer as suggested. This extension doesn't change any of the privacy properties of WebAuthn so the PRFs are per-credential and credentials are still scoped to an RP ID.

There's mention of this being UI gated, but neither the explainer nor the spec mention the UI, or what triggers it.

This extension doesn't change anything about WebAuthn in that regard either. So sites trigger operations via Javascript calls on navigator.credentials as usual and the data is part of an assertion and thus behind the same ceremony as signing in.

During registration, if the user completes the ceremony and creates the credential then the site learns whether the authenticator supports the extension or not.

MattMenke2 commented 1 year ago

Thanks, much appreciated!

rhiaro commented 1 year ago

@plinss, @atanassov and I reviewed this in our virtual face-to-face breakout today. Thanks for clarifying the privacy implications in the explainer. This seems like a useful addition to the API.