Video thumbnail

ZKTap

I'm building the ‘Apple Pay’ of verified truth — except you’re not paying, you’re proving something.

ZKTap

Created At

ETHGlobal Prague

Project Description

ZKTap is a privacy-preserving, real-world identity verification system that lets users tap their phone to a reader and prove a fact about themselves - like being over 18, a student, or a verified member - without revealing any personal information.

It leverages zk-SNARKs and NFC technology to compress verifiable claims into a single tap, enabling anonymous, trustless, instant verification in physical environments like events, stadiums, campuses, and local businesses.

Today, proving identity in the real world is messy - you show your government ID to a bad actor a bar and then you've leaked your name, address, birth date and other personal information.

Alternatively, you can try connecting this information with your wallet address and reveal your entire on-chain history...

There is currently no way to prove these claims privately and instantly in offline or semi-offline environments.

This is where ZKTap comes in, the first to bring Zero-Knowledge Proofs to NFC and mobile phones.

ZKTap lets users generate a zk-SNARK proof (via VLayer) showing that they've met a specific condition (e.g. NFT ownership) without revealing their wallet, identity or data.

The proof is around ~750 bytes, stored locally on the phone, and served via Android NFC Host Card Emulation (HCE). When tapped against a reader (e.g., another phone), the proof is sent via APDU command, and verified.

No tracking. Just cryptographic truth — on tap.

How it's Made

📲 Mobile App (Prover)

  • Kotlin Android App
  • Generates zk-SNARK proof server-side (VLayer). In production, I will move this from server-side to mobile side. But was unable to due to time constraints in the hackathon.
  • Stores the proof locally
  • Using Android Host Card Emulation for NFC
  • Sends full proof payload upon tapping the reader

📡 Reader App (Verifier)

  • Basic Android Kotlin app
  • Compatible on any Android device but demo'ed on Urovo i9000 Card Terminal. (Also technically possible on iPhone but time constaints)
  • Receives proof upon NFC connection
  • Verifies it using VLayer’s verification key

Shows ✅ if valid, ❌ if not

🔐 The Proof Uses a circuit proving the user holds an 18+ age-verified NFT

zk-SNARK ensures:

  • Correctness (claim is valid)
  • Privacy (wallet address is not revealed)
  • Compactness (fits in ~750 bytes)

📊 API

  • Typescript/Express/Node.js
  • Used for creating proofs temporarily, plus connecting with Revolut's KYC for NFT issuance

🖥️ Web Frontend

  • Typescript/React/Vite
  • Used to connect wallet and then connect with revolut KYC for age verification

🐵 Verified NFT

  • Basic ERC-721 Contract
  • In future will add more functionality like non-transferable etc.
background image mobile

Join the mailing list

Get the latest news and updates