Hey Starknet,
We just shipped Glacis Protocol — a Proof of Humanity system built natively on Starknet using ZK-STARKs and NFC passport verification. Wanted to share what we built and get feedback from the community.
What it does
Users tap their NFC passport on an Android phone. A STARK proof is generated, verifying the government’s RSA-2048 or ECDSA P-256 signature over the passport data. A deterministic nullifier (Poseidon hash, no user salt) prevents double-registration. The proof is submitted on-chain. The wallet receives a non-transferable SBT with a 5-year TTL.
Zero biometrics. Zero PII on-chain. The only public values are a nullifier and a scoped pseudonym per application.
Why pure Cairo
Existing solutions (Worldcoin, Gitcoin Passport) are either biometric-based or SNARK-based (not post-quantum). We rewrote the entire stack in Cairo: BigUint arithmetic for RSA-2048 (16 limbs, 128-bit), Montgomery CIOS multiplication, PKCS#1 v1.5 padding, SHA-256, ECDSA P-256 with Shamir’s trick, and full ICAO 9303 passport parsing. No Circom. No Noir.
Current numbers
•RSA-2048 in Cairo: 3.96B gas, ~168s Stwo prove time on 128GB server
•ECDSA P-256 in Cairo: 932M gas
•286 tests across circuits, contracts, SDK
What is deployed
5 contracts on Starknet mainnet (addresses below). TypeScript SDK: `npm install @vauban/glacis-sdk`. Dashboard and API docs: https://glacis.vauban.tech
Mainnet contracts:
•GlacisVerifier: `0x075c62a57aed1f27e27fbf0a62a234c6c9afbb0918488a44b76240bfa4488f7e`
•NullifierRegistry: `0x06aead833697703c72900455c953c26122fd0cfddfd7c3c3ffd42d4d5a70eaa3`
•HumanAttestationToken: `0x011a05f739a6e546365afaf59e07e762b7540b93b39ec1715c09e70c54d8b7cd`
Questions / feedback welcome
Particularly interested in: (1) whether anyone has looked at Stwo WASM feasibility for mobile proving, (2) thoughts on the nullifier scheme vs OpenPassport’s approach of hashing the issuer signature, and (3) whether the 168s server prove time is acceptable for a production UX or whether we need to push harder on the recursive proving path.