draft 0.1
A C2PA creator or editor might want to hide their identity while signing a digital asset. This page explores some scenarios and techniques to achieve various levels of privacy, ranging from pseudonymity to full anonymity.
Note that we only consider the signer’s (a person or organization) privacy here, not the ability to redact or modify the asset itself.
The current C2PA core 2.0 specification only supports X.509 certificates to generate (claim) signatures. The Creator Assertion Working Group is specifying identity assertions where additional identity information can be attached to a C2PA asset. Identity assertions could support various credential types; initially, Verifiable Credentials (see PR 90). Additional credential types, such as mDL and SD-JWT could also be added in the future.
The simplest technique compatible with the current specification is to generate a self-signed X.509 certificate and use it to sign digital assets (i.e., use it as the claim generator certificate). The certificate would then need to be obtained out-of-band by verifiers. This technique doesn’t allow signers to prove things about themselves (memberships, entitlements, etc.), it only demonstrates ownership of a public key; it is only useful for scenario #4.
Re-using a X.509 certificate creates linkable signatures: even if a certificate doesn’t identify its owner, all the resulting signatures can be associated to the same entity.
To achieve unlinkability, a signer could obtain a new certificate for each signature. A signer could prove an entitlement or membership in an organization by using certificates issued by the organization’s CA. This would however be hard to deploy in practice, complicating key management for signing clients.
A Zero-Knowledge Proof (ZKP) is a cryptographic mechanism allowing someone to prove properties about some data without disclosing the data itself. Given some data signed by a X.509 certificate, a user could prove that the signature and certificate are valid without disclosing the identifiable parts of the certificate (serial number, public key, issuer signature, validity period). A C2PA manifest could be redacted using a ZKP allowing anyone to verify that:
This technique is very promising as it is compatible with the current C2PA specification and doesn’t require changes to the key management infrastructure. Early prototyping efforts show that the approach would be practical for this use case, but more experiments must be conducted to work out the details.
Using CAWG identity assertions with a privacy-preserving credential type would provide rich disclosure capabilities to users. For example, a credential encoding various user attributes (e.g., name, affiliation, role, location, etc.) that could be selectively disclosed would offer flexible privacy control for signers. Example of such credential types include:
It would however be hard to achieve anonymity using this technique alone. The current C2PA specification mandates the use of a X.509 claim generator signature on all assertions in the manifest (including the identity one); this signature is inescapably linkable and could negate the privacy properties of the identity assertion. The X.509-based techniques above could be used by the C2PA claim generator to work-around this issue.