"I can prove to you that I know the combination to the safe without opening it or telling you the number."
— That is the promise. What I cannot do is prove to you that there is nothing stolen inside the box without opening it. And that is the problem.
Zero-knowledge proofs (ZKP), along with FHE, are the other great technical promise that appears in debates about Chat Control. The idea is that a user could prove that their message does not contain CSAM without revealing the content of the message.
It sounds perfect. The devil is in the details.
What is a zero-knowledge proof?
A ZKP is a cryptographic protocol that allows a prover to demonstrate to a verifier that a statement is true, without revealing any additional information beyond the validity of the statement.
Formally, a ZKP protocol for a language must satisfy:
- Completeness: if the statement is true, the honest prover convinces the verifier
- Soundness: if the statement is false, no dishonest prover can convince the verifier (with non-negligible probability)
- Zero-knowledge: the verifier learns nothing more than the validity of the statement
Prover: "I have a proof that M ∉ B (CSAM)"
│
│ ███████████████████████
│ █ ZKP Protocol ████████
│ ███████████████████████
│
▼
Verifier: ✓ "M is not in B" (without seeing M)
Private Set Intersection (PSI)
A relevant variant is private set intersection (PSI), where two parties can determine the intersection of their sets without revealing the non-shared elements.
In the context of CSAR, the idea would be:
- User: has a set of messages
- Platform/authority: has a set of known CSAM hashes
- PSI: determines whether without either party revealing their complete set
User: M₁, M₂, M₃, ... Mₙ
\
PSI → Non-empty intersection? → yes/no
/
Authority: h₁, h₂, h₃, ... hₖ (CSAM hashes)
If yes → the user has at least one CSAM message (but not known which)
If no → the user has no CSAM messages
The practical problems
1. Unknown CSAM is not detected
PSI only detects matches against a pre-existing database. But most CSAM detected today is new material —images and videos that were not in any database because they had not been previously reported.
A PSI-based system:
- Detects already known CSAM (existing hashes)
- Does not detect new CSAM (you cannot hash what you do not know)
- Requires constant database updates
2. The classifier is not a hash
Detecting new CSAM requires content-based classifiers (neural networks, perceptual embeddings). A classifier of this type is not a function that can be efficiently executed inside a ZKP.
Modern ZKPs (zk-SNARKs, zk-STARKs, Bulletproofs) can prove complex computations, but the cost of generating a proof for a medium-sized neural network remains prohibitive:
| Proof type | Generation cost | Verification cost | Applicable to CNN |
|---|---|---|---|
| zk-SNARK | O(log n) | O(1) | Yes, but huge cost |
| zk-STARK | O(n log n) | O(log² n) | Yes, large proofs |
| Bulletproofs | O(n) | O(n) | Only small computations |
| PSI (ECDH) | O(n) | O(n log n) | Only hashes |
3. The update problem
Even if running a classifier inside a ZKP were viable, the problem of classifier updates would remain. If the authority can remotely update the classification model, then:
Time t: Classifier C₁ → ZKP → "M is not CSAM"
Time t+1: Classifier C₂ → ZKP → "M is CSAM" (for the same M)
The user cannot know whether the new classifier is looking for CSAM or anything else. And since proofs are verifiable, the authority can re-evaluate past messages with new classifiers.
4. False positives and privacy
A false positive in a ZKP system is qualitatively different from a false positive in a traditional system. In a traditional system, the operator manually reviews the content and discards the false positive. In a ZKP system:
- If the ZKP says "CSAM detected," the operator cannot review the content (it is encrypted)
- The operator must either trust the ZKP or request the decryption key to verify
- If they request the key, the ZKP becomes irrelevant
- If they do not request the key, they accept all classifier verdicts as true
ZKP says "CSAM detected":
├→ Request key → M is decrypted → privacy is lost
└→ Trust ZKP → accept verdict → what if it is a false positive?
The dead end
ZKPs and PSI are powerful cryptographic tools for well-defined problems:
| Problem | ZKP/PSI solves it |
|---|---|
| Prove you know a hash without revealing it | Perfect |
| Prove a message is not in a hash list | Feasible |
| Prove an image does not contain new CSAM | No |
| Classify an image with a neural network without revealing anything | Technically possible, infeasible |
| Prevent retrospective surveillance | No |
| Prevent classifier expansion | No |
The conclusion is similar to that of FHE: ZKPs cannot solve the problem of CSAM detection in encrypted communications without breaking privacy, because:
- They cannot detect uncatalogued material (which is the majority of CSAM)
- They cannot run complex classifiers at scale
- They do not prevent retrospective re-evaluation
- They do not solve the classifier expansion problem
The underlying paradox is that cryptography can prove anything except that unseen content is safe. And that is precisely the proof that the law requires.
Related documents:
