Z

zkCreds

Credential verification with no data leakage

Z

zkCreds

Credential verification with no data leakage

The problem zkCreds solves

In the current systems if we want to prove some data or presense of data then we are almost always required to submit excess data. Like if you are going to watch a R Rated movie then the only thing you should show is that your age is greater than 18. But there is no way to do that without showing extra information like your exact date of birth, name, college name(in case of student ID), phone number etc. If you want to buy a sim card then the only thing which is necessary to prove is that you are an indian national and your nationality is verified by government but instead almost everyone is required to show their aadhar card which contains all your digital data like address, phone number, date of birth etc.

zkCreds is an credential verification implementation using aztec protocol. Aztec Protocol enables us to prove certain information to anyone without revealing the exact information and also without leaking any data. We are using zero knowledge range proofs to prove some information like you are above 18 yrs old without revealing your exact date of birth.

Using such credential verification anyone can:

  1. Prove that they are eligible to vote or are underage or are of legal age to drink.

  2. Prove that their location is verified. They can prove that they live in india or karnataka or any other state without revealing complete address.

  3. Prove that their annual salary is between a certain range without disclosing it. This can help them in getting bank loans without disclosing full information.

  4. Proving hold of an information without revealing that information like proving that you have a driving license and know how to drive a car without showing the license number.

  5. Proving that you have a certain level of education (high school, bachelors) or proving that you have done masters without telling them anymore about that.

Using zkp for verifying credentials is faster and has less chances of users cheating the system (no chance of fake ids or fake credentials).

Challenges we ran into

  1. Aztec doesn't have support yet for PublicRangeProofs which allows you to check if a note value lies between 2 integers. Instead we had to work with the existing PrivateRangeProofs where we can check if a given note has value greater than another comparison note. Had to devise a hack to use this model to get the PublicRangeProof functionality.

  2. Found a bug or two in aztec.js library which caused us major headache for a while.

  3. We encountered huge challenge when using truffle'test suite. It made some assumptions and didn't specify what they were and due to which we had to check our smart contracts, test logic again and again. The problem was instead in truffle's architecture (assuming that contract instance is maintained in one test, it wasn't and there was almost no logs showing why our tests were failing)

Discussion