Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove ZKP Section #999

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
231 changes: 3 additions & 228 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2967,235 +2967,10 @@ <h3>Evidence</h3>

<section>
<h3>Zero-Knowledge Proofs</h3>

<p>
A zero-knowledge proof is a cryptographic method where an entity can prove to
another entity that they know a certain value without disclosing the actual
value. A real-world example is proving that an accredited university has
granted a degree to you without revealing your identity or any other personally
identifiable information contained on the degree.
</p>
<p>
The key capabilities introduced by zero-knowledge proof mechanisms are the
ability of a <a>holder</a> to:
</p>

<ul>
<li>
Combine multiple <a>verifiable credentials</a> from multiple <a>issuers</a> into
a single <a>verifiable presentation</a> without revealing
<a>verifiable credential</a> or <a>subject</a> identifiers to the
<a>verifier</a>. This makes it more difficult for the <a>verifier</a> to collude
with any of the issuers regarding the issued <a>verifiable credentials</a>.
</li>
<li>
Selectively disclose the <a>claims</a> in a <a>verifiable credential</a> to a
<a>verifier</a> without requiring the issuance of multiple atomic
<a>verifiable credentials</a>. This allows a <a>holder</a> to provide a
<a>verifier</a> with precisely the information they need and nothing more.
</li>
<li>
Produce a derived <a>verifiable credential</a> that is formatted according to
the <a>verifier's</a> data schema instead of the <a>issuer's</a>, without
needing to involve the <a>issuer</a> after <a>verifiable credential</a>
issuance. This provides a great deal of flexibility for <a>holders</a> to use
their issued <a>verifiable credentials</a>.
</li>
</ul>

<p>
This specification describes a data model that supports selective disclosure
with the use of zero-knowledge proof mechanisms. The examples below highlight
how the data model can be used to issue, present, and verify zero-knowledge
<a>verifiable credentials</a>.
<p class="issue" data-number="863">
We will update this section,
if there is a working group item defined to support zero-knowledge proofs in the future.
</p>

<p>
For a <a>holder</a> to use a zero-knowledge <a>verifiable presentation</a>,
they need an <a>issuer</a> to have issued a <a>verifiable credential</a> in a manner
that enables the <a>holder</a> to derive a proof from the originally issued
<a>verifiable credential</a>, so that the <a>holder</a> can present the
information to a <a>verifier</a> in a privacy-enhancing manner.
This implies that the <a>holder</a> can prove the validity of the
<a>issuer's</a> signature without revealing the values that were signed, or when
only revealing certain selected values. The standard practice is to do so by
proving knowledge of the signature, without revealing the signature itself.
There are two requirements for <a>verifiable credentials</a> when they are to be
used in zero-knowledge proof systems.
</p>

<ul>
<li>
The <a>verifiable credential</a> MUST contain a Proof, using the
<code>proof</code> <a>property</a>, so that the <a>holder</a> can derive a
<a>verifiable presentation</a> that reveals only the information than the
<a>holder</a> intends to reveal.
</li>
<li>
If a <a>credential</a> definition is being used, the <a>credential</a>
definition MUST be defined in the <code>credentialSchema</code> <a>property</a>,
so that it can be used by all parties to perform various cryptographic
operations in zero-knowledge.
</li>
</ul>

<p>
The following example shows one method of using <a>verifiable credentials</a> in
zero-knowledge. It makes use of a Camenisch-Lysyanskaya Signature
[[?CL-SIGNATURES]], which allows the presentation of the <a>verifiable
credential</a> in a way that supports the privacy of the
<a>holder</a> and <a>subject</a> through the use of selective disclosure of the
<a>verifiable credential</a> values. Some other cryptographic systems which rely
upon zero-knowledge proofs to selectively disclose attributes can be found in the
[[?LDP-REGISTRY]] as well.
</p>

<pre class="example nohighlight" title="A verifiable credential that supports CL Signatures">
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://www.w3.org/2018/credentials/examples/v1"
],
"type": ["VerifiableCredential", "UniversityDegreeCredential"],
<span class="highlight">"credentialSchema": {
"id": "did:example:cdf:35LB7w9ueWbagPL94T9bMLtyXDj9pX5o",
"type": "did:example:schema:22KpkXgecryx9k7N6XN1QoN3gXwBkSU8SfyyYQG"
}</span>,
"issuer": "did:example:Wz4eUg7SetGfaUVCn8U9d62oDYrUJLuUtcy619",
"credentialSubject": {
"givenName": "Jane",
"familyName": "Doe",
"degree": {
"type": "BachelorDegree",
"name": "Bachelor of Science and Arts",
"college": "College of Engineering"
}
},
<span class="highlight">"proof": {
"type": "CLSignature2019",
"issuerData": "5NQ4TgzNfSQxoLzf2d5AV3JNiCdMaTgm...BXiX5UggB381QU7ZCgqWivUmy4D",
"attributes": "pPYmqDvwwWBDPNykXVrBtKdsJDeZUGFA...tTERiLqsZ5oxCoCSodPQaggkDJy",
"signature": "8eGWSiTiWtEA8WnBwX4T259STpxpRKuk...kpFnikqqSP3GMW7mVxC4chxFhVs",
"signatureCorrectnessProof": "SNQbW3u1QV5q89qhxA1xyVqFa6jCrKwv...dsRypyuGGK3RhhBUvH1tPEL8orH"
}</span>
}
</pre>
<p>
The example above provides the <a>verifiable credential</a> definition by using
the <code>credentialSchema</code> <a>property</a> and a specific proof that is
usable in the Camenisch-Lysyanskaya Zero-Knowledge Proof system.
</p>

<p>
The next example utilizes the <a>verifiable credential</a> above to generate a
new derived <a>verifiable credential</a> with a privacy-preserving proof. The
derived <a>verifiable credential</a> is then placed in a
<a>verifiable presentation</a>, so that the <a>verifiable credential</a>
discloses only the <a>claims</a> and additional credential metadata that the
<a>holder</a> intended. To do this, all of the following requirements are
expected to be met:
</p>

<ul>
<li>
Each derived <a>verifiable credential</a> within a <a>verifiable
presentation</a> MUST contain all information necessary to verify the
<a>verifiable credential</a>, either by including it directly within the
credential, or by referencing the necessary information.
</li>
<li>
A <a>verifiable presentation</a> MUST NOT leak information that would enable
the <a>verifier</a> to correlate the <a>holder</a> across multiple
<a>verifiable presentations</a>.
</li>
<li>
The <a>verifiable presentation</a> SHOULD contain a <code>proof</code>
<a>property</a> to enable the <a>verifier</a> to check that all derived
<a>verifiable credentials</a> in the <a>verifiable presentation</a> were issued
to the same <a>holder</a> without leaking personally identifiable information
that the <a>holder</a> did not intend to share.
</li>
</ul>

<pre class="example nohighlight" title="A verifiable presentation that supports CL Signatures">
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://www.w3.org/2018/credentials/examples/v1"
],
"type": "VerifiablePresentation",
"verifiableCredential": [
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://www.w3.org/2018/credentials/examples/v1"
],
"type": ["VerifiableCredential", "UniversityDegreeCredential"],
<span class="highlight">"credentialSchema": {
"id": "did:example:cdf:35LB7w9ueWbagPL94T9bMLtyXDj9pX5o",
"type": "did:example:schema:22KpkXgecryx9k7N6XN1QoN3gXwBkSU8SfyyYQG"
}</span>,
"issuer": "did:example:Wz4eUg7SetGfaUVCn8U9d62oDYrUJLuUtcy619",
"credentialSubject": {
"degreeType": "BachelorDegree",
"degreeSchool": "College of Engineering"
},
<span class="highlight">"proof": {
"type": "AnonCredDerivedCredentialv1",
"primaryProof": "cg7wLNSi48K5qNyAVMwdYqVHSMv1Ur8i...Fg2ZvWF6zGvcSAsym2sgSk737",
"nonRevocationProof": "mu6fg24MfJPU1HvSXsf3ybzKARib4WxG...RSce53M6UwQCxYshCuS3d2h"
}</span>
}],
<span class="highlight">"proof": {
"type": "AnonCredPresentationProofv1",
"proofValue": "DgYdYMUYHURJLD7xdnWRinqWCEY5u5fK...j915Lt3hMzLHoPiPQ9sSVfRrs1D"
}</span>
}
</pre>
<figure>
<img style="margin: auto; display: block; width: 75%;"
src="diagrams/zkp-cred-pres.svg" alt="Verifiable
Credential 1 and Verifiable Credential 2 on the left map
to Derived Credential 1 and Derived Credential 2 inside a
Presentation on the right. Verifiable Credential 1
contains Context, Type, ID, Issuer, Issue Date, Expiration
Date, CredentialSubject, and Proof, where
CredentialSubject contains GivenName, FamilyName, and
Birthdate and Proof contains Signature, Proof of
Correctness, and Attributes. Verifiable Credential 2
contains Context, Type, ID, Issuer, Issue Date, Expiration
Date, CredentialSubject, and Proof, where
CredentialSubject contains University, which contains
Department, which contains DegreeAwarded, and Proof contains Signature, Proof of
Correctness, and Attributes. The Presentation diagram on
the right contains Context, Type, ID,
VerifiableCredential, and Proof, where
VerifiableCredential contains Derived Credential 1 and
Derived Credential 2 and Proof contains Common Link
Secret. Derived Credential 1 contains Context, Type, ID,
Issuer, Issue Date, CredentialSubject, and Proof, where
CredentialSubject contains AgeOver18 and Proof contains
Knowledge of Signature. Derived Credential 2 contains
Context, Type, ID, Issuer, Issue Date, CredentialSubject,
and Proof, where CredentialSubject contains Degree and
Proof contains Knowledge of Signature. A line links
Birthdate in Verifiable Credential 1 to AgeOver18 in
Derived Credential 1. A line links DegreeAwarded in
Verifiable Credential 2 to Degree in Derived Credential 2.">
<figcaption style="text-align: center;">
A visual example of the relationship between credentials and derived
credentials in a ZKP <a>presentation</a>.
</figcaption>
</figure>

<p class="note">
Important details regarding the format for the <a>credential</a> definition and
of the proofs are omitted on purpose because they are outside of the scope of
this document. The purpose of this section is to guide implementers who want to
extend <a>verifiable credentials</a> and <a>verifiable presentations</a> to
support zero-knowledge proof systems.
</p>

</section>

<section>
Expand Down