Let us say that we have 3 entities: an Issuer I
, a user/prover P
and a verifier V
.
V
trusts I
but does not trust u
u
wants to show that he respects some kind of property (eg. being over 18yo) to V
without revealing their whole birth day
V
possesses the data that u
needs to convince V
, eg. using a ZK-proof, but V
would not trust such a proof because u
could easily use a fake date
How would you design a protocol such that V
is assured that the claim u
makes is legitimate (that is, that claim was issued by I
)?
A first idea would be to use both public key signature (so, V
sends u
a signature of its date, so that even if u
decides to use a fake date, the cannot provide a correct signature for that) and ZK-proof so that u
provides only the strictly required informations to V
. V
would then check that the ZK-proof is correct and that the private input fed into the ZK-circuit is signed by I
.
Some clarifications after Geoffroy's comment:
- the user
u
should be aware of what information V
wants to know, so we can't just let V
and I
communicate cutting out the user
- the user has one or more statements issued and signed by
I
and wants to convince V
that a claim about a statement (eg. u
wants to prove that he is 18yo, given a birth certificate/ID/passport signed by I
) without revealing the entire statement.
Thanks in advance