digital-credentials icon indicating copy to clipboard operation
digital-credentials copied to clipboard

Most users will experience a no-matching-credential dead-end

Open dickhardt opened this issue 1 year ago • 12 comments

Many users, and all users initially, won't have any wallets installed on their device.

Letting an app know if there are any wallets lets the app know if the user understands what a wallet is and to not use the API at all.

This single bit of data discloses if functionality will exist.

dickhardt avatar Apr 17 '24 16:04 dickhardt

Agreed we should explore APIs with a single bit of privacy impact. Another option is "has this user ever presented a digital credential before". This is probably sensitive right now given how few users would have either of these bits. But perhaps once we've seen a bit of non-trivial deployment we could explore this. I agree it'll be important for widespread adoption to give verifiers some way to minimize the no-credential friction while also having prominent UI in the likely success case.

RByers avatar Apr 17 '24 17:04 RByers

Rather than having an API that can be used for gathering 1 bit of data, it would have the same result if invoking the API was a UX no-op if the user had never installed a credential. The app is then learning after the fact if UX was presented -- and UX would be presented even if the request could not be satisfied, but the user had added at least one credential.

This way we don't confuse users that don't understand what a credential is.

dickhardt avatar Apr 17 '24 18:04 dickhardt

We had a similar discussion in the WebAuthn WG about adding a bit to indicate whether the local device had "a credential" for the calling origin. This was a request from @dickhardt in the same F2F discussion.

One major browser engine was not in favor of adding any new silent operations which can disclose user state and another browser engine largely agreed with that sentiment, so the discussion did not proceed further in WebAuthn. Doesn't mean we shouldn't have the discussion, just adding additional context.

timcappalli avatar Apr 30 '24 14:04 timcappalli

From meeting discussion this evening: updating the issue title to reflect the problem rather than just one possible solution.

We've heard from multiple potential verifiers that it's important to them that the "no matching credentials" case tends to be low-friction, especially early when very few users will have matching credentials. They won't adopt an API which adds friction but no value in the majority of cases. But this is in conflict with the privacy requirement not to divulge any information to websites without user permission.

Rather than having an API that can be used for gathering 1 bit of data, it would have the same result if invoking the API was a UX no-op if the user had never installed a credential. The app is then learning after the fact if UX was presented -- and UX would be presented even if the request could not be satisfied, but the user had added at least one credential.

Yeah we've explored that (it was actually our original chromium implementation). The problem is that it's trivial for a site to make a pretty reliable prediction on whether UX was shown by watching the input events that occur on the page. An attacker could invoke a series of requests and watch to see when input behavior changed to indicate the bottom of the screen was now covered in order to learn which sort of credential the user has without the user's permission.

@npdoty makes the good suggestion that perhaps we can address this problem by having the user initiative the presentation rather than the site. For example maybe browsers could have show a button in the URL bar when the page supports digital credentials and the user can choose to tap it. This, of course, has the downside of likely going unnoticed in many cases. But there's a variety of UX design options here.

RByers avatar May 01 '24 22:05 RByers

From a Chrome privacy side, I am not too concerned about revealing 1 bit of information here: it seems an unlikely target for fingerprinting as there would be UX being presented in case the bit was set, and given the variety of wallets, I don't think that this bit reveal anything highly sensitive.

Agreed we should explore APIs with a single bit of privacy impact. Another option is "has this user ever presented a digital credential before". This is probably sensitive right now given how few users would have either of these bits.

Note that if there are very few users using having presented a digital credential before, the entropy of that information is minimal, making it not very useful for tracking at large scale.

tomvangoethem avatar May 10 '24 10:05 tomvangoethem

Yeah we've explored that (it was actually our original chromium implementation). The problem is that it's trivial for a site to make a pretty reliable prediction on whether UX was shown by watching the input events that occur on the page. An attacker could invoke a series of requests and watch to see when input behavior changed to indicate the bottom of the screen was now covered in order to learn which sort of credential the user has without the user's permission.

If UX was shown then the site did not gather data silently. I'm assuming the user has to dismiss the UX.

My suggestion was that the UX is always shown if the user has any credential, so this does not let an attacker learn which credential, it just lets them know there is a credential, and the user also has learned the site has requested a credential. It is only silent if the user has no credential.

dickhardt avatar May 10 '24 15:05 dickhardt

As credentials can be obtained and used in so many ways, does the single bit of information that a user has a credential of some kind, or a wallet app of some kind, help very much with the dead-end problem?

This doesn't seem like a UI that should be triggered frequently, rapidly or without significant set-up around the action.

npdoty avatar May 10 '24 18:05 npdoty

It certainly helps in the near future when no one has a credential. I would be very reluctant to use the API if 99.99% of the time no one has a credential. And why will someone get a credential if 99.99% of all the sites don't support getting one?

I mind less someone getting UI when they don't have a credential, but have added one. But I don't want to confuse the user that has never added one and does not know what they are.

Depending on what credentials actually get traction, and user's understanding of them, I want more bits of data before I invoke an API that shows UI, but in the near term, it is super unlikely I will invoke the API.

dickhardt avatar May 10 '24 19:05 dickhardt

For government-issued credentials with high-assurance personal information, this shouldn't generally be a quick or automatic prompt, or something done on many webpages. Instead, the goal should be that a user has been given a lot of context, and decided to take an intentional action to present an identity document or assertion, and wanting to do so with a digital credential wallet. Given that level of context, I'm not sure I see the size of the marginal benefit to having a button hidden or not.

npdoty avatar May 15 '24 22:05 npdoty

I'm not following what your point is @npdoty - would you elaborate?

dickhardt avatar May 15 '24 23:05 dickhardt

(Apologies, forgot the follow-up request until now.) My thinking that because this request was likely to be high-context, explained with some alternatives and not something that would be prompted automatically without a considered user decision, that signals about availability of a wallet or a credential would be less necessary for automatically configuring UI, like showing or hiding a button.

npdoty avatar Jun 27 '24 16:06 npdoty

what about issuance during presentation scenario? where the wallet is capable of handling credential A, the user does not have that credential in the wallet, but has a wallet installed and is willing to get credential issued into it and than presenting it in response to the presentation request. I assume it could help with adoption if this scenario is supported.

Sakurann avatar Aug 01 '24 01:08 Sakurann