C2PA Timestamping & OCSP Stapling
How to add long-term validation to your signed content with C2PA.
For conformant Generator Products, adding trusted timestamping and OCSP stapling is necessary for the content you publish to be marked as trusted. This is a guide on why timestamping and OCSP stapling are important, and how to go about implementing it in your trusted content workflow.
#Long-Term Validation
One of the main technical challenges of content provenance is long-term validation: how can provenance be trusted after months, years, or even decades?
The trust model that C2PA runs on is similar to the trust model that the Internet runs on: X.509 certificates with a list of root anchors. This is a tried and true system — for the Internet, it is what allows us to simply trust HTTPS traffic instead of depending on anti-virus software. How this works is that each Generator Product has a secret key, which it uses to sign content, and the X.509 certificate establishes that the secret key indeed belongs to the Generator Product. This is why C2PA Certificate Authorities require all Generator Products to complete both Organization Validation (OV) and Product Validation (PV).
However, there is one key difference between digital content and network traffic. On the Internet, the network traffic is validated seconds after it is signed and sent. However, with C2PA, digital content can be validated at any time in the future. This is a problem for X.509 because it is not designed for long-term validation: the certificates expire after some period of time (365 days for Level 1, 90 days for Level 2).
One way to solve this is to put everything on the blockchain, but that would mean that every time content is read, a blockchain must be queried. A more lightweight, chain-agnostic method is needed. This is where timestamping and OCSP stapling comes in.
#Timestamping
Certain Timestamping Authorities (TSAs) are authorized by the C2PA to issue trusted timestamps, following RFC 3161. These are run on secure servers, synced to a trusted time source (e.g. atomic reference clocks) via specific protocols (e.g. NTP, PTP), signed with keys that live in a secure enclave (e.g. FIPS 140-3 Level 2+ HSM). As a user, you send a simple request to the TSA, and the TSA returns a secure signed timestamp.
Not all timestamps are trusted by the C2PA. In order for a timestamp to be trusted, the certificate it is signed with must be a C2PA Timestamping Leaf Certificate.
If you are using a managed C2PA signing product, it is important to check whether it includes and properly implements trusted C2PA timestamping.
If you are building your own C2PA Generator Product, you will want to find a C2PA TSA to procure timestamps from.
These vendors offer free RFC 3161 timestamping.
These vendors offer trusted C2PA timestamping.
Actually making the network request is already handled by c2pa-rs and c2patool. Note that most C2PA TSAs will require authentication of some sort, so an X-API-Key header (or similar) will be required in the request. Currently, c2pa-rs supports this but c2patool does not. If you are using c2patool directly, the recommendation is to set up a reverse proxy that you pass into c2patool to format the requests as needed.
It is important to check what the price of the timestamps will be, because unlike the certificate which is per Generator Product instance, timestamps are per signed content. Standard industry rates for non-C2PA trusted timestamps typically vary from $0.1 per timestamp at 1K volume to $0.01 per timestamp at 1M volume, but this is just a rough estimate. Here is what we could find about existing C2PA timestamping prices:
| Vendor | Access | 1M Timestamps | Enterprise |
|---|---|---|---|
| Trufo | ~$200/y | under $2,000/y | available |
| SSL.com | first 10K free | standard rates (est.) | — |
| DigiCert | — | — | enterprise only |
For high-volume or high-value deployments, dedicated TSA endpoints can provide enterprise SLAs and regional deployments and are often available as a negotiated contract. For example, Trufo currently administers multi-region 99.95% SLA endpoints for enterprise clients.
#OCSP Stapling
While the timestamp establishes when the content was signed, the OCSP response establishes that the certificate was valid when the content was signed. Both pieces are necessary. The OCSP response must be provided by the CA that issued the C2PA Claim Signing certificate following RFC 6960.
The recommended way to use OCSP is to insert the OCSP response directly into the C2PA manifest. Many validators will not mark signed content as trusted unless this is done properly. How this works is that, when signing the content, the OCSP request is made to the CA and the response recorded in the manifest; then, validators do not need to make an OCSP request themselves in order to complete validation. This is supported by c2pa-rs but not by c2patool.
Importantly, the OCSP response can be stapled. Typically, the OCSP responses that CAs issue are valid for a short period of time (e.g. 24 hours). The signing server simply needs to make OCSP requests once in a while, and reuse the most recent OCSP response when signing content.
