This repo aims for exploring the PoC of ZK-based human verification for BBS (Bulletin Board System) platforms. The tech is targeting for using OpenAC and its implementation from PSE's zkID team to verify Taiwan's Citizenship Certificate.
One-time per credential proof for BBS server
- Verify the user holds a valid mobile citizenship certificate
- no need extra check on age and nationalities since holding the certificate proves that
- Verify the mobile citizenship certificate has not been registered before
more common for both physical citizenship certificate (physical card) and mobile citizenship certificate (mobile app)
![]() |
|---|
| mobile citizenship certificate (mobile app) |
![]() |
|---|
| physical citizenship certificate (physical card), requires a card reader |
- User → Issuer: apply mobile citizenship certificate
- User → Web App: use API to fetch mobile citizenship certificate, and wrap it into JWT-format VC
- Web App: Generate ZKP
- Web App → BBS server: Submit ZKP with API
- BBS server: verify ZKP
- if pass, update user DB with
user.vcVerified = true - if failed, update user DB with
user.vcVerified = failed
- if pass, update user DB with
- Fetch mobile citizenship certificate data with APIs
- Wrap raw data into JWT-format VC
- Generate ZKP using OpenAC
- (OpenAC → wasm-bindgen → WASM)
- Send ZKP to BBS for verification
- APIs for OpenAC proof verification on BBS server
- Go, FFI can use https://github.com/ihciah/rust2go
![]() |
|---|
| mobile citizenship certificate (mobile app) |
- BBS mobile app → API to fetch mobile citizenship certificate and wrap it into JWT-format VC
- within mobile app: generate ZKP (with mopro-ffi bindings)
- mobile app → BBS server: submit ZKP with API
- BBS server: verify ZKP
- if pass, update user DB with
user.vcVerified = true - if failed, update user DB with
user.vcVerified = failed
- if pass, update user DB with
Integrate with existing official mobile app for specific BBS
- Fetch mobile citizenship certificate data with APIs
- Wrap raw data into JWT-format VC
- Generate ZKP using OpenAC with mopro-ffi bindings
- Send ZKP to BBS for verification
- APIs for OpenAC proof verification on BBS server
- feasibility check
- Go, FFI can use https://github.com/ihciah/rust2go
- feasibility check


