Skip to content
Figure 1A content credentials verification session in six steps, from obtaining the file to writing the record
A content credentials verification session in six steps, from obtaining the file to writing the recordObtainexact bytesHashbefore anythingValidatepinned toolClassifyfour outcomesRecordversion, timeConcludewhat it provesthe outcome is a statement about signatures and hashes, never about whether the content is true
Six steps of a verification session. Hashing before validation and recording the validator version are what let a second person repeat the result.

How to verify content credentials: a tester's session

Knowing how to verify content credentials sounds like knowing where the button is, and the button exists. What it returns is a bundle of statements about a signature, a certificate chain and a set of hashes, and the conclusion a person draws from those statements is where most mistakes happen. This guide walks through a verification session the way a tester would run it, with the result written down so that someone else can check it.

Quick answer

To verify content credentials, run the exact bytes through a C2PA validator and read four things: whether the claim signature verifies, whether the certificate chains to a trust list, whether the content hashes match the file you hold, and whether the assertions are consistent. The result is one of four outcomes, and each proves less than people assume.

Key figures

Checks
signature, chain, hashes, assertions
Outcomes
trusted, valid but untrusted, invalid, none
Proves
who signed it and what they asserted
Does not prove
that the picture is true
Record
hash, validator version, time, result
Pitfalls
screenshots, re-encodes, social uploads

What verification actually checks

A validator does four jobs. It verifies the signature on the claim: the claim generator signed the claim with a private key, and the validator checks that signature against the public key in the signing certificate. It checks the certificate chain: the certificate must chain to a root that the validator trusts, using the X.509 rules that secure the web, and the C2PA specification allows only X.509 certificates for signing. It checks the hash bindings: the manifest carries a hash of the content, and the validator recomputes that hash over the bytes you gave it. And it checks the assertions: the actions, ingredients and other statements must be of the allowed kinds, and any ingredient manifests must validate in turn.

Time matters in two of those checks. A signing certificate expires, so the specification lets the claim generator attach a time-stamp from a trusted time-stamp authority proving that the signature existed while the certificate was valid; without one, an old manifest can fail years later for no reason connected to tampering. And the trust list is a configuration of the validator, which is why the same file can be trusted in one tool and merely valid in another. Record which validator and which trust list you used.

The four outcomes and what each proves

The four verification outcomes with the conclusion a careful reader should draw from each
OutcomeWhat the validator foundCorrect conclusionWhat it does not show
Valid and trustedSignature verifies, chain reaches the trust list, hashes match, assertions consistentThis file is the bytes the named signer signed, and the assertions were made by that signerThat the assertions are true, or that the picture shows what it seems to
Valid but untrustedSignature and hashes verify, but the signer is not on this validator's trust listThe file is unmodified since signing by some holder of that certificateWho that signer is, or that they are who they claim
InvalidSignature fails, or hashes do not match the bytes, or a required assertion is malformedThis file is not the bytes that were signed, or the manifest was alteredWhy: a benign re-encode looks the same as deliberate tampering
No credentialsNo manifest store found in the file or at the referenced locationNothing can be said from credentials about this fileThat the file is fake, generated, or altered

The second row deserves attention because it is common. Anyone can obtain a certificate and sign a manifest, so a valid signature by itself only shows internal consistency: these bytes match this claim by whoever held this key. Trust comes from the list, and lists differ between validators and change over time. A result should always name the list it was judged against.

How to verify content credentials: the session

  1. Obtain the exact bytes

    Download the original file, not a screenshot and not a browser-converted copy. Note where it came from, the URL and the time. If a platform offers an original download, use it; if it offers only a re-encoded view, say so in the record.

  2. Hash the file before anything else

    Compute a SHA-256 of the file as received and write it down. Every later statement refers to this hash, and it is what a second tester will ask for.

  3. Run a pinned validator

    Use a C2PA validator whose name and version you record, and note the trust list version or source it uses. Two validators with different lists can disagree on the trust outcome for the same file.

  4. Read the manifest store

    Identify the active manifest, its claim generator, the signer's certificate subject, the actions asserted and the ingredients. For each ingredient, note whether its own manifest validated.

  5. Confirm the hash binding against your file

    Check that the validator computed the content hash over the bytes you hashed in step 2, and that it reports a match. A validator fed a different copy proves nothing about yours.

  6. Classify the outcome

    Place the result in one of the four rows above and write the conclusion from the third column, in those words. Resist stronger language.

  7. Write the record

    Record the fields in the next section. A verdict without a record is an anecdote.

The two traps: reading absence and reading validity

The first trap is treating no credentials as evidence of fakery. Most files in circulation have none, because most cameras and tools do not attach them and most platforms strip metadata on upload. Absence tells you that this copy carries no provenance record, and nothing else. A genuine photograph that has been through a messaging app and a social upload arrives with no credentials, and so does a generated image. The guide to testing AI disclosure labels covers the related mistake of reading a missing label as a statement.

The second trap is treating valid as true. A trusted manifest proves that a named signer produced these bytes and asserted these actions. If the signer is a camera, that is strong evidence the pixels came from that camera's sensor at that time, subject to the device's security. If the signer is an editing tool, it proves the tool applied the listed actions to the listed ingredients. Neither proves that the scene was not staged, that the caption is accurate, or that the ingredient itself was not generated. Credentials describe origin and edit history as signed; truth is a separate question, and the same limit applies to detector scores, as the guide to proving you wrote it argues for text.

Two sentences to keep

No credentials means no record, never fake. Valid credentials mean signed origin and edits, never truth.

Writing the result up as evidence

If the verification may be quoted in a dispute, a correction, an audit or a court, it has to be reproducible by a stranger. The full discipline is in evidence-grade test records; the minimum for a verification session is short.

  • The SHA-256 of the file as received, with the source and the time of receipt in UTC.
  • The validator name and version, and the trust list version or source it used.
  • The outcome in the four-way classification, and the exact validator status codes behind it.
  • The active manifest's claim generator, signer subject, time-stamp status, actions and ingredients, with each ingredient's own outcome.
  • Who ran the session, when, on what machine, and where the file and the validator output are stored read-only.

Pitfalls that produce false conclusions

Almost every wrong verdict comes from verifying the wrong bytes. A screenshot of an image is a new image with no manifest. A copy saved from a browser preview has usually been re-encoded. A file downloaded from a social platform has almost always had its metadata stripped, so a photo that was signed at capture arrives as no credentials. A file emailed through a proxy or pasted into a document has been rewritten. In every one of those cases the honest outcome is that this copy cannot be verified, and the record should say which copy it was. If a colleague reports a different outcome, compare hashes first; in most disputes the two people verified different files. How a pipeline turns a signed original into an unverifiable copy is the subject of testing a content provenance pipeline, and the hub for testing AI systems collects the detection guides that people reach for when credentials are absent.

Common questions

What does verifying content credentials actually check?

That the claim signature verifies, that the signing certificate chains to a trust list, that the content hashes in the manifest match the bytes of the file you hold, and that the assertions and ingredients are consistent and allowed.

Does no content credentials mean the image is fake?

No. Most images carry no credentials because the camera or tool did not attach them or a platform stripped them on upload. Absence means there is no provenance record for this copy, nothing more.

Do valid content credentials prove a photo is real?

They prove that a named signer produced these exact bytes and asserted these actions and ingredients. They do not prove the scene was not staged, that the caption is right, or that an ingredient was not generated.

Why do two validators disagree about the same file?

Usually because they use different trust lists, so one reports trusted and the other valid but untrusted, or because they were given different copies of the file. Compare hashes and record the trust list.

Can I verify a screenshot or a social media download?

A screenshot is a new image with no manifest. Social platforms usually strip metadata, so the download has no credentials even if the original was signed. Obtain the original file or report that this copy cannot be verified.

Sources

  1. C2PA Technical Specification 2.2: manifests, content bindings, validation and trust lists
  2. RFC 9052, CBOR Object Signing and Encryption (COSE): Structures and Process (IETF)
  3. RFC 5280, Internet X.509 Public Key Infrastructure Certificate and CRL Profile (IETF)
  4. RFC 3161, Internet X.509 Public Key Infrastructure Time-Stamp Protocol (IETF)

Further reading named in the text

  • Coalition for Content Provenance and Authenticity, C2PA Technical Specification, version 2.2, validation, manifest states and trust lists
  • Schaad, CBOR Object Signing and Encryption (COSE): Structures and Process, RFC 9052 (IETF, 2022)
  • Cooper and colleagues, Internet X.509 Public Key Infrastructure Certificate and CRL Profile, RFC 5280 (IETF, 2008)
  • Adams, Cain, Pinkas and Zuccherato, Internet X.509 Public Key Infrastructure Time-Stamp Protocol, RFC 3161 (IETF, 2001)

This guide is part of the testing AI systems hub. It is best read alongside testing a content provenance pipeline and evidence-grade test records for authenticity systems, which cover the neighbouring questions.