跳到內容

C2PA 快速入門指南

5 分鐘開始使用 C2PA!本指南將協助您理解、驗證和建立 C2PA 簽署的內容。

  1. 理解 C2PA
  2. 驗證 C2PA 內容
  3. 建立 C2PA 內容
  4. 下一步

C2PA 在您的媒體檔案中新增經過加密簽署的「manifest」,包含:

  • :創作者/編輯者身份
  • 什麼:執行的動作(建立、編輯、AI 生成)
  • 何時:時間戳記
  • 如何:使用的工具和設定
  • :來源素材(ingredients)
原始照片 → [新增 C2PA Manifest] → 已簽署照片
包含中繼資料:
• 創作者:John Doe
• 相機:Nikon Z9
• 日期:2025-11-21
• GPS:37.7749°N, 122.4194°W
• 簽章:✓ 有效

當您編輯時:

已簽署照片 → [在 Photoshop 中編輯] → 新的已簽署照片
新 manifest 引用
原始照片為「ingredient」

結果:從原始版本到目前版本的完整來源鏈。


無需安裝!

  1. 造訪 https://contentcredentials.org/verify
  2. 拖放任何圖片/影片/文件
  3. 檢視來源資訊:
    • 創作者身份
    • 編輯歷史
    • 簽章狀態
    • 原始內容(如果可用)

立即嘗試範例圖片:https://contentauthenticity.org/examples

瀏覽時自動驗證:

  1. 安裝 Content Credentials Extension
    • 適用於 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
# 將 manifest 儲存到 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. 前往編輯 → Content Credentials
  3. 填寫創作者資訊
  4. 儲存檔案 → 自動新增 C2PA manifest
  • Nikon Z9/Z8:在相機設定中啟用 → 拍攝時簽署照片
  • 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": "John Doe"
}
]
}
},
{
"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")?;
// 新增創作者 assertion
builder.add_assertion("stds.schema-org.CreativeWork",
r#"{"author": [{"name": "John Doe"}]}"#)?;
// 簽署並儲存
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: 'John Doe' }]
}
}
]
};
const signer = {
cert: 'path/to/cert.pem',
key: 'path/to/key.pem'
};
await c2pa.sign(inputPath, outputPath, manifest, signer);
console.log('Signed successfully!');
}
sign('input.jpg', 'output.jpg');
from c2pa import Builder, Signer
# 建立 builder
builder = Builder.from_file('input.jpg')
# 新增 assertions
builder.add_assertion('stds.schema-org.CreativeWork', {
'author': [{'name': 'John Doe'}]
})
# 簽署
signer = Signer('cert.pem', 'key.pem')
builder.sign('output.jpg', signer)
print('Signed successfully!')

方法 4:編輯已簽署的內容(保留來源)

Section titled “方法 4:編輯已簽署的內容(保留來源)”

編輯 C2PA 簽署的內容時,將原始內容引用為「ingredient」:

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

新 manifest 將引用 original_photo.jpg 作為 ingredient,保留完整歷史。


理解規範:

探索工具:

常見問題:

官方教學課程:

程式碼範例:

上線前:

  1. 取得生產憑證

    • 從受信任的 CA 購買(DigiCert、GlobalSign 等)
    • 確保 C2PA 相容的金鑰使用
    • 費用:每年約 50-500 美元
  2. 安全金鑰儲存

    • 對私密金鑰使用硬體安全模組(HSM)
    • 或雲端 HSM(AWS CloudHSM、Azure Key Vault)
    • 切勿將金鑰提交到原始碼控制
  3. 徹底測試

    • 使用多個驗證器驗證簽章
    • 測試不同的檔案格式
    • 檢查跨平台相容性
  4. 監控與維護

    • 實作憑證輪換
    • 監控撤銷
    • 保持 SDK 更新

關鍵整合點:

您的應用程式工作流程:
1. 內容建立/上傳
2. [新增 C2PA Manifest] ← 您的整合點
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": "Creator Name"}]
}
}
]
}

  • 檔案可能沒有 C2PA manifest
  • 中繼資料可能已被剝離
  • 嘗試不同的檔案格式
  • 簽署後檔案已修改
  • 憑證已撤銷或過期
  • 信任鏈中斷
  • 使用自簽憑證(測試預期)
  • CA 不在信任清單中
  • 如有需要,新增自訂信任錨點
  • C2PA 每個 manifest 新增約 10-50KB(最少)
  • 一般檔案簽署耗時 <1 秒
  • 驗證幾乎是即時的

**準備好開始了嗎?**從上面選擇您的方法並深入探索!

**有問題嗎?**查看 FAQ開啟問題


最後更新:2025 年 11 月