decentralized-identity / decentralized-identity/presentation-exchange

Consider note distinguishing submitter/verifier and presentation-exchange implementer

Open
#316 2 comments 0 reactions 0 assignees View on GitHub
Implementation guide question
Dominant language
JavaScript
Stars
88
Forks
35
PR merge metrics
No merged PRs in 30d

Description

My read of the spec...

First, in [Section 6.2](https://identity.foundation/presentation-exchange/#limited-disclosure-submissions)

> ...that include a constraints object with a limit_disclosure property set to the string value required, ensure that the data submitted is limited to the entries specified in the fields property of the constraints object.

Second, in [Section 8, bullet 3](https://identity.foundation/presentation-exchange/#input-evaluation)

> If the constraints property of the [Input Descriptor](https://identity.foundation/presentation-exchange/#term:input-descriptor) is present, and it contains a limit_disclosure property set to the string value required, ensure that any subsequent submission of data in relation to the candidate input is limited to the entries specified in the fields property.

In practice, this means do not include the issuer, issued at date, expiry date, or any signature _unless specifically requested_. Not only do verifiers need to be aware of all possible configurations of credentials across types to request certain properties, they also need to have high-trust in the implementer of their presentation exchange library...and the library of the wallet/tool the party from which they're requesting verifiable data.

This completely shifts the trust from the verifier to the implementer of Presentation Exchange, and/or the software of the responding party. If this is known & intended, it should be called out in the specification. I am imagining cases where the implementer of this specification is different from a verifying party, and there's room for abuse.

I could have a malicious implementation that....
- Makes up data...._and if no proof is requested, this is a problem_
- Ignores certain checks, like issuers, credential status, or expiration..._and if these fields aren't requested, this is a problem_
- Leaves out _additional_ data (i.e. a path asks for "name" and I include "Satoshi" instead of "Satoshi Nakamoto")..._and if the request isn't specific enough this is a problem_

So, what do I suggest? At least an implementers guide, and at most consideration of auditing and certifying known implementations.
The biggest risk I see is having a verifier not doing the processing themself, but instead trusting a wallet with a malicious implementation that returns 'spec-compliant' responses. The tradeoff here, is that if full claims are returned for limiting/filtering for the verifier, there is an argument that the limiting/filtering is completely useless and no privacy has been preserved.

Phrased more simply: unless you can do cryptographic checks yourself, you're gonna have a bad time.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.