we are the team that built zk0fficer - the zk0fficers, if you will (Ben, Derya, Niklas)

Team's submissions

zk0fficer Freedom to Transact Social Impact

The problem zk0fficers solves

Currently, credentials and identity is a trust based system when it comes to authenticating. At the moment, chances are any time that you want to complete KYC, you’re taking a photo of your entire identity, and shipping it off to a server whose security practises you have to trust.

This is obviously not ideal, and zk0fficer looks to provide an initial solution to reusing existing credentials anonymously.

zk0fficer allows for the reusing and validation of existing digital credentials, while keeping your credentials private. You can present your credentials to the zk0fficer, and they can validate their legitimacy, without knowing anything about them.

Challenges you ran into

This would have been a much nicer user experience if users could tap an NFC chip to retrieve their signed message they are trying to prove and reuse - but it costs $99 to use NFC chips on apple devices (and that’s after being approved!!). Aside from that, the general development was smooth, with the exception of a few API rate limits that we had to work around.

Technology used

  • Aztec/NoirJS: We wrote our zero knowledge circuits to prove credentials privately in Noir, and compiled them to both WASM and Solidity contracts for testing/implementation
  • Hardhat/Solidity: Our unit tests for our ciruits and proofs are all within our hardhat project (./protocol) in the repo
  • NextJs: This is what our example site is built with, using Vercel to host.

For our pitch deck - we build an example site here: https://zk-officer.vercel.app/. Here’s some example accounts that you can (hopefully 🤞) use our front end with:

First Name Last Name Hash
Phil Merkle 0x19dc6c8f6b79127c4b0d8cab019d29e3d636a5d7f6fccb0e0006e14eec906a2742161fb142d8335996e707023665356a03ddc944a9446e0168d60b866ea83edd1b
Karli Lightbulbs 0xdd6ae9d5bd750ec960b7eed749b9467bc917b9ee39968cb2ee268eae73f35baf66b5698b5cd594ff900c0c334b55b708219bd11307f4f20b29a0e05107ebb2831b
Johnson McDoogal 0x44d2e182694594b900920a467c5605dda77785d83f0d4922fe357c68588984b742676953226795bb8822570720ccecdf8bc66784eb36567d14a984bd8328256e1c

There’s some example videos of how to use these values in our Github README.md