Written by Vivek of 0xPARC. Including ideas from Aayush of 0xPARC + Andy, Danilo, Barry, and Althea of PSE
Zero knowledge cryptography is becoming more practical on many fronts. Computationally, proving simple statements in ZK (pre-image of hash, set membership) is fast enough to run on mobile phones, and proofs are small enough to cheaply verify on-chain. For developers, the work of groups like iden3, PSE, and zcash have made deploying new circuits much easier. And educationally, work from groups like 0xPARC and ZKHACK has given more people the vocabulary to understand the unique affordances of zkSNARKs.
As a result, we are finally starting to see meaningful deployments of zkSNARKs that the average (zk interested) person can understand and play with. One of my favorite examples has been in-person pseudonymous groups at some recent conferences. I think in-person groups are kinda fuckin hype for a few reasons:
Past deployments have included an anonymous Twitter feed I built for attendees of the Stanford Blockchain Conference back in August, explored in detail here: https://personaelabs.org/posts/sbcheyanon/. For Devcon, PSE built a richer and more secure experience with the Temporary Anonymous Zone, detailed in their blog here: https://mirror.xyz/privacy-scaling-explorations.eth/plfDBIpiKZVyNSJWhE9vix76JaJoJ1seDfRAddV7HEc
These experiments were super fun, and in total got a few hundred people interacting with ZK proofs for the first time. But due to the experiments only running for the length of the conference and not getting regular usage, it was difficult to extract useful product or UX insights.
On the other hand, Zuzalu seems like a much more optimal setting for experiments with ZK-enabled interaction. It'll run for two months, meaning we can have experiments that run over weeks instead of days. It'll be a cohort of cryptography pilled folks who will be willing and excited to try wacky ZK experiments. And the vibes the organizers are trying to create seem uniquely thoughtful, open, and collaborative, which will create a safer environment to deploy powerful (and potentially destructive) pseudonymous speech technology. With that in mind, my current two goals for Zuzalu are as follows:
More concretely, this currently consists of:
I expand on each of the above points in the following sections.
Both of the previous in-person ZK deployments have used some sort of QR code invite system, similar to event POAPs. Each QR code needs to be printed out and unique, which is unnecessarily wasteful and also difficult to get right! I had a lot of trouble getting stuff ready for SBC and I remember TAZ had to delay getting started by one day due to a printing mishap.
Thanks to a connection from Yi Sum of Axiom, I've been collaborating with the folks from IYK for the past few months, who were behind the NFC ENS cards at Devcon. They've given me a few NFC devices that when tapped automatically redirect users to a site of my choosing, with a "?iykRef=abc" query that is unique and single-use.
An IYK NFC disk. very sexy.
Now, setting up a new group becomes as easy as changing the redirect link and letting people tap the disk while they first register for an event or when they complete some activity!
If possible, I'm also very interested in integrating with Semacaulk for efficient on-chain group management. But this likely isn't a priority as the Semaphore contracts are so easy to deploy and still fairly cheap.
Part of the reason there aren't many Semaphore groups is because we don't have robust infrastructure to store and manage different Semaphore identies. TAZ used localStorage to store the Semaphore private key, which restricts it to a single device and can lead to it getting removed if localStorage starts filling up too much. There's some other great work from PSE on CryptKeeper, but as it's a Chrome extension it can't easily work on mobile platforms.
Over the past few months, myself and Enrico Bottazzi have been doing a deep dive into the WebAuthn standard, a way to remove passwords by generating a public/private key pair, sending the public key to the server, and authenticating by signing some challenge. The private key is kept securely on the user's device, and signatures can only be made with biometric approval (TouchID, Windows Hello). And your device will only access the key pair for a specific website if you're in a secure context (i.e. an HTTPS connection with the website you're logging into) which prevents phishing! It's fairly easy to set up, and works across the vast majority of devices.
After some close inspection of the spec, it turns out each key pair generated is also associated with a unique credential ID. This turns out to be a great Semaphore private key for Semaphore group membership and signalling! And WebAuthn allows you to create multiple keypairs, thus allowing you to use it as a natural Semaphore wallet that's secured with biometrics! I'm skipping some details here, but will link a presentation with more details in a few days. A repo with this scheme implemented can be found at https://github.com/vb7401/heyauthn
Using this WebAuthn semaphore wallet, you're only allowed to signal after a valid biometric has been provided, which is a fairly clean and secure UX.
If there's only one anonymity set of "Zuzalu attendees", we might as well just have a Google Form that's only shared with attendees that people can use to post things. It seems the real unlock comes when we have a variety of labels and attestations to choose from, potentially even combining multiple when necessary. I want to have a few different ways for people to attach reputation to their Semaphore identities ready by Zuzalu:
Relevant tools for managing the groups created by these sorts of attestations is ZK-Groups from PSE, which is a Semaphore group management tool being built out which could allow for certain types of attestations being made more easily by Zuzalu staff on top of a Semaphore identity system.
Personally, I lean towards having anonymous feeds on existing social media and chat platforms instead of creating a separate platform for a few reasons:
But this is also a great chance to get more usage for products from PSE and other folks, so definitely want to figure out what's best for everyone! For existing platforms I see the following breakdowns:
Choosing the right events and long-running feeds is necessary to direct this technology towards more open and honest discussion over toxicity. I think toxicity isn't strictly negative; at the very least it makes for good content. But if we want this technology to be used positively, then toxicity cannot be the primary use case (which there's a lot of precedent for, e.g. 4chan and cyber bullying).
One excellent idea from Danilo of PSE is that we can directly integrate Semaphore based identity into the events page, whether that be
This is also probably where Zuzalu organizers will have the best input on what to build as they'll be most familiar with who is attending and what sorts of setups would be most engaging for attendees and useful for organizers. Here's some ideas:
From Danilo of PSE, we could have a ZK-enabled multisig to allow for private donation / grant giving to projects that are being built out at Zuzalu! Another similar idea is explained by him here:
"Needs/Offer" Dapp, where members can privately post some(dont see an issue of being offchain) of their needs so others can support or members can privately posts some things they can offer to the community privately(or not in this case).
The idea is that users would be able to see the lists of Needs/Offer , chat, if both party agrees, they become known to each other.
(I truly believe that selfless work/contribution is a must for a strong community building)
Mainly, we need to try a bunch of different things and see how people respond / how it affects the sorts of conversation people have. Would love to hear ideas from PSE as you guys have a bunch of experiments exploring this already (UniRep, cocoverse, etc.)
It'll be a very good sign if visitors enjoy the experiments we have at Zuzalu and want to replicate it at their own events and offices. As a result, I think it'd be good to aim for an easily reusable setup by the time Zuzalu starts so the zk-interaction meme can spread beyond just PSE/0xPARC!