# A measured client-side ZK proof-of-personhood running in 477 ms on budget Android hardware without registries

**URL:** <https://community.zkproof.org/t/a-measured-client-side-zk-proof-of-personhood-running-in-477-ms-on-budget-android-hardware-without-registries/910>\
**Category:** Research\
**Created:** [September 5, 2026, 10:02am UTC](https://community.zkproof.org/t/a-measured-client-side-zk-proof-of-personhood-running-in-477-ms-on-budget-android-hardware-without-registries/910 "2026-09-05T10:02:49Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![rehanmalik2008](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.zkproof.org/rehanmalik2008/32/497_2.png) [@rehanmalik2008](https://community.zkproof.org/u/rehanmalik2008)\
**Post date:** [September 5, 2026, 10:02am UTC](https://community.zkproof.org/t/a-measured-client-side-zk-proof-of-personhood-running-in-477-ms-on-budget-android-hardware-without-registries/910/1 "2026-09-05T10:02:49Z")

</div>

Hi everyone,

I am sharing an empirical research paper and open-source implementation for **Sybil Wedge** , a client-side zero-knowledge proof-of-personhood construction designed to achieve one-human-one-action rate limiting without biometric databases, hardware orbs, or centralized identity registries.

### Core Architecture & Primitives

- **Attester-blinded Secret Commitments:** Users enroll via an identity attester (e.g., OIDC or credentials) without the attester ever learning the secret key or seeing generated nullifiers.
- **RLN-style Shamir Nullifiers:** Double-actions within the same rate-limit window reveal two points on a line, automatically recovering the secret and slashing the membership stake.
- **Arity-8 Merkle Tree:** Reduces tree depth from 20 to 9, bringing constraints down to 4,309 over BN254.
- **Decoupled Epochs:** Decouples `epoch_action` (rate-limit window) from `epoch_tree` (Merkle cadence) to maintain constant state transitions.
- **Dual Revocation:** Implements both in-circuit non-membership checks (+R constraints) and bulk incremental tombstone rebuilds.

### Empirical Benchmarks on Physical Hardware

Rather than theoretical estimates, we benchmarked on entry-level ARM64 hardware (Samsung Galaxy A12, Helio P35, 8x Cortex-A53, 3,751 MB RAM):

- **Phase-2 Proving Latency:**  **477 ms** (native Rapidsnark) / ~3,300 ms (C++/WASM).
- **Peak RAM (RSS):** 361 MB (9.6% of device RAM).
- **Formal Verification:** 6 deployed circuits verified as properly constrained via Picus (Veridise SMT solver), zero findings on circomspect entrypoints, and 24/24 pass rate on adversarial witness tests.

The paper also documents the **four optimization paths that failed** under empirical measurement (including compressed binary trees and full client-side tree rebuilds) to save other researchers time.

### Resources & Open Source

- **Full 22-Page Paper (PDF):**

- **GitHub Repository (Circom circuits, tests, benchmarks):** [GitHub - rehanmalik2008/Proof-of-Personhood · GitHub](https://github.com/rehanmalik2008/Proof-of-Personhood)

I would appreciate feedback, critique on the security assumptions, and discussion on potential standardization or integration!
