Welcome. This site allows you to prove that an Aadhaar holder is at least 18 years old using zero-knowledge proofs. No other information about the holder is revealed by the generated proof. An image of the holder's Aadhaar QR code is required to generate the proof.
This site was made by Saravanan Vijayakumaran of IIT Bombay. Ayush Modi of Christ College, Bengaluru helped with the initial design during his summer internship at IITB Trust Lab.
Is my Aadhaar QR code stored by this site?
No. The entire proof generation occurs in the browser. The QR code data is not sent to any server.
I am not convinced that this site does not store my Aadhaar QR code data. Where can I find the source code of this site?
Source code will be released soon. In the meantime, you can use the demo files. See next question.
Can I see a demo of the proof generation and verification without uploading my Aadhaar QR code?
Yes. Use the demo file options in the Prove and Verify pages.
How long does the proof generation and verification take?
Prior to proof generation and verification, this site needs to generate some public parameters which takes less than a minute. A rule of thumb for calculating the proof generation time is to multiply the public parameter generation time by 15.
On a desktop/laptop computer, proof generation takes about 2 minutes. On a mobile device, it can take 10 minutes or more.
On a desktop/laptop computer, proof verification takes about 8 seconds. On a mobile phone, it can takes about a minute.
How big are the proofs?
Proof files are about 15 KB in size.
Proof generation is taking a long time. How can I monitor its progress?
If you are using a browser on a desktop/laptop computer, you can monitor progress of proof generation using the Javascript console in the browser's developer tools. It can be opened by pressing F12 on Chrome and Firefox. If you are using these browsers on a Mac, you need to press Cmd+Opt+J. On Safari, you need to first enable showing the developer menu first and then press Cmd+Opt+C. See instructions here.
On a mobile phone, there is currently no way to monitor progress.
WARNING: Opening developer tools can significantly slow down proof generation in some browsers (Chrome, Brave). We have observed proof generation taking 3 times longer when Javascript console was open.
If the proofs reveal no information about the holder except the fact that they are an adult, what prevents multiple people from reusing a single valid proof?
The generated proof contains a nullifier which is a cryptographic hash of the data in the QR code (excluding a time stamp that changes everytime a QR code is requested). This nullifier is unique to a holder as long as they don't change their name, address, date of birth, gender, address, photo, or mobile number. So an application can use the nullifier to prevent reuse of a holder's QR code.
A couple of caveats. Firstly, if a holder changes their identifying data then the nullifier will change. To prevent multiple valid proofs from the same holder's data, the verifier can require that the timestamp in the QR code be recent (for e.g., within the last week). This feature is not implemented in the present demo.
Secondly, the nullifier can be used to track a user across applications. This kind of tracking can be prevented by generating an application-specific nullifier. The prover will accept an application name as input and generate a proof that contains a nullifier that will depend on both the application's name and the user's data. This feature is also not implemented in the present demo.