ZKP-based Selective Attribute Disclosure in the DID SDK #105
mauriziobinello
started this conversation in
Ideas
Replies: 1 comment 4 replies
-
Hi just some questions:
|
Beta Was this translation helpful? Give feedback.
4 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
ZKP-based Selective Attribute Disclosure in the DID SDK
Abstract
Hedera's DID SDK supports creation of Verifiable Credentials "VCs" containing any specific set of credential attributes. Unfortunately, all attributes within that VC are implicitly exposed to a relying party when the subject needs to authenticate any one attribute. It is possible to work around this limitation by issuing multiple VCs containing subsets of the attributes, but this is somewhat inefficient.
Rationale
Emergence of zero-knowledge proof technology presents a possible mechanism to address this type of requirement by proving one or more facts about a credential without disclosing the credential itself. Specifically, the zk-SNARK (zero-knowledge Succinct Non-interactive ARgument of Knowledge) form of cryptography supports proof of possession of information without revealing that information.
The intent of this HIP idea is to propose this technique as a more elegant means to address selective disclosure of VC attributes. In the short term, the goal is to add an optional component to the DID SDK to support this functionality when appropriate.
With community agreement it may also become possible to extend the scope to encompass selective disclosure (in general) to the W3C DID specification.
Detail
Although the capability to prove the authenticity of attribute values is critical, it is highly desirable to be able to prove statements about attributes as well.
As an example, a driving license credential can be used to prove many things, such as address, date of birth, age, and permission to drive within a specified geography. It is commonplace to use a driving license to prove age to purchase controlled merchandise, but it should not be strictly necessary to disclose one's name, address, or even date of birth to prove that one is over the age of 18. This can be achieved already using the Hedera DID SDK, but would require a subject to request a new VC (for this exact purpose) from the Issuer - in this case the licensing authority.
Simplified process (as-is)
Note: The process described below is a simplified illustrative subset of the real VC process and is not intended to represent all of the underlying complexities.
Changes and Additions required for the proposed process
Specification
Technical Considerations
Next Steps
Socialise this idea with the Hedera community as well as the wider DI community
Identify (through community discussion) a set of typical/common use-cases for selective disclosure, such as:
It may be sensible to build an open-source repository of circuits associated with the most common use cases, with their corresponding proving keys and verification keys. It would, of course, be preferable to take advantage of existing repos that aim to meet this same requirement.
Backwards Compatibility
Everything described herein must be modular and optional. None of the proposed changes may impact solutions using the current version of the DID SDK.
Security Implications
Community comment is welcome here. As a minimum, the proving system and Snark-friendly hash function should be reviewed from a security/cryptography perspective.
Reference Implementation
TBD
Rejected Ideas
None as yet.
Open Issues
Nono as yet.
References
TBD
Copyright/license
This document is licensed under the Apache License, Version 2.0 -- see LICENSE or (https://www.apache.org/licenses/LICENSE-2.0)
Beta Was this translation helpful? Give feedback.
All reactions