What Apertrue Does
Cryptographic photo verification with privacy. Plain English.
Apertrue proves that a photo or video is authentic: captured by a real camera or generated by a declared AI tool, and not tampered with since. It does this without revealing who took it, where it was taken, or what device was used.
It does this using zero-knowledge proofs: mathematical proofs that verify a statement is true without revealing the underlying data. The cryptography runs entirely in your browser. Nothing sensitive ever leaves your device.
Two roots of trust
A proof can be rooted in either of two places. If the camera supports C2PA, the proof starts from the device's signature. If it does not, the sensor fingerprint line starts from the physical pattern of the camera's own sensor, which covers DSLRs, RAW workflows, and cameras built long before signing existed. Both roots end in the same place: a zero-knowledge proof that the photo is authentic. The rest of this page walks through the C2PA-rooted pipeline.
The one-sentence version
Upload a signed photo. Your browser generates a cryptographic proof that the photo is authentic. The proof is verified on a private blockchain. Anyone can check the result. Nobody learns anything about you.
What happens when you upload
- You upload a C2PA-signed image. C2PA is an open standard adopted by Adobe, Google, Leica, Sony, and others. It embeds a cryptographic signature from the device that captured or processed the image.
- Your browser extracts the signature chain. The C2PA manifest is parsed locally: the certificate chain (which device signed it), the COSE signature (proof of signing), and any edit history.
- Your browser generates zero-knowledge proofs. Two proofs run in parallel: one verifies the certificate chain, another verifies the signature. Both prove the image is authentic without revealing any device identifiers, serial numbers, or certificate details.
- The proofs are aggregated. If you uploaded multiple images, they're combined into a single proof using a binary tree structure. One proof covers your entire batch.
- The aggregated proof is verified on Aztec. Aztec is a privacy-preserving blockchain. Your proof is verified inside a private function. The result is an encrypted note that only you can read. No one else can see what you verified or link it to your identity.
- Anyone can check your photo. You share a link. The verifier sees "this photo is cryptographically proven authentic," along with only the metadata you chose to disclose.
What makes this different
From C2PA alone
C2PA proves a photo is authentic, but it also reveals which camera took it, the serial number, the GPS coordinates, and the full certificate chain. For journalists, activists, or anyone who values privacy, this is a problem. Apertrue uses C2PA as input but outputs only a zero-knowledge proof. Authenticity without identity. It also reaches further: the sensor fingerprint line covers the cameras that never had signing hardware at all.
From server-side verification
Most verification services require you to upload your image to their servers for analysis. You're trusting them to handle it honestly. Apertrue's proofs are generated in your browser and verified on a blockchain. The server never sees the raw image metadata, and verification is trustless. The math proves it, not a company's promise.
From other ZK projects
Apertrue isn't a ZK toolkit or protocol. It's a complete product: upload flow, proof generation, blockchain verification, selective disclosure, and a public verification page. The ZK proofs cover the full C2PA certificate chain, not a simplified demo: real-world RSA-2048, RSA-4096, ECDSA P-256, and P-384 signature verification in-circuit.
The system at a glance
| Layer | Technology | Runs where |
|---|---|---|
| C2PA extraction | JUMBF, COSE, X.509 parsing | Browser |
| Trust list | Pedersen Merkle tree, Ed25519 multi-sig oracle | Browser + backend |
| Proof generation | 19 Noir circuits, Barretenberg WASM | Browser (web workers) |
| Aggregation | Binary tree, Poseidon2 commitments | Browser (web workers) |
| On-chain verification | Aztec private functions, UltraHonk | Aztec blockchain |
| Identity | WebAuthn passkeys, ZKPassport, JWT proofs | Browser + secure enclave |
| Content moderation | PDQ/TMK hashing, CSAM screening | Backend |
| Storage | Client-side AES-256-GCM, Cloudflare R2 | Browser + CDN |
Privacy by architecture
Privacy in Apertrue isn't a setting you toggle. It's built into the architecture at every layer:
| What | Privacy mechanism |
|---|---|
| Your device identity | Never leaves the ZK proof. Certificate chain is a private input. |
| Your location | Range proofs: prove "within 10km of London" without revealing coordinates |
| Your timestamp | Range proofs: prove "taken this week" without revealing the exact time |
| Your photos | AES-256-GCM encrypted before upload. Apertrue cannot decrypt them. |
| Your verification history | Encrypted Aztec notes. Only you can read them. |
| Cross-batch linking | Diversified addresses: each batch uses a unique owner address |
| Your wallet key | WebAuthn passkey. Never leaves the hardware secure enclave. |
What this document covers
The following sections walk through every layer of the system in technical detail. They're written for engineers, auditors, and anyone who wants to verify that the privacy and security claims above actually hold up in the implementation.