Image and Video Provenance: C2PA, SynthID-Image, Adobe Content Credentials

Section 54.3

"C2PA is what happens when you ask metadata to be load-bearing. The metadata mostly holds, until someone uploads to Twitter."

PixelPixel, Manifest-Pessimist AI Agent
Big Picture

Image and video provenance is further along than text in real-world deployment. Two complementary technologies have hardened into shipping standards: C2PA (Coalition for Content Provenance and Authenticity), a cryptographic content-credentials manifest that piggybacks on existing image metadata; and SynthID-Image, a pixel-domain statistical watermark from Google DeepMind that survives common transformations (JPEG re-encoding, cropping, modest filtering). Adobe Content Credentials, Microsoft, the AP, the BBC, Sony, Nikon, and Leica have all shipped C2PA-conformant pipelines as of 2026. This section walks through the C2PA 2.x specification (manifest structure, signature chains, claim generators), SynthID-Image's design, and the integration pattern that combines both layers.

Image and video provenance ships in two complementary layers.
Figure 54.3.1: Image and video provenance ships in two complementary layers. C2PA embeds a cryptographically signed manifest (claim generator, action history, X.509 or Ed25519 signature chain) inside PNG / JPEG / MP4 metadata, and gets stripped by a screenshot or aggressive recompression. SynthID-Image embeds a pixel-domain statistical mark that survives JPEG re-encoding, cropping, and modest filtering, but falls to inversion-then-regenerate attacks. Production stacks layer both because each closes the other's weakness.

Prerequisites

This section assumes the image-generation pipelines from Section 19.7, the video-generation models from Section 20.7, and the provenance framing from Section 54.1.

54.3.1 C2PA: Cryptographic Provenance as Metadata

Fun Fact

The C2PA standard signs metadata cryptographically, which means a single screenshot strips every cryptographic guarantee out of an image. Adobe and Microsoft both ship C2PA support and both also ship screenshot tools. The two facts have not yet been reconciled at the product level.

The Coalition for Content Provenance and Authenticity (C2PA) was founded in 2021 by Adobe, the BBC, Intel, Microsoft, Sony, Truepic, and others to define an open standard for content credentials. The standard reached version 2.0 in 2024 and 2.1 in 2025, with stable conformance test suites and a growing list of certified implementers. The design is pragmatic: rather than invent a new file format, C2PA defines a manifest structure that embeds inside existing containers (PNG, JPEG, MP4, GIF, MP3, PDF) via standard metadata blocks.

A C2PA manifest contains:

54.3.2 Anatomy of a C2PA Manifest

{
  "claim_generator": "Adobe Photoshop 26.0 (c2patool/0.10.0)",
  "claim_generator_info": [
    {"name": "Adobe Photoshop", "version": "26.0",
     "icon": {"format": "image/svg+xml", "identifier": "icon.svg"}}
  ],
  "title": "campaign-photo-final.jpg",
  "format": "image/jpeg",
  "instance_id": "xmp:iid:7b1d24bb-92c4-4f8f-9a7d-fc1a2b3c4d5e",
  "thumbnail": {
    "format": "image/jpeg",
    "identifier": "thumbnail.jpg"
  },
  "ingredients": [
    {
      "title": "raw-DSC0042.NEF",
      "format": "image/x-sony-raw",
      "instance_id": "xmp:iid:1a2b3c4d-5e6f-7890-abcd-ef1234567890",
      "relationship": "parentOf",
      "hash": "sha256-9f86d081884c7d659a2feaa0c55ad015..."
    }
  ],
  "assertions": [
    {
      "label": "c2pa.actions.v2",
      "data": {
        "actions": [
          {"action": "c2pa.created", "when": "2026-02-14T09:30:00Z",
           "softwareAgent": "Sony Alpha 1 II 3.0", "digitalSourceType":
           "https://cv.iptc.org/newscodes/digitalsourcetype/digitalCapture"},
          {"action": "c2pa.edited", "when": "2026-02-14T11:45:00Z",
           "softwareAgent": "Adobe Photoshop 26.0",
           "parameters": {"description": "color grading, crop"}}
        ]
      }
    },
    {
      "label": "stds.iptc.photo-metadata",
      "data": {"dc:creator": ["Jane Doe / Reuters"]}
    }
  ],
  "signature_info": {
    "alg": "ps256",
    "issuer": "Adobe Inc.",
    "cert_serial_number": "abc123def456",
    "time": "2026-02-14T11:45:30Z"
  }
}
Code Fragment 54.3.1a: A representative C2PA 2.x manifest for an edited news photograph. The ingredients array links back to the raw camera file's hash, forming the parent edge in the provenance graph. The actions.v2 assertion records the create-edit chain with timestamps and software agents. The signature is produced with the publisher's private key; verifiers check it against the certificate chain anchored to the C2PA Trust List.
Key Insight

C2PA does not say "this image is real." It says "this image has not been altered since signature time T by signer S." A camera with a secure-mode firmware signs at capture; an editor's signature chains to that capture. If any byte after the signing point is changed without re-signing, validation fails. But the manifest cannot speak to what was in front of the camera. Provenance and truth are different problems and only the former is what C2PA solves.

Key Insight: C2PA as a Cryptographic Hash Chain

A C2PA-signed asset chain is mathematically a Merkle-style provenance graph. Let $a_0$ be the raw capture, $a_1, \ldots, a_n$ its edited descendants, and $M_i$ the manifest for $a_i$. Each manifest contains the pixel hash $h_i = \mathrm{SHA256}(\mathrm{pixels}(a_i))$, the parent edge $\mathrm{parent\_hash}_i = h_{i-1}$, and a cryptographic signature

$$\sigma_i \;=\; \mathrm{Sign}_{sk_i}\!\bigl(M_i\bigr),\qquad \mathrm{Verify}_{pk_i}(M_i, \sigma_i) \;=\; \texttt{true}\;\Leftrightarrow\;\text{manifest unaltered}.$$

Verification walks the chain from $M_n$ back to $M_0$: confirm $\sigma_i$ with the certificate-list public key $pk_i$, then check $\mathrm{parent\_hash}_i \stackrel{?}{=} h_{i-1}$ against the previous manifest's recorded pixel hash. Tampering anywhere breaks at least one equality. C2PA 2.x uses PS256 (RSASSA-PSS with SHA-256) as the default signature alg; for camera-to-edge trust paths, HMAC-SHA256 with a TEE-resident key bridges to public-key chains.

Algorithm 54.3.1: C2PA Manifest-Chain Verification
Algorithm: C2PA-VERIFY-CHAIN
Input:  Asset bytes A_n, manifest chain (M_n, M_{n-1}, ..., M_0),
        trust list TL of accepted certificate authorities
Output: verdict in {VALID, INVALID, UNTRUSTED}, signer chain

  // 1. Pixel-hash binding for the leaf
  h_n_computed = SHA256( pixels(A_n) )
  If h_n_computed != M_n.assertions["c2pa.hash.data"]:
    Return INVALID                          // post-signature tamper

  // 2. Walk the chain from leaf to root
  For i = n downto 1:
    // Recover and validate signature
    cert_i = M_i.signature_info.cert
    If cert_i not in chain rooted at TL:
      Return UNTRUSTED                      // unknown signer
    If Verify( M_i, sigma_i, cert_i.public_key ) is false:
      Return INVALID                        // manifest tampered

    // Parent-edge integrity
    parent_h_recorded = M_i.ingredients[0].hash
    parent_h_actual   = M_{i-1}.assertions["c2pa.hash.data"]
    If parent_h_recorded != parent_h_actual:
      Return INVALID                        // broken provenance edge

    // Optional timestamp monotonicity
    If M_i.signature_info.time < M_{i-1}.signature_info.time:
      Return INVALID                        // backdated signing

  Return (VALID, [ M_i.signature_info.issuer for i = 0..n ])

The chain is functionally equivalent to a Git commit history with cryptographic signatures: each manifest commits to (its content + its parent's pixel hash), so the only way to alter a leaf without detection is to forge every signature back to the root. Production verifiers cache trust-list lookups, but the per-asset verification cost is microseconds on commodity hardware (C2PA Specification v2.1, 2025).

54.3.3 The c2patool Pipeline in Practice

Adobe's open-source c2patool CLI and its underlying c2pa-rs Rust library are the reference implementation. A minimal sign-and-verify flow:

import subprocess, json
from pathlib import Path

def sign_image(input_path: Path, manifest: dict, output_path: Path,
               cert_path: Path, key_path: Path) -> None:
    """Sign an image with a C2PA manifest using c2patool."""
    manifest_path = output_path.with_suffix(".manifest.json")
    manifest_path.write_text(json.dumps(manifest))
    subprocess.run([
        "c2patool", str(input_path),
        "--manifest", str(manifest_path),
        "--sign_cert", str(cert_path),
        "--sign_key", str(key_path),
        "--output", str(output_path),
    ], check=True)

def verify_image(path: Path) -> dict:
    """Validate the manifest. Raises if the signature is invalid."""
    result = subprocess.run(
        ["c2patool", str(path), "--detailed"],
        capture_output=True, text=True, check=True,
    )
    report = json.loads(result.stdout)
    return {
        "validated": report["validation_status"] == "valid",
        "signer": report["active_manifest"]["signature_info"]["issuer"],
        "claim_generator": report["active_manifest"]["claim_generator"],
        "ingredients": report["active_manifest"].get("ingredients", []),
    }

# Usage in a publishing pipeline:
verdict = verify_image(Path("incoming/photo.jpg"))
if not verdict["validated"]:
    raise RuntimeError("manifest invalid; reject or flag for review")
Code Fragment 54.3.2: Python wrapper around c2patool for signing and verifying images. In a real newsroom pipeline this becomes a service: incoming images run through verify_image; the validation_status, signer identity, and ingredient chain are exposed in the CMS so editors can see the provenance at a glance.

54.3.4 SynthID-Image: Pixel-Domain Watermarking

C2PA's weakness is that its manifest is stored in metadata, and metadata gets stripped. A screenshot, a re-upload through a platform that strips XMP, or a malicious actor's exiftool -all= all destroy the manifest while preserving the pixels. This is where pixel-domain watermarking complements C2PA. SynthID-Image, deployed by Google for Imagen and Veo outputs, embeds a watermark directly into the pixels via a learned encoder, designed to survive:

Under the Hood: SynthID-Image pixel-domain watermark

SynthID-Image trains an encoder and a detector jointly, in the style of an adversarial autoencoder. The encoder adds a small, spatially-distributed perturbation to the generated image; the detector must recover the embedded bit pattern. During training a differentiable augmentation layer applies the very transforms attackers use, JPEG re-encoding, cropping, blur, resampling, between encoder and detector, so gradients push the watermark into pixel statistics that survive those operations. A perceptual loss simultaneously penalizes visible changes, so the optimum is a perturbation invisible to humans but legible to the detector. Detection is a fast forward pass that outputs a calibrated probability, with the false-positive rate bounded by held-out evaluation on natural images.

The watermark is detected by a small neural network that runs in milliseconds on a CPU. False-positive rate on natural (non-AI) images is bounded by design at <0.1% via held-out evaluation.

Two-panel comparison. Left panel: 'C2PA manifest' shown as a metadata block attached externally to an image file with a chain of signatures. An arrow labeled 'screenshot / metadata strip' shows the manifest being removed, leaving an unverifiable image. Right panel: 'SynthID-Image' shown as an invisible perturbation embedded directly into the pixel grid. An arrow labeled 'screenshot / metadata strip' shows the perturbation persisting; the watermark survives. A bottom row labeled 'combined' shows both layers stacked, with annotations 'metadata: strong provenance' and 'pixel watermark: survives metadata loss'.
Figure 54.3.2a: C2PA and SynthID-Image are complementary. C2PA gives strong cryptographic provenance (signer identity, parent chain) but lives in stripable metadata. SynthID-Image embeds in the pixels themselves so it survives metadata loss but cannot identify the specific signer. Production deployments use both layers.

54.3.5 The Publisher Workflow: Camera to CDN

A modern publisher workflow that produces verifiable images end-to-end:

  1. Capture. A C2PA-aware camera (Sony Alpha 1 II, Nikon Z9 with the 2024 firmware update, or a phone running a certified C2PA app) signs at the moment of capture. The hardware secure element holds the private key; the public certificate is anchored to the manufacturer's trust list.
  2. Edit. Adobe Photoshop, Lightroom, and Premiere all preserve and amend the manifest. Each edit appends a new action to c2pa.actions.v2 with a timestamp and parameters; the resulting file is re-signed by the editor's certificate.
  3. Publish. The CMS serves the image with the manifest intact and exposes the verification UI to readers (Content-Credentials.org displays the chain in a popover).
  4. Downstream. Social platforms that respect C2PA (Meta and TikTok announced support in 2024) extract the manifest, display "Made with AI" or "Verified by [signer]" labels, and propagate the credentials to embeds.
Warning: The Stripping Problem Is Not Solved

The biggest open weakness in C2PA deployment is that many social and messaging platforms still strip metadata aggressively, often as a side effect of image-resizing for bandwidth. Meta announced C2PA preservation in 2024 but follow-up audits in 2025 showed inconsistent behavior. Until manifest-stripping becomes user-visible (the way HTTPS deprecation in browsers became visible to users), publishers cannot rely on consumer-side validation alone. Pixel-domain watermarks like SynthID-Image are the partial answer, but they identify only the generator, not the editor or the publisher.

54.3.6 Video Provenance: Temporal Claims

Video provenance extends the C2PA model to include temporal claims: which frames were synthesized, which edits affect which segments, what voice-cloning was used for which speakers. The C2PA 2.1 specification adds the c2pa.segments assertion for this purpose.

In practice, video provenance is harder because: (a) video files are large enough that re-signing on every edit is expensive; (b) frame-level edits multiply the assertion count; (c) common platforms transcode videos aggressively (YouTube re-encodes everything), making byte-exact hashing brittle. The 2025 working-group output recommends segment-hash trees: each segment is hashed independently, the root hash is signed, and verifiers can check individual segments without re-hashing the whole file.

Real-World Scenario
A Generative-Image API With Mandatory Provenance

An EU-based image-generation startup, complying with AI Act Article 50, ships every output with both layers: (1) SynthID-Image embedded in the pixels via the model's decoder; (2) a C2PA manifest in the JPEG metadata identifying the model version, the generation parameters, and a SHA-256 hash of the prompt. Users can verify either layer independently. Survival expectations: C2PA manifest is intact until the file passes through a metadata-stripping intermediary, at which point SynthID becomes the fallback. The detection API runs at ~10ms per image on CPU, costing fractions of a cent. The combined system meets the regulatory bar at engineering cost of approximately one engineer-month per quarter for maintenance.

Key Insight

Image and video provenance ships in production via two complementary technologies. C2PA gives strong cryptographic provenance through a manifest chain anchored to a trust list, supported by Adobe, Microsoft, Sony, Nikon, the AP, and the BBC. SynthID-Image embeds a pixel-domain watermark that survives metadata loss and common transformations. Production publishers use both: C2PA when the manifest is intact, SynthID as the fallback when metadata is stripped. EU AI Act Article 50 makes this stack a compliance requirement, not an option, for generative image and video APIs serving the EU market.

Self-Check
Q1: A C2PA manifest validates successfully on an image showing the Eiffel Tower in flames. What can you conclude from the manifest, and what can you not?
Show Answer
You can conclude that the bytes of the image have not been altered since the manifest was signed at time T by signer S, and you can follow the ingredients chain back to the parent asset (typically a camera RAW or a generator output). What you cannot conclude is that the Eiffel Tower was actually on fire. C2PA authenticates the chain of custody, not the truth of the depicted events; the same signer with the same camera could photograph a staged scene, a screen showing AI-generated content, or a real fire and the manifest would validate identically. Editorially, the manifest is one input to verification, not a verdict.
Q2: Why is SynthID-Image necessary even when C2PA is deployed? Give two concrete situations where C2PA is stripped but SynthID survives.
Show Answer
C2PA manifests live in container metadata (XMP, EXIF, ISOBMFF boxes), which is routinely stripped by intermediaries that re-encode or resize images. SynthID-Image embeds a watermark directly into the pixel grid via a learned encoder, so it survives many transformations that destroy metadata. Two concrete situations: (1) a screenshot, where someone captures the rendered image on a phone display and the entire metadata block is left behind in the original file; (2) a re-upload through a social platform that strips XMP for bandwidth (Meta's audited 2025 behavior was inconsistent), or a malicious actor running `exiftool -all=` to wipe metadata while preserving the pixels. In both cases the C2PA manifest is gone but the SynthID pixel-domain signal survives JPEG re-encoding at q60+, 50 percent cropping, and display-and-recapture.
Q3: Video provenance uses segment-hash trees. What problem does that pattern solve that whole-file hashing does not?
Show Answer
Common platforms (YouTube, TikTok, Vimeo) transcode every uploaded video aggressively, so a byte-exact whole-file hash is invalidated by the platform itself; the manifest would fail to validate even on legitimate uploads. Segment-hash trees solve this by hashing each segment (typically a chunk of frames or a GOP) independently and signing the Merkle-style root hash. A verifier can then check any single segment against the manifest without re-hashing the whole file, and platform-level re-encoding can be detected at segment granularity rather than killing validation for the entire video. The pattern also supports frame-level claims (which frames were AI-generated, which were edited) that whole-file hashing cannot express.
Q4: You receive an image with no C2PA manifest. What can SynthID detection tell you, and what does it leave undetermined?
Show Answer
SynthID-Image's detector returns a confidence score that the pixels carry the watermark embedded by Google's Imagen or Veo decoder; a positive verdict tells you the image was generated by a SynthID-marked Google model with high confidence (false-positive rate bounded by design at under 0.1 percent on natural images). What it leaves undetermined: the specific signer or publisher (SynthID identifies the generator family, not which user account produced it), whether the image was further edited after generation, whether it was generated by a non-Google model with no SynthID signal (the absence of SynthID means "not a SynthID-marked output," not "real"), and the truth of any depicted events. Detection is one signal, not a verdict; it routes the image into editorial review, it does not replace it.
What's Next

Continue to Section 54.4: Deepfake and Synthetic-Media Detection.

Section 54.4 covers detection: when provenance is absent (no manifest, no watermark), how do classifiers tell synthetic from natural imagery? We will look at GAN-vs-diffusion fingerprint analysis, video temporal artifact detection, and the ensemble methods that achieved >95% accuracy on the 2025 Deepfake Detection Challenge.

Further Reading
Coalition for Content Provenance and Authenticity (2024). C2PA Technical Specification v2.1. https://c2pa.org/specifications/specifications/2.1/specs/.
Adobe Content Authenticity Initiative (2024). Content Credentials: Implementation Guide. https://contentauthenticity.org/.
Fernandez, P., Couairon, G., Jegou, H., et al. (2023). The Stable Signature: Rooting Watermarks in Latent Diffusion Models. ICCV 2023.
Google DeepMind (2024). SynthID for Images and Audio: Identifying AI-Generated Content. https://deepmind.google/technologies/synthid/.
Sony (2024). Sony Alpha 1 II In-Camera Authenticity Technology with C2PA Support. Sony press release, October 2024.
Nikon (2024). Nikon Z9 Firmware 5.10 with C2PA Content Credentials. Nikon firmware release notes.
Reuters and the AP (2024). Verify: A C2PA-Based Approach to Newsroom Image Authentication. Reuters Institute report.