Overview

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
End-to-end pipeline: Camera/AI tool produces C2PA manifest, browser extracts and runs split proofs in parallel, aggregation tree combines them, Aztec private verification records on-chain, public verify page displays result. Everything from extraction through proving happens client-side.

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

LayerTechnologyRuns where
C2PA extractionJUMBF, COSE, X.509 parsingBrowser
Trust listPedersen Merkle tree, Ed25519 multi-sig oracleBrowser + backend
Proof generation19 Noir circuits, Barretenberg WASMBrowser (web workers)
AggregationBinary tree, Poseidon2 commitmentsBrowser (web workers)
On-chain verificationAztec private functions, UltraHonkAztec blockchain
IdentityWebAuthn passkeys, ZKPassport, JWT proofsBrowser + secure enclave
Content moderationPDQ/TMK hashing, CSAM screeningBackend
StorageClient-side AES-256-GCM, Cloudflare R2Browser + CDN

Privacy by architecture

Privacy in Apertrue isn't a setting you toggle. It's built into the architecture at every layer:

WhatPrivacy mechanism
Your device identityNever leaves the ZK proof. Certificate chain is a private input.
Your locationRange proofs: prove "within 10km of London" without revealing coordinates
Your timestampRange proofs: prove "taken this week" without revealing the exact time
Your photosAES-256-GCM encrypted before upload. Apertrue cannot decrypt them.
Your verification historyEncrypted Aztec notes. Only you can read them.
Cross-batch linkingDiversified addresses: each batch uses a unique owner address
Your wallet keyWebAuthn passkey. Never leaves the hardware secure enclave.
Key Insight
The distinction matters: Apertrue doesn't choose not to access your data. It cannot access your data. The encryption keys exist only in your browser, the proofs reveal only what you choose to disclose, and the blockchain state is encrypted to your address.

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.

Reading guide
Start here if you want the big picture. Read The Trust Problem for why this exists. Jump to Split-Proof Architecture and Aggregation Pipeline for the cryptographic core. Read Privacy Model to understand selective disclosure. See the Circuit Reference for full technical specs on all 19 circuits. The Security Model is where we're honest about trust assumptions and known limitations.
Note
This documentation describes the browser-based proving system, where all cryptography runs client-side. A native prover for newsroom editorial pipelines, running on your own infrastructure, is on the roadmap. See For Newsrooms for details.