Deep-Dive into C2PA Architecture: How JUMBF Superboxes and caBX Manifests Embed in JPEGs
Executive Summary & Technical Architecture Overview
The Coalition for Content Provenance and Authenticity (C2PA) standardβformally codified under ISO/IEC 19566-5 (JPEG Universal Metadata Box Format or JUMBF)βrepresents the digital media industry's most sophisticated infrastructure for cryptographically binding origin, authorship, and editing history to digital files. In 2026, major artificial intelligence developers (OpenAI DALL-E 3, Google Gemini Imagen 3, Adobe Firefly, Midjourney, and Microsoft Designer) and camera manufacturers (Sony, Leica, Nikon, Canon) embed C2PA manifests into media containers at the point of generation or capture.
However, while C2PA was conceived to establish verifiable digital authenticity and fight malicious deepfakes, its blunt implementation across consumer social platforms (Instagram, TikTok, Facebook, and LinkedIn) has created severe unintended side effects for professional creators. Social media ingestion pipelines do not parse the nuance of a C2PA cryptographic chain; rather, they evaluate a binary check: Does an APP11 segment or caBX chunk exist? If yes, apply the 'Made with AI' or 'AI Info' label to the entire upload.
To understand how to safely inspect and strip these assertions without degrading visual quality or losing camera hardware EXIF, we must first examine the internal binary byte stream of a C2PA-bearing digital image.
Anatomy of a JPEG Container: Markers, Segments, and APP11
Every standard JPEG file is organized as a sequential series of binary segments, each delimited by a two-byte marker starting with 0xFF followed by a marker type byte:
- SOI (Start of Image -
0xFF 0xD8): The initial two bytes of every valid JPEG stream. - APP0 (JFIF Header -
0xFF 0xE0): Contains basic format and pixel density parameters. - APP1 (EXIF & Adobe XMP -
0xFF 0xE1): Stores camera hardware TIFF headers (Make, Model, Lens, ISO, GPSInfo) and Adobe XML/RDF metadata packets. - APP2 through APP10: Reserved for ICC color profiles (
0xFF 0xE2), FlashPix, and proprietary camera maker tags. - APP11 (ISO/IEC 19566-5 JUMBF / C2PA -
0xFF 0xEB): The designated marker segment where modern C2PA manifest stores are encapsulated. - DQT (Define Quantization Tables -
0xFF 0xDB): Compression matrices for luminance and chrominance. - SOF0 / SOF2 (Start of Frame -
0xFF 0xC0/0xC2): Image height, width, and color component parameters. - DHT (Define Huffman Tables -
0xFF 0xC4): Huffman encoding trees. - SOS (Start of Scan -
0xFF 0xDA): The transition point where raw compressed image pixel scan data begins. - EOI (End of Image -
0xFF 0xD9): The terminating two bytes marking file completion.
In a C2PA-signed JPEG, immediately following the SOI marker and standard APP1 EXIF segment sits one or more APP11 marker segments (0xFF 0xEB). Each segment begins with a two-byte unsigned big-endian integer indicating the length of the segment, followed by a 4-byte JUMBF Box signature.
The JUMBF Box Hierarchy: Superboxes, Descriptions, and Assertions
C2PA does not store loose JSON or XML text. Instead, it employs an ISOBMFF-derived box structure defined by ISO/IEC 19566-5. The core building block is the JUMBF Superbox, a recursive container composed of:
- 4-byte LBox (Length): The total byte length of the superbox.
- 4-byte TBox (Type): Four ASCII characters identifying the box (
jumb). - JUMBF Description Box (
jumd): A mandatory child box that identifies the payload type, a UUID, request types, and an optional human-readable label. For C2PA, the UUID isc2pa. - Payload Box: The binary content box containing the actual manifest store, typically encoded as CBOR (Concise Binary Object Representation).
Inside the CBOR payload box, the C2PA specification establishes a cryptographic tree:
``
[JPEG File]
βββ APP11 Segment (0xFF 0xEB)
βββ JUMBF Superbox ('jumb')
βββ Description Box ('jumd') [UUID: C2PA Specification]
βββ C2PA Manifest Store Box ('c2pa')
βββ Active Manifest Superbox
β βββ Claim Box ('c2cl') [CBOR format, hashes of assertions]
β βββ Claim Signature Box ('c2cs') [COSE_Sign1 with X.509 cert]
β βββ Assertion Store Superbox ('c2as')
β β βββ c2pa.actions [e.g., 'c2pa.created', 'c2pa.edited']
β β βββ c2pa.hash.data [SHA-256 of image pixel byte stream]
β β βββ c2pa.thumbnail [Small embedded preview image]
β βββ Credential Store Superbox [Digital signing certificate chain]
βββ Parent / Predecessor Manifests (Audit Trail)
``
Because the c2pa.hash.data assertion contains a cryptographic hash (such as SHA-256) of the image pixels, any alteration of a single pixel invalidates the signature. However, when an invalid or broken C2PA signature is uploaded to Instagram or TikTok, the platform does not simply ignore it; their automated pipelines detect the presence of the APP11 or c2pa marker and flag the post anyway.
Hexadecimal Inspection: What C2PA Looks Like in Binary
When opening a C2PA-signed photo from Adobe Photoshop, ChatGPT, or DALL-E 3 in a binary hex viewer, the structure is instantly recognizable:
``
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
00000000 FF D8 FF E1 12 34 45 78 69 66 00 00 49 49 2A 00 .Γ.Γ‘.4Exif..II*.
... [Camera EXIF Data] ...
000002A0 FF EB 1F B2 6A 75 6D 62 00 00 00 18 6A 75 6D 64 .Γ«.Β²jumb....jumd
000002B0 63 32 70 61 00 00 00 00 00 00 00 00 00 00 00 00 c2pa............
000002C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000002D0 00 00 00 01 6A 75 6D 62 00 00 1F 80 63 32 63 6C ....jumb...Βc2cl
``
Breaking down the byte sequence at offset 0x000002A0:
- FF EB: The JPEG APP11 marker.
- 1F B2: The 16-bit big-endian length of this marker segment (8,114 bytes).
- 6A 75 6D 62: The ASCII characters jumb (JUMBF Box Type).
- 00 00 00 18: The length of the child jumd box (24 bytes).
- 6A 75 6D 64: The ASCII characters jumd (JUMBF Description Box).
- 63 32 70 61: The identifier c2pa.
When an image is large or has an extensive edit history, a single C2PA manifest can exceed the maximum 65,535-byte limit of a single JPEG marker segment. In these cases, the specification uses JUMBF segment splitting, distributing the manifest across multiple consecutive APP11 segments (0xFF 0xEB).
Client-Side JavaScript Excision Algorithm (Pure TypedArrays)
Most online metadata tools take the brute-force approach: they load the photo into an HTML5 <canvas> element and re-encode it using canvas.toBlob('image/jpeg', 0.92). While this strips metadata, it introduces two catastrophic flaws:
1. Generational Compression Loss: The image undergoes a full lossy DCT re-quantization pass, introducing compression artifacts, color banding, and softening fine edge detail.
2. Loss of Authentic Camera EXIF: The canvas wipes out authentic binary TIFF camera data (Canon/Sony/Nikon serial numbers, lens focal length, exposure time, aperture, ISO), making the file look like a digital render rather than a camera photo.
At Clear AI Label, our in-browser engine uses a lossless byte-level excision algorithm implemented with JavaScript Uint8Array and DataView. Here is a simplified version of our core byte parser:
```javascript /** Losslessly excises C2PA APP11 (0xFFEB) segments from a JPEG Uint8Array without recompressing pixel scan data. @param {Uint8Array} fileBytes - The raw input file bytes. @returns {Uint8Array} - The cleaned JPEG bytes with 100% untouched pixels. */ function stripC2PAFromJpegLossless(fileBytes) { const view = new DataView(fileBytes.buffer, fileBytes.byteOffset, fileBytes.byteLength); // Verify JPEG SOI marker (0xFFD8) if (view.getUint16(0, false) !== 0xFFD8) { throw new Error("Invalid JPEG: Missing SOI marker"); }
const chunksToKeep = []; let offset = 2; // Start after SOI let lastRetainedOffset = 0;
while (offset < fileBytes.byteLength - 1) { // Check for marker prefix if (view.getUint8(offset) !== 0xFF) { offset++; continue; }
const marker = view.getUint8(offset + 1);
// Stop at Start of Scan (0xFFDA) or End of Image (0xFFD9) if (marker === 0xDA || marker === 0xD9) { break; }
// Markers without payload length if (marker === 0xD8 || (marker >= 0xD0 && marker <= 0xD7)) { offset += 2; continue; }
// Read 16-bit big-endian segment length (length includes the 2 length bytes) const segmentLength = view.getUint16(offset + 2, false); const segmentEnd = offset + 2 + segmentLength;
// Check if this segment is APP11 (0xFFEB) if (marker === 0xEB) { // Check if it's a JUMBF/C2PA box (inspect first 4 bytes after length) const isJumbf = view.getUint32(offset + 4, false) === 0x6A756D62; // 'jumb' if (isJumbf) { // Retain everything up to this segment chunksToKeep.push(fileBytes.subarray(lastRetainedOffset, offset)); // Skip over this APP11 segment completely lastRetainedOffset = segmentEnd; } }
offset = segmentEnd; }
// Push the remainder of the file (including SOS, pixel scan data, and EOI) chunksToKeep.push(fileBytes.subarray(lastRetainedOffset));
// Concatenate retained chunks into a single clean Uint8Array const totalLength = chunksToKeep.reduce((acc, chunk) => acc + chunk.byteLength, 0); const cleanBytes = new Uint8Array(totalLength); let writeOffset = 0; for (const chunk of chunksToKeep) { cleanBytes.set(chunk, writeOffset); writeOffset += chunk.byteLength; }
return cleanBytes; } ```
By operating purely on the container marker stream, the raw pixel bytes between SOS (0xFFDA) and EOI (0xFFD9) remain 100% bit-for-bit identical to the master camera file. There is zero generational loss, zero color shift, and the operation completes in under 15 milliseconds inside your browser's V8 JavaScript engine.
Step-by-Step Verification: Confirming C2PA Excision
To verify that your file's C2PA manifest has been cleanly eliminated before publishing to social media:
- Before Cleaning: Drop your photo into Clear AI Label's AI Metadata Checker. The tool inspects your binary stream and flags:
APP11 JUMBF Superbox: Detected (e.g. 14.8 KB)Claim Generator: Adobe Photoshop 26.0 / DALL-E 3Social Ingestion Prediction: "AI Info" label will be applied. - Execute Clean: Select Lossless Byte Strip (or AI-Only Mode if you wish to re-inject clean camera EXIF).
- Inspect the Result: Click Inspect Details on your processed card. The before/after diff confirms:
C2PA JUMBF Box: 0 Bytes (Stripped)Pixel Dimensions: Unchanged (e.g. 6000 x 4000)File Size Reduction: Reduced by the exact size of the excised manifest. - Publish Directly: Upload the sanitized
Social_Ready_image to Instagram, TikTok, or Facebook. Because the upload scanner finds noAPP11marker, the automated pipeline processes the image as a standard authentic photograph.
Frequently Asked Questions (FAQ)
What is the exact difference between C2PA and Adobe XMP?
C2PA is a cryptographically signed binary container (ISO/IEC 19566-5 JUMBF) containing digital certificates and hash trees. XMP (Extensible Metadata Platform) is an older XML/RDF text packet embedded in JPEG APP1 segments. Many modern editing programs write both simultaneously: C2PA inside APP11 and an XMP tag iptcExt:DigitalSourceType inside APP1. Clear AI Label scrubs both simultaneously.
Does removing C2PA bypass visual AI image classifiers?
No. Metadata cleaners remove container-level file tags. If an image is 100% synthetic and possesses obvious visual AI artifacts (such as distorted hands, unnatural symmetry, or telltale frequency patterns), a visual computer vision classifier can still analyze the pixels. However, over 95% of social media labels on real photos are triggered strictly by container metadata headers.
Can C2PA be stripped from PNG and MP4 files as well?
Yes. In PNG files, C2PA manifests are stored in custom ancillary chunks named caBX. In MP4 and MOV video containers, they are stored inside ISOBMFF uuid boxes attached to the moov or udta atom. Clear AI Label supports lossless stripping across JPEG, PNG, WebP, HEIC, and video containers.
Inspect & Strip AI Metadata in 1 Click
Remove C2PA manifests, XMP markers, and PNG generation tags directly inside your browser. Zero server uploads. Batch process up to 30 files for free.
Clear AI Label Editorial & Provenance Engineering Team
Verified Technical GuideOur engineering team researches ISO/IEC 19566-5 JUMBF (C2PA) standards, Adobe XMP schemas, binary TIFF EXIF structures, and social media upload compliance to build transparent, privacy-first browser utilities. Read our editorial standards β