Digital services offering content unsuitable for minors increasingly require user age verification. Existing solutions, such as self-attestation, biometric estimation, and document upload, are either trivially bypassable or expose users to the risk of personal data misuse. In this thesis, we therefore designed and implemented a system for anonymous age verification, based on zero-knowledge proofs (zk-SNARK, the Groth16 system). The system consists of a verifiable credential issuer, a wallet implemented as a Firefox browser extension, and a verifier in the form of a website. For hashing and signing, we used cryptographic primitives adapted for use within Circom circuits – the Poseidon hash function and the Baby JubJub curve. Our AgeCheckV2 circuit contains 4480 constraints; proof generation takes 418 ms on average, while verification takes 1022 ms. The analysis showed that the verifier cannot infer anything from the proof beyond whether the condition is satisfied, distinguishing the system from existing approaches such as selective disclosure. The system currently does not address credential revocation and relies on a simulated trusted setup, which remain the main obstacles to potential production use.
|