Over the past few months, I’ve explored digital identity, learning from experts, understanding key challenges, and evaluating privacy technologies in current systems. The lack of interoperability, standards, documentation, and developer tools appears to be the main obstacle hindering the adoption of privacy-focused technologies. This is especially true for protocols that fall under what 0xPARC calls "Programmable Cryptography", namely those protocols that mark a shift from specialized cryptographic systems, like public-key encryption and digital signatures, to more general-purpose ones. These include zkSNARKs, MPC, FHE, Witness Encryption, and Obfuscation.
That said, it was reassuring to see that many people and organizations are actually already actively working to overcome these challenges. Efforts range from promoting the adoption of specifications to creating comprehensive documentation, improving the developer experience, and establishing format standards. Most importantly, there is a gradual but essential process of abstraction underway, which aims to make these protocols accessible to a broader audience without any background in cryptography, while also enabling a paradigm shift in how we approach them. Instead of treating them as isolated tools, abstraction allows us to think of them as interoperable components that can be combined to create more powerful, multi-faceted privacy solutions.
This article aims to clarify the topic by exploring two recently emerged solutions that have notable similarities but also important differences. While they might seem like alternatives, they could actually complement each other: POD2 by 0xPARC and SelfAttestHub by PSE.
But before moving forward, let’s go back to the origins and examine the challenges that inspired these solutions.
If we were to identify a common thread running through all the issues, it would likely be the challenge of making a real-world impact. At its core, this means bridging the gap between "Programmable Cryptography" protocols and the mainstream digital ecosystem, that is the everyday apps people actually use. But this isn't a sudden realization that emerged in recent months, but rather a growing awareness that has developed over the years, driven by the gradual maturation of development tools made possible through the combined efforts of individual contributors and teams.
The origins of these protocols go back around 40 years, to when Micali, Yao and co published the first research on zero-knowledge proofs and multi-party computation. For a long time, these ideas stayed in the world of theory, understood only by a small circle of researchers. Things started to change when a few bold developers decided to turn theory into practice, creating domain-specific languages (DSLs) like Circom and other tools, which in turn paved the way for a range of protocols built on top of them.
Over the past five years, various teams, working more or less independently, have then focused on implementing new protocols. Their efforts have gradually improved the developer experience, enhanced documentation, and expanded both the range of use cases and the community of developers involved.
However, it’s still not enough to reach critical mass and make these technologies mainstream. We’re still just getting started. So, what are the challenges we face today?
We need to move forward on three fronts in parallel: developer experience, interoperability and adoption.
Developers, developers, developers! A lot has been achieved, but we still need more cryptography developers to make existing tools even simpler for the broader developer community, especially in mobile and web environments. We need greater abstraction, hiding unnecessary complexity, and making cryptography accessible to everyone, not just a small niche of enthusiasts and experts.
I’ve personally spent the past few years working on this through Semaphore, and I still believe it’s absolutely essential.
Although we’re starting to see some progress, most projects continue to operate in silos, within an environment that remains too fragmented, lacking both coordination and a clear overarching vision.
What we need is composability, along with meta-protocols and infrastructures built around modular components, drawing inspiration from a well-known success story: Ethereum, with its smart contracts and EIPs.
We also need a streamlined system of specifications and standards. The work done by ZK-ID (a PSE project), from which SelfAttestHub was born, has made it clear that the lack of standards and coordination is the main reason why not only ZK protocols but the entire digital identity space remains highly fragmented today.
We need to experiment and build real-world applications, gather feedback from developers and people with diverse backgrounds, and showcase how these protocols can be applied through practical examples, education, and outreach. Projects like Cursive and Zupass are great examples of how to move forward.
Last but not least, we must closely monitor the progress of governments and institutions in the field of digital identity. It's essential to advocate for the use of privacy-focused technologies and ensure that the protocols we develop are compatible with the standards that will ultimately be adopted. We cannot predict whether the future will revolve around W3C standards, X.509 certificates, or an entirely new paradigm. What we do know is that we must be prepared to support it, no matter what form it takes.
To describe POD2, it's essential to first define the concept of a POD as envisioned by 0xPARC and understand its first implementation, POD1.
A POD is defined as a standard for cryptographic data and enables secure data storage and sharing with integrity guarantees, supporting a more interoperable and privacy-preserving internet. Users can share verifiable, unaltered data, with cryptographic operations allowing redaction, transformation, and aggregation while preserving end-to-end verifiability.
To a user, a POD is a piece of cryptographic data attested by some issuing authority. A POD can serve as proof of event attendance, a secure message, a collectible badge, or even an item in a role-playing game. For a developer, a POD object is a key-value store that can hold any signed data.
POD1 is the first implementation of this concept, and it can in this case be described in detail since it was successfully used at the last Devcon in Bangkok in November 2024. If you attended Devcon, you likely scanned a QR code for your ticket using the Zupass app and may have collected crypto frogs. All of these were PODs.
When a POD1 is issued, its entries (key-value pairs) are hashed as part of a Merkle tree, precisely a LeanIMT. The root of that tree is signed by the issuer, and the so-called GPC (General Purpose Circuits) allows developers to generate zero-knowledge proofs from a simple proof configuration (i.e. a human-readable JSON format). GPCs can then prove properties of one POD or several PODs together. Additionally, PODs can be proven to be owned by the prover using a Semaphore identity.
POD2 is the natural evolution of POD1, addressing three key limitations of the original version:
The solution proposed in POD2 shifts the approach from handling data issuance and signing within its system to enabling the import of any externally issued cryptographic data. This data is then converted into a format compatible with the POD ecosystem through a specialized component known as the “Introduction Gadget.”
For example, imagine a crypto frog generated at Devcon — essentially, a zero-knowledge Groth16 proof created using GPC and POD1. Through the Introduction Gadget, this proof is transformed into a POD2-compatible proof, meaning it now adheres to a proving system that can be fully integrated within the POD2 ecosystem.
In addition, POD2 introduces new cryptographic primitives, like recursive proofs and MPC (Multi-Party Computation), or potentially FHE (Fully Homomorphic Encryption). This evolution allows for composable proofs, where the output of one POD can serve as the input for another. And each POD can receive multiple inputs from different parties, enabling the creation of verifiable and interoperable computational graphs.
This composability clearly unlocks a world of possibilities for more complex workflows and seamless cross-party interactions within the POD2 ecosystem.
Building on the foundation established with GPC in POD1, which aims to abstract the complexity of writing zero-knowledge circuits, POD2 also introduces a new paradigm called the "zk Logic Virtual Machine" (zk-LVM). This approach shifts the underlying concept of zkVMs from "circuits proving the state transition of a CPU architecture" (CPU model) to "circuits proving the correctness of logical operations on statements" (Logic model).
The core idea is to let developers write circuits using a predefined set of logical statements like ValueOf, Equal, NotEqual, and GreaterThan within a specialized logic programming language (like LISP), eliminating the need to deal with the low-level complexity of circuit design.
The concepts behind POD2 are still being explored, but the vision is clear. It aims to create a composable system that leverages new cryptographic primitives and technologies to import the vast array of real-world data into an ecosystem where advanced computations on encrypted data can be performed. At the same time, it seeks to provide developers with intuitive, easy-to-use development tools, significantly lowering the barrier to entry for building privacy-preserving applications.
If you want to dive deeper into PODs, I highly recommend checking out these resources from the 0xPARC website and Devcon in Bangkok:
While SelfAttestHub is built on principles similar to POD, it emerges from ZK-ID's research in digital identity and the alignment of some PSE projects. By identifying key challenges in the Self-Sovereign Identity (SSI) space, the team proposed a solution that enables PSE's data provenance projects (e.g. AnonAadhaar, OpenPassport, TLSNotary, ZKEmail) to coexist within an on-chain infrastructure while maintaining full compatibility with the VCs/DIDs standards ecosystem. The core objective is to provide a shared interface, ensuring that PSE proofs can be seamlessly consumed and utilized by identity providers in real-world applications.
A key aspect of this infrastructure is the use of blockchain as a Verifiable Data Registry (VDR), which is crucial for SSI. It provides a decentralized, tamper-proof trust layer that enables users to control their identities through Decentralized Identifiers (DIDs), anchor cryptographic proofs, and manage revocation registries in a secure, transparent, and privacy-preserving manner.
Building on this foundation, SelfAttestHub's approach, inspired by Iden3, shifts proof verification to smart contracts. Users generate identity proofs client-side and submit them to smart contracts, which act as decentralized issuers. These contracts verify the proof and add users to on-chain groups, allowing verifiers to check membership status without re-verifying the original proofs. The verification process is managed through a unique verifier contract, streamlining proof validation and ensuring a unified, consistent approach to verification across different groups and use cases.
To enable selective disclosure, SelfAttestHub uses a two-level Merkle tree structure:
When a verifier requests specific attributes, the user generates an identity proof with the corresponding Merkle proof for the requested attribute. This is shared as a Verifiable Presentation, allowing the verifier to check if the user's identity root matches the one previously committed on-chain, ensuring privacy and data integrity.
Alongside the progress made by the ZK-ID team, several teams within PSE also started exploring ways to integrate multiple PSE projects beyond the context of SSI and W3C standards. An example of this is Sinu's proposal to bootstrap private Identity Sets (i.e., Semaphore groups) using TLSNotary.
This vision of connecting multiple protocols within a modular, shared infrastructure, rather than maintaining isolated and non-interoperable projects, clearly aligns with the approach of SelfAttestHub. In fact, SelfAttestHub itself could potentially be built entirely using PSE protocols. For example, one promising approach is to use Semaphore groups (LeanIMT) instead of Iden3's Sparse Merkle Trees for the claim tree, and leverage POD1 for the identity tree.
The main challenge would undoubtedly be to preserve essential SSI properties such as selective disclosure, recovery, and revocation. However, let's assume these issues can be addressed with a PSE-driven solution. With this in mind, let's engage in a experiment to conceptually design this solution:
An interesting feature is that once gatekeepers are established to grant access to Semaphore groups, those same groups can then be used in combination to create new gatekeepers.
Imagine a user utilizes AnonAadhaar to join a Semaphore group representing Indian citizens over the age of 18. Later, the user also joins a second Semaphore group that represents individuals who have a valid driver's license. By combining the proof of membership from both of these groups, the user can gain access to a new group that represents "Indian citizens over 18 with a valid driver's license." Instead of having to prove both credentials separately, the user only needs to provide proof of membership in this new combined group, effectively demonstrating possession of both credentials in a single step.
In a way, it's similar to recursive proofs. The proof generated from one Semaphore group can serve as an input (or condition) to join another Semaphore group, and this process can be repeated iteratively, enabling the creation of increasingly complex credential compositions.
At this point, some clear similarities with POD2 begin to emerge, which will be described below.
For a deeper understanding of the ideas behind this solution, I recommend reading the following articles:
As highlighted in the previous sections, SelfAttestHub and POD2 are two distinct solutions with notable similarities and differences, yet they have the potential to be complementary. Both aim to tackle key challenges related to interoperability and composability, but while they share a common goal of enabling seamless workflows, they diverge significantly in their design choices and probably target use cases.
The convergence of programmable cryptography and self-sovereign identity (SSI) highlights shared challenges like interoperability, standardization, and developer accessibility. POD2 and SelfAttestHub might present two distinct yet complementary approaches. POD2 focuses on a composable, general-purpose cryptographic system, while SelfAttestHub offers an on-chain infrastructure for privacy-preserving identity systems. Both solutions aim to abstract complexity, foster interoperability, and increase accessibility for developers and users.
By aligning these efforts, the privacy-tech ecosystem can accelerate adoption, unlock composability, and enable a new generation of modular, privacy-preserving applications.