Quoting a blog authored by Vitalik Buterin regarding ZKP and Ethereum

One natural use case for the technology is in identity systems. For example, suppose that you want to prove to a system that you are (i) a citizen of a given country, and (ii) over 19 years old. Suppose that your government is technologically progressive, and issues cryptographically signed digital passports, which include a person’s name and date of birth as well as a private and public key. You would construct a function which takes a digital passport and a signature signed by the private key in the passport as input, and outputs 1 if both (i) the date of birth is before 1996, (ii) the passport was signed with the government’s public key, and (iii) the signature is correct, and outputs 0 otherwise. You would then make a zero-knowledge proof showing that you have an input that, when passed through this function, returns 1, and sign the proof with another private key that you want to use for your future interactions with this service. The service would verify the proof, and if the proof is correct it would accept messages signed with your private key as valid.

I don't quite get why this would be considered a ZKP and not "simple key pair"


The key pair used to sign the proof is just a means of securely communicating with the service (it doesn't prove anything, it just establishes a means of proving data integrity, i.e. "I'm really the one who just sent you this proof, see, I signed it with my private key? -Oh, OK, I just verified with your public key; all good")

Now for the first key pair (since I don't know which key pair you are referring to by saying "simple key pair"): Same thing, except here it's to prove the integrity of the passport. It was signed by a government, so all the data contained within it are certified by that government (one can't just modify his digital passport to appear older and whatnot).

The ZKP part of your question is hard to answer since it's very abstract in the quote you provided, but put simply:

You're not going to send your birthdate contained in your passport (as that would not be zero knowledge). A zero knowledge proof protocol would take (i), (ii), (iii) as input and provide a proof (to the service), without disclosing any of (i), (ii), (iii). Through such a protocol, the service would know (/be convinced of with a high probability) that you are indeed over 19 years old and that this information inside your digital passport has been certified by your government.

The difficulty here would be the ZKP protocol itself that would be able to provide such a proof.

The service won't receive your passport data, signature, or birthdate (encrypted or not with a key pair), but a proof of the statement "I am over 19 years old".

I hope I helped clarify this though I'm not sure. With a reference to the blog post I could maybe see the ZKP (if he provided it) he imagined to achieve this.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.