Show HN: Anonymous Age Verification
The basic premise is to leverage your bank (who already has had to perform KYC on you to open an account) to attest to your age for age-restricted merchant sites (pornhub, gambling, etc) without sharing any more information than necessary.
Flow works like this:
1) You go to gambling.com
2) They request you to verify your age
3) You choose "Bank Verification"
4) You trigger a WebAuthn Credential Creation flow
5) gambling.com gives you a string to copy
-------------
6) You log into your bank
7) You go to bank.com/age-verify
8) You paste in the string you were given
9) The bank verifies it/you and creates a signed payload with your age-claims (over_18: true, over_21: false)
10) You copy this and go back to gambling.com
---------------
11) You paste the string back into gambling.com
12) You perform WebAuthn Auth flow
13) gambling.com verifies everything (signatures, webauthn, etc)
14) gambling.com sets a session-cookie and _STRONGLY_ encourages you to create an account (with a pass key). This will prevent you from having to verify your age every time you visit gambling.com
The mechanics might feel off, but it feels like this in the neighborhood of a way to perform anonymous age verification.
This is virtually free, and requires extremely light infra. Banks can be incentivized with small payments, or offer it because everyone else does and don't want to get left behind.
And if a country already has a functioning digital ID solution that covers every citizen it should be a simple add-on to add this. The "functioning digital ID solution that covers every citizen" seems like the step to fix _first_ (definitely before imposing age verification laws online!).
Also, having such a system really should be seen as par for the course for any developed country.
https://news.ycombinator.com/item?id=44870161
In fact, the linked article links to the EU website where it is specifically stated that the final protocol will be compatible with the temporary app (the anonymous age verification protocol).
The final app will also serve as a method to identify oneself (i.e. to a police officer) but that's separate functionality from the token based authentication.
The current lack of zero knowledge proofs does pose a potential privacy issue when websites and governments work together to track you across a length of time and re-authentications, but it's not like you're inherently sharing your browser history with the government. As far as I know, the temporary app intents to implement ZKPs but ran into standardization issues, so it's not like this is an intentional shortcoming either.
There are some details thatihjt still need to be worked out for an American implementation (the lack of an eIDAS equivalent, for one), but the EU solution is being developed cross platform, in the open. You can just take the source code, replace/extend the chains of trust with whatever verification platforms you can convince others to join your programme, and reuse most of the existing code.
For an American implementation, you can probably take out the part where verifiers need to be registered with the verification service (which I believe is part of EU law but makes implementing anonymous verification difficult). The wording and name should probably also be changed to be more in line with American expectations, and removing the remote attestation requirement would be nice if your verification services don't demand you include it. I'd also wait for ZKPs to be implemented, or add them to the implementation, to reduce the potential impact of collusion between governments and websites.
The account creation part is optional but probably recommend. I wouldn't lock it to just passkeys, though, having a fallback to classic username/password is probably a good idea just in case.
A better one is Chaum's Ecash protocol: https://en.wikipedia.org/wiki/Ecash
To use a metaphor for that protocol:
This is secure because the bank never saw the UID so they don't know if it was gambling-123 or disney-123. The gambling site can save that stamped UID and give it to the bank (or government) if required, but bank can't figure who came in to get that UID embossed. The only person who knows all the tracking information is the user. And as long as they burn the envelope (which is cryptographically secure), there is no usable tracking information.As long as the bank is Good and uses the same stamp for all users (i.e, they don't use alice-stamp, and bob-stamp, etc for different users), there is no way for anyone to connect that Alice got her gambling-123 UID stamped. But this stamp is normally using PKI so anyone can check the public key of the stamp.
This algorithm was originally conceived to create anonymous "cash" since the bank would charge $1 to stamp your envelope and the gambling site could sell their UID paper to the bank to get that $1 from the bank.
The user's credential is bound to the device and protected by their biometrics (Face ID/Touch ID), and the consent screen feels very similar to using a Passkey (gaining in mainstream popularity) or Apple Pay (pretty mainstream at this point).
- https://www.w3.org/TR/digital-credentials/
- Apple's implementation - https://developer.apple.com/wallet/get-started-with-verify-w... (and moving to the browser in iOS 26 https://support.apple.com/en-gb/guide/apple-business-connect...)
The challenge here is adoption and availability of digital credentials. It appears State Department is allowing iOS 26 to issue digital credential representations of US passports also. Japan are also providing their national ID card in this way. Given some US states' online age verification laws (and whatever it is the UK are trying to do at the moment), seems like a great incentive for those governments to provide robust digital ID infrastructure.
What you need[0] is a certificate, signed by a recognised provider[1], asserting that email address X is associated with a person aged over 18.
Once you have that, you can then provide it to anyone who asks for it. The certificate provider doesn't need to know who you're proving it to. Literally all they have to do is check whatever information they need to[2] to be happy asserting "Oh yeah, that's an adult".
If your browser (or an add-on for it) wanted to make this easy by storing the certificate for you securely, then that would be awesome, obviously.
But there's no reason why the certification provider needs to know who they're certifying your adulthood to.
[0]Assuming that you want a way to prove you're an adult.
[1]That could be a bank, a government, or anyone else who has sufficient levels of societal trust.
[2]Photo of you, use of a credit card, records of you using that email address for more than 18 years. Whatever makes them happy making that assertion, that they'd be willing to stand up in court and defend their processes if one of their certificates was issued wrongly.
This approach does make it rather trivial to clone certificates and spread them, though. All it takes is one kid on their parents' computer dumping a p12 file and the entire school is suddenly bypassing age filters.
Another problem is that colluding websites/trackers (i.e. those "first party" trackers that will use things like CNAMEs to trick browsers into executing their tracker code) can use the public key you use to authenticate your age to track you across websites. Your public key will also be non-repudiable unless your CA often makes you reauthenticate and publishes your private key after expiry (similar to how Signal does this, except less secure).
The alternative is something like the Zero Knowledge Proofs that Google recently open sourced: https://blog.google/technology/safety-security/opening-up-ze...
This would allow you to prove that you have the certificate that was issued to you, without giving up more detail than that.
I think that building that into things is a ways off though.
Kids will still be able to torrent porn, but the end goal of having to use real ID with social networks will prevent any free speech still left and kill online anonymity.
https://www.fdic.gov/news/press-releases/2024/fdic-survey-fi...
Even within the unbanked households, the FDIC link points out that 1/3 use online non-bank services instead. And independently of that, it makes sense that even cash households might interface with online commercial activity: pick up gig work through DoorDash or UberEats or whatever; get paid out through a neighborhood informal-cash-service operator (multiservicio, hawala, guy who informally cashes out undocumented drivers). Or through opening a Venmo or CashApp account instead of a bank account.
That leads to a slightly stronger form of the claim: that those 5.6 million are likely to have undergone KYC/AML through other, non-bank financial providers…
But even then, why should a bank account be connected to whether or not you’re an adult in society’s eyes?
Why would you presume that?
> Not every solution needs to work for 100% of people.
A solution that censors large amounts of speech and culture from millions of people is clearly either insufficient or, if it is deemed sufficient, authoritarian.
1. Some one makes an intermediary service where they allow users to get the age verification from them. Get the information from the user provided to them by merchant, use their own (service providers) bank account to get the token and return back to the user. Identity less age verification is not practically possible, somewhere down the line you have to peg the identification for the user with a common identifier that services can mutually trust.
2. WebAuthn flow has timeouts (everyones spec implementation might be different) associated with it, most people are going to run into that
Webauthn ties the public keys to your device; chases signature of it verifies it; your webauthn authentication of chases signed version of your key proves it was you the whole time.
Nested dolls/Chain of custody.
What am I overlooking?
Who is putting a lot of trust in the bank?
They're slimy af and would sell their grandma's pii for an extra dollar; but that can't happen here.
Bank doesn't know where you came from or where you're going; since you are the transport layer. Nothing of value for them to learn.
Initially they could charge as a premium service, but eventually it would become a commodity. Not offering it would be weird.
[0] https://tlsnotary.org
I wouldn't say I'm that familiar with GPT or Claude, but this fooled me.
My original idea was to have the bank sign a thing that contained your ip address and user agent; have the bank add in an age claim; and copy/paste it to the RP.
I figured it would produce a document a little more on point.
This setup with webauthn feels like overkill; but with banks and regs - it feels more beefy without adding a substantial amount of complexity.
I give that to you, chases signature is valid but you can't perform webauthn auth.
Thats why you cant sell spun up credentials en masse.
Webauthn allows for software authenticators and there is nothing to stop you from transferring it complete with keys to someone else.
The proper-ish solution to the problem are zero knowledge proofs: I get my government or whoever to give me a credential with my date of birth, I go to website which asks me for my age, the website gives me a token, I use the token and my gov credential to generate a proof that says "today i'm over 18" i give proof to website, the website verifies the proof using my governments public key and lets me pass. This way nobody knows anything more than necessary and it protects everybodys privacy. [1]
Hey we make it a standard open protocol! So everybody can implement it easily. We finance a open-source reference implementation. All the children are forever saved from harm. We have parties under rainbows and world peace!
[1] ZKRP's Zero Knowledge Range Proofs: https://arxiv.org/pdf/1907.06381
Hell no! Banks should NOT assume an expanded role in transaction processes; rather, their involvement should be further reduced. The objective should be to establish public consensus that positions banks as an optional payment method, not as an integral component of daily activities. Even in scenarios where banks do not access personal identification information, their institutional power should be constrained rather than extended.
Cashless payment systems present inherent risks for surveillance and control, as they channel all transactions through centralized, heavily monitored networks. Individuals flagged within these systems may face severe exclusion from economic participation without due process protections.
KYC protocols may have poorly regulated flagging databases that lack the procedural safeguards associated with formal criminal records. Unlike criminal records, which require due process for inclusion and can be destroyed, banking flags operate without comparable regulatory oversight. This transfers significant power to corporate entities and their stakeholders, having this “shadow” power that would control the public.
Regardless of anonymity provisions, banks should function solely as optional convenience tools for payment processing, not as mandatory intermediaries in financial transactions or any process. The integration of banking systems into essential processes is the worst for anyone who cares about surveillance free society and create a concentrated institutional power, and it will reduce individual autonomy, financial or not.
You get your verification code
Paste it into my website and pay $15
One of my crowdsourced reps will complete the request for you and collect $7.50
A valid and safe "age verification" (actually to be BANNED because meant as a way to pass internet censorship) could simply be: the State offer FLOSS and open-hardware IDs, we got a USB reader/built in in keyboard, built-in in laptop like we have hat in early 2000, who being all open we can trust, and the a simple boolean request "above age?" with a true or false answer PERIOD.
If we want more we ERASE the not needed anymore banking sector with a state backed crypto and state backed open hardware and FLOSS wallets with a simple display usable as smartwatch or pendent with a retractable necklace like the one we use for skipass, where we could see on a trusted device what we are going to approve or reject.
It's time to craft rules as code, in money/finance and laws/bureaucracy ERASING nazi censorship we see growing everywhere starting with biometry push.
Apart from me going to jail, I mean. How would the protocol prevent this?