跳转到内容

C2PA 快速入门指南

5 分钟开始使用 C2PA!本指南将帮助您理解、验证和创建 C2PA 签名内容。

  1. 理解 C2PA
  2. 验证 C2PA 内容
  3. 创建 C2PA 内容
  4. 下一步

C2PA 向您的媒体文件添加加密签名的”清单”,包含:

  • :创作者/编辑者身份
  • 什么:执行的操作(创建、编辑、AI 生成)
  • 何时:时间戳
  • 如何:使用的工具和设置
  • 来自:源材料(成分)
原始照片 → [添加 C2PA 清单] → 签名照片
包含元数据:
• 创作者:张三
• 相机:Nikon Z9
• 日期:2025-11-21
• GPS:37.7749°N, 122.4194°W
• 签名:✓ 有效

编辑时:

签名照片 → [在 Photoshop 中编辑] → 新签名照片
新清单引用
原始作为"成分"

结果:从原始到当前版本的完整来源链。


无需安装!

  1. 访问 https://contentcredentials.org/verify
  2. 拖放任何图像/视频/文档
  3. 查看来源信息:
    • 创作者身份
    • 编辑历史
    • 签名状态
    • 原始内容(如果可用)

立即尝试 示例图像:https://contentauthenticity.org/examples

在浏览时自动验证:

  1. 安装内容凭证扩展
    • 适用于 Chrome、Edge、Brave
  2. 正常浏览
  3. 扩展自动检测 C2PA 内容
  4. 点击图标查看来源详情

对于开发者和高级用户:

Terminal window
# macOS/Linux(使用 Cargo)
cargo install c2patool
# macOS(使用 Homebrew)
brew install c2patool
# Windows
# 从以下位置下载:https://github.com/contentauth/c2patool/releases
Terminal window
# 基本验证
c2patool photo.jpg
# 详细 JSON 输出
c2patool photo.jpg --detailed
# 将清单保存到 JSON 文件
c2patool photo.jpg --output manifest.json
# 检查多个文件
c2patool *.jpg
File: photo.jpg
Status: ✓ Valid C2PA signature
Creator: John Doe (john@example.com)
Created: 2025-11-21T10:30:00Z
Camera: Nikon Z9
Signature: Valid
Certificate: DigiCert
Actions: Captured

将验证集成到您的应用:

const c2pa = require('c2pa-node');
async function verify(imagePath) {
const manifest = await c2pa.read(imagePath);
if (manifest) {
console.log('Creator:', manifest.claim.creator);
console.log('Created:', manifest.claim.created);
console.log('Valid:', manifest.validation_status);
} else {
console.log('No C2PA data found');
}
}
verify('photo.jpg');
from c2pa import Reader
reader = Reader('photo.jpg')
manifest = reader.manifest()
if manifest:
print(f"Creator: {manifest.creator}")
print(f"Created: {manifest.created}")
print(f"Valid: {manifest.is_valid}")
else:
print("No C2PA data found")

无需编码:

  1. 在 Photoshop/Lightroom 中打开图像
  2. 转到编辑 → 内容凭证
  3. 填写创作者信息
  4. 保存文件 → 自动添加 C2PA 清单
  • Nikon Z6 III:在相机设置中启用(2025 年计划) → 拍摄时签名照片
  • Leica M11-P/SL3:自动启用签名
  • Sony Alpha 系列:通过固件更新启用

您需要签名证书:

用于测试(自签名):

Terminal window
# 生成测试证书(验证器不信任)
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes

用于生产:

  • 从受信任的 CA 购买证书(DigiCert、GlobalSign 等)
  • 指定 C2PA 密钥使用要求

创建 manifest.json

{
"claim_generator": "my-app/1.0",
"assertions": [
{
"label": "stds.schema-org.CreativeWork",
"data": {
"@context": "https://schema.org",
"@type": "CreativeWork",
"author": [
{
"@type": "Person",
"name": "张三"
}
]
}
},
{
"label": "c2pa.actions",
"data": {
"actions": [
{
"action": "c2pa.created"
}
]
}
}
]
}
Terminal window
# 使用您的证书签名
c2patool photo.jpg \
--manifest manifest.json \
--signer-cert cert.pem \
--signer-key key.pem \
--output signed_photo.jpg
# 验证是否成功
c2patool signed_photo.jpg
use c2pa::{Builder, SigningAlg};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut builder = Builder::from_file("input.jpg")?;
// 添加创作者断言
builder.add_assertion("stds.schema-org.CreativeWork",
r#"{"author": [{"name": "张三"}]}"#)?;
// 签名并保存
let signer = get_signer(); // 您的证书/密钥
builder.sign("output.jpg", signer)?;
Ok(())
}
const c2pa = require('c2pa-node');
async function sign(inputPath, outputPath) {
const manifest = {
claim_generator: 'my-app/1.0',
assertions: [
{
label: 'stds.schema-org.CreativeWork',
data: {
author: [{ name: '张三' }]
}
}
]
};
const signer = {
cert: 'path/to/cert.pem',
key: 'path/to/key.pem'
};
await c2pa.sign(inputPath, outputPath, manifest, signer);
console.log('签名成功!');
}
sign('input.jpg', 'output.jpg');
from c2pa import Builder, Signer
# 创建构建器
builder = Builder.from_file('input.jpg')
# 添加断言
builder.add_assertion('stds.schema-org.CreativeWork', {
'author': [{'name': '张三'}]
})
# 签名
signer = Signer('cert.pem', 'key.pem')
builder.sign('output.jpg', signer)
print('签名成功!')

方法 4:编辑签名内容(保留来源)

Section titled “方法 4:编辑签名内容(保留来源)”

编辑 C2PA 签名内容时,将原始内容引用为”成分”:

Terminal window
# 编辑并保留链
c2patool edited_photo.jpg \
--parent original_photo.jpg \
--manifest edit_manifest.json \
--signer-cert cert.pem \
--signer-key key.pem \
--output final_photo.jpg

新清单将引用 original_photo.jpg 作为成分,保留完整历史。


理解规范:

探索工具:

常见问题:

官方教程:

代码示例:

上线前:

  1. 获取生产证书

    • 从受信任的 CA 购买(DigiCert、GlobalSign 等)
    • 确保 C2PA 兼容的密钥使用
    • 成本:约 50-500 美元/年
  2. 安全密钥存储

    • 为私钥使用硬件安全模块(HSM)
    • 或云 HSM(AWS CloudHSM、Azure Key Vault)
    • 切勿将密钥提交到源代码管理
  3. 彻底测试

    • 使用多个验证器验证签名
    • 测试不同文件格式
    • 检查跨平台兼容性
  4. 监控和维护

    • 实施证书轮换
    • 监控撤销
    • 保持 SDK 更新

关键集成点:

您的应用工作流:
1. 内容创建/上传
2. [添加 C2PA 清单] ← 您的集成点
3. 使用证书签名
4. 保存/发布签名内容
5. [可选] 显示时验证 ← 另一个集成点

典型集成时间:

  • 简单验证:1-2 天
  • 基本签名:3-5 天
  • 完整生产部署:2-4 周

测试(免费):

  • 自签名证书
  • 仅适用于开发
  • 验证器不信任

生产:

获取帮助:

贡献:


Terminal window
c2patool image.jpg
Terminal window
c2patool input.jpg \
--manifest manifest.json \
--signer-cert cert.pem \
--signer-key key.pem \
--output signed.jpg
https://contentcredentials.org/verify
{
"claim_generator": "app-name/version",
"assertions": [
{
"label": "stds.schema-org.CreativeWork",
"data": {
"author": [{"name": "创作者姓名"}]
}
}
]
}

  • 文件可能没有 C2PA 清单
  • 元数据可能已被删除
  • 尝试不同的文件格式
  • 签名后文件被修改
  • 证书被撤销或过期
  • 信任链断开
  • 使用自签名证书(测试预期)
  • CA 不在信任列表中
  • 如果需要,添加自定义信任锚点
  • C2PA 每个清单添加约 10-50KB(最小)
  • 典型文件签名时间 < 1 秒
  • 验证几乎是即时的

准备好开始了吗? 选择上面的方法并开始!

有问题? 查看 FAQ提交 issue


最后更新:2025 年 11 月