eu-digital-identity-wallet / eudi-doc-architecture-and-reference-framework

The European Digital Identity Wallet
https://eu-digital-identity-wallet.github.io/eudi-doc-architecture-and-reference-framework/
Other
431 stars 60 forks source link

No unlinkability with respect to Wallet Providers #243

Open kernoelpanic opened 4 months ago

kernoelpanic commented 4 months ago

The trust assumptions of the ARF state that colluding parties are a privacy problem and explicitly provides Relying Parties as an example (emphasis added)

  • Relying Parties may try to violate a User's privacy by tracking the User by processing their data without lawful grounds. They can do so, as an example, by comparing without lawful grounds a signature, hash, or public key value present in an attestation that the User presents to them to similar values known to the Relying Party. Moreover, Relying Parties may collude with other Relying Parties to do so.

So why shouldn't Relying Parties not also try to collude with Wallet Providers?

The "classic" security/threat model of related technologies and anonymous credential systems (such as BBS+ for example) usually describes three roles:

In addition to these roles, the ARF defines another role, namely that of the Wallet Provider (WP). According to ARF the WP has the following responsibilities:

Wallet Instance revocation can happen,

To implement Wallet Instance revocation, the Wallet Instance Attestation (WIA) is used. The Wallet Provider SHALL be the only party capable of execution the revocation or suspension of a WIA:

... the Wallet Provider of a given WIA SHALL be the only party in the EUDI Wallet ecosystem capable of executing the revocation or suspension of that WIA. VCR_01

This in turn means, that the Wallet Provider is always capable of attributing a WIA to its activated Wallet Instance and thus link it to its user. Moreover, PID/Attestation Providers and RPs should be able to check if a certain WIA has not been revoked:

6.6.2.4 [...] during activation of a Wallet Instance, issues a Wallet Instance Attestation (WIA) to the Wallet Instance. The WIA allows PID Providers, Attestation Providers and Relying Parties to verify that the Wallet Instance is not suspended or revoked.

WIRevocation_17: A Wallet Instance SHALL be able to transfer the WIA to PID Providers and Attestation Provider during the issuance of a PID or attestation and to Relying Parties during the presentation of attributes.

This means PID Providers and RPs have to, rely on the validity of a WIA (which is valid for less than 24h), or check for revocation of that specific WIA with the Wallet Provider. So the WIA is either ephemeral (short lived <24h), or long lived and requires a revocation check on every use of the Wallet Instance when interacting with an PP or RP. So lets see how the issuance of the WIA is described in Annex 2 Topic 38:

WIRevocation_01: To enable a Relying Party or an Attestation Provider to verify the authenticity and revocation status of a Wallet Instance it is interacting with, a Wallet Provider SHALL issue one or more WIAs to the Wallet Instance during the activation phase of a Wallet Instance

Here the ARF explicitly allows to only issue one WIA during the activation, which would effectively make the WIA a static tracking cookie if implemented that way. This problem might have been noticed and led to requirement WIRevocation_04 which should prevent this:

WIRevocation_04: The Wallet Provider SHALL manage the issuance processes for WIAs in such a way that the WIAs cannot be misused by colluding Relying Parties (and Attestation Providers) to track a User.

But beyond this requirement, the ARF does not provide any guidance on how this should be done. Moreover, even if the Wallet software uses a different ephemeral (validity <24h) WIA with every RP and PP, the fundamental problem stays unsolved: Namely that collusion between any party (RP or PP) with an WP will always allow to link a WIA to a user, thus violating unlinkability.

Suggested Mitigation: Do not treat the WP as a special party, but treat the WP as yet another issuer/IdP that issues an attestation over the successful activation of a Wallet Instance (comparable with the WIA). The encountered problems (unlinkability and revocation) are the same as in the "classic" scenario where there are only issuers, provers/holders, and verifiers. The only difference is that, as a first step, the holder always verifies that they have a valid attestation for a WP for their wallet instance, for example, before requesting another attestation from another issuer (PP) or before verifying any other PID to an RP.

Therefore, if unlinkability and revocation can be solved in the "classic" case, for example by using a scheme such as BBS+, then the problem of unlinkable activation and revocation of a Wallet Instance can be solved as well, as it reduces to the classic case.