Okay, obviously Persona is terribad. There is a real problem to address here though: how are organizations supposed to perform reasonable identity verification at a distance? Sophisticated impersonation attacks hit customer support lines every day. We need a reasonable defense against this.

I'm asking because I honestly can't imagine a solution to this particular problem that is both:

  • User friendly
  • Acceptable to privacy advocates

@mttaggart I wrote about the cryptography needed to build a solution a while ago: https://soatok.blog/2025/07/31/age-verification-doesnt-need-to-be-a-privacy-footgun/

The usability on top of the cryptography is a whole 'nother can of worms, though.

And even if you use good cryptography for privacy, if your endpoint leaks your credentials anyway, you still put users at risk.

Further, even if a good solution existed, the ways the laws and regulations that are being written about these verification requirements are often shitty on top of all that.

There's not an easy answer. But there should be.

Age Verification Doesn’t Need to Be a Privacy Footgun - Dhole Moments

“Won’t someone think of the poor children?” they say, clutching their pearls as they enact another stupid law that will harm the privacy of every adult on Earth and create Prior R…

Dhole Moments

@soatok I remember this post, and I remember bumping on this line:

We would need existing identity verification services (e.g., ID.me in the USA) to vend PrivacyPass tokens that can be redeemed on third party websites.

This is where I think a lot of privacy advocates are gonna get off the bus.

@mttaggart Anonymous credentials are a well-studied area of cryptography. If they balk at them, I dunno what to say lol
@soatok I mean reasonable or not, state-adjacent anything is just anathema right now. It's not a technical problem!

@mttaggart @soatok I'm sure you can cobble something together using noir - it's an awesome framework, and makes ZKPs so much nicer.

Create a circuit which has been peer-reviewed and is identified by its hash
Private input: any ID, must be rooted (signed) by a trusted third party
Public input: whatever you want to know about the ID, plus the root (public key) of the trusted third party
Proof: I have an ID with a signature verifiable by the public key and fits the requirements