vprove ◆ void01x ◆ Prove things without revealing them ◆vprove ◆ void01x ◆ Prove things without revealing them ◆vprove ◆ void01x ◆ Prove things without revealing them ◆vprove ◆ void01x ◆ Prove things without revealing them ◆vprove ◆ void01x ◆ Prove things without revealing them ◆vprove ◆ void01x ◆ Prove things without revealing them ◆
PoK — proof of key (schnorr, prove you know a secret)
PoP — proof of password (schnorr over a stretched password)
PoM — proof of membership (merkle inclusion)
PoL — proof of location (commit-reveal proximity)
schnorr sigma protocol over a 2048-bit safe prime (RFC3526 group 14), fiat-shamir
non-interactive. real zero-knowledge proof of knowledge — the verifier learns nothing
about your secret beyond the fact that you know it. this is a toy/educational
implementation (exponents reduced mod p-1 for simplicity), not audited crypto.
your secret
commitment (safe to share publicly):
proof (share this to prove you still know the secret):
verify
✓ valid — prover knows the secret behind that commitment
✗ invalid — proof does not match commitment
same schnorr math as PoK, but the secret is derived from a password via PBKDF2
(100k iterations, SHA-256) with a salt — like a login system, except the password
never gets sent anywhere, ever, including during verification.
your password
commitment (safe to share publicly):
proof (share this to prove you still know the password):
verify
✓ valid — prover knows the password behind that commitment
✗ invalid — proof does not match commitment
standard merkle inclusion proof, SHA-256. proves one entry is a member of a list
without revealing the rest of the list. it does reveal which entry you're proving —
true "hidden which member" proofs need zk-SNARKs, which is out of scope here.
your list
merkle root (safe to share publicly):
proof (share this + the entry to prove it's on the list):
verify
✓ valid — entry is a member of that list
✗ invalid — entry is not a member, or proof is malformed
commit-reveal, not full zero-knowledge — be honest about that. you commit to your
exact coordinates now (hash + random nonce), which locks them in without revealing
anything. later you reveal the coordinates + nonce, and anyone can check the hash
matches AND that you're within the radius. this proves you couldn't have picked your
location after the fact — it does not hide your coordinates at reveal time.
commit
commitment (share this now, before revealing):
save this too (needed to reveal later):