お断り: 本記事は CAWG 公式仕様書(cawg.io) と C2PA Technical Specification v2.4 を筆者が読解して整理したものです。原典には本記事に含まれない細部(CDDL スキーマ・検証ルール・推奨事項など)が多数含まれます。実装や設計判断の根拠として用いる際は、必ず公式仕様書をご確認ください。本記事に誤りや古くなった箇所を見つけられた場合は、記事末尾のフィードバック枠よりお知らせいただけると助かります。
はじめに
C2PA を実装側から触っていると、必ずどこかで CAWG という単語に出会います。cawg.identity、cawg.training-mining、cawg.metadata といったラベルのアサーションを c2patool の出力で見て、「これは何だ?」となるパターンです。
この CAWG(Creator Assertions Working Group)は、C2PA 本体の仕様策定組織とは別に、C2PA を土台に「クリエイター起点の追加アサーション」を標準化している組織です。日本語での体系的な解説はまだ少ないので、本記事では CAWG の位置付けと、現時点で定義されている主要 3 アサーション(identity / training-and-data-mining / metadata)を一次情報ベースで整理します。最後に c2pa-rs のテスト fixture を使って、実機で CAWG が C2PA マニフェストにどう載るかも確認します。
C2PA そのものの基礎は第1回 C2PAとは、Manifest の内部構造は第3回で扱っているので、用語で迷ったら適宜参照してください。
CAWG とは
CAWG は Decentralized Identity Foundation(DIF) 傘下のワーキンググループの 1 つです。公式サイト cawg.io には次のように位置付けが書かれています。
Building on the work of the Coalition for Content Provenance and Authenticity (C2PA), the Creator Assertions Working Group (CAWG) defines technical standards […] empower individuals and organizations to assert attribution of digital content while supporting privacy and transparency.
要点を整理すると、
- C2PA を土台にしている: C2PA Technical Specification の枠組み(マニフェスト・アサーション・JUMBF)はそのまま使う
- クリエイター中心の追加レイヤー: 「誰がこのコンテンツに関わったか」(人間関与者の身元・役割)「このコンテンツを AI 学習に使ってよいか」(クリエイターの利用許諾意思)など、C2PA 本体仕様だけでは表現しきれない領域を補う
- DIF 傘下: 仕様の批准は DIF(分散 ID 標準化のための独立財団)が行う。CAWG への正式参加には DIF 加盟が前提(Membership ページ)
つまり「C2PA の標準化団体(C2PA 本体)」と「クリエイター視点の上乗せ仕様の標準化団体(CAWG)」が並走している、という構図です。実装上は同じ C2PA マニフェスト内に C2PA 本体のアサーション(c2pa.*)と CAWG のアサーション(cawg.*)が混在する形で載ります。
CAWG が定義しているもの
cawg.io の現時点(2026 年 4 月)のラインナップは以下です。
| 仕様 | 種別 | 役割 |
|---|---|---|
| Identity Assertion | アサーション | コンテンツへの関与者を暗号署名で記録 |
| Training and Data Mining Assertion | アサーション | AI 学習・データマイニング利用の許諾を記述 |
| Metadata Assertion | アサーション | XMP / IPTC / Exif など複数規格を統合してメタデータを保護 |
| Endorsement Assertion | アサーション | コンテンツへの第三者推薦・支持を表明 |
| Organizational Identity Profile | プロファイル | 組織アイデンティティの記述プロファイル |
| User Experience Guidance | ガイダンス | UX 推奨事項 |
本記事では実装で頻繁に出会う Identity / Training and Data Mining / Metadata の 3 つに絞って解説します。
なぜ CAWG が必要なのか
C2PA 本体のマニフェストは「クレームジェネレータ(編集ツール・カメラ・SaaS など)が署名する」モデルです。これは「ツールが何をしたか」を記録するには十分ですが、「誰がこのコンテンツに関与したか」「クリエイターがこのコンテンツの AI 利用をどう望むか」といった人間や組織の意図を表現するレイヤーが手薄でした。
CAWG はこのギャップを埋めるレイヤーで、
- 関与者の身元と役割を、ツールの署名とは独立に立証する仕組み(identity)
- クリエイターが AI 利用許諾を機械可読で表明する仕組み(training-and-data-mining)
- C2PA 2.0 で制限された各種メタデータ標準を、統合的に保護する仕組み(metadata)
を C2PA の上に乗せるかたちで提供しています。
Identity Assertion(cawg.identity)
Identity Assertion v1.2 §1.1 Scope は次のように位置付けています。
This specification describes a C2PA assertion that allows a named actor to document their relationship to a C2PA asset produced by them or on their behalf independently from the C2PA claim generator, and to allow consumers of a C2PA asset to independently verify that the received asset was in fact produced by the named actor and has not been tampered with.
つまり、named actor(記名された関与者)が、クレームジェネレータとは独立に C2PA アセットへの自分の関わりを記録し、検証側がそれを独立に検証できるようにするためのアサーション、という定義です。
二層署名の構造
CAWG identity の最大の特徴は、C2PA Claim Signature とは別に独自の署名を持つ二層構造である点です。仕様書 §1.2 Conceptual overview は次のように位置付けています。
The identity assertion should be thought of as a trust signal that is independent from (and thus, in addition to) the trust signal provided by the C2PA claim generator itself.
二層構造の役割分担を整理すると、
- C2PA Claim Signature: クレームジェネレータ(編集ツール等)がマニフェスト全体に対して署名
- CAWG identity 署名: クレデンシャル保有者(個人・組織)が
signer_payloadという構造体に対して署名
これにより、たとえばフォトジャーナリストが撮影し、編集者が修正し、新聞社が公開する、というワークフローで、それぞれの関与者がツール署名とは独立に「自分が関与した事実」を主張できます。一方で、ツール側は何の人間関与もなく署名を発行できる(CAWG identity を持たないマニフェストもあり得る)ため、両者は補完関係です。
signer_payload の主要フィールド
signer_payload は CAWG identity 署名の対象となる構造体です。§5.2 CBOR schema の CDDL から主要フィールドを抜き出すと、
| フィールド | 必須/任意 | 内容 |
|---|---|---|
referenced_assertions | 必須 | 署名対象とするアサーションの一覧。Hard Binding 系を必ず含める |
sig_type | 必須 | 署名方式の識別子(例: cawg.x509.cose) |
role | 任意 | 関与者の役割。値は §5.1.2 Named actor roles で定義(仕様書例では cawg.creator 等) |
expected_partial_claim | 任意 | 想定する部分 Claim のハッシュ。identity assertion が別の Claim に付け替えられるのを防ぐ期待値 |
expected_claim_generator | 任意 | 想定するクレームジェネレータの署名証明書ハッシュ |
expected_countersigners | 任意 | 同一マニフェスト内の他の identity assertion を相互参照する仕組み(複数関与者がいる場合に使用) |
想定ユースケース
公式の Identity Assertion v1.2 §1.3 Use cases and examples が挙げている 6 つの主要ユースケースは次のとおりです。
| ユースケース | 内容 |
|---|---|
| ジャーナリズム | 撮影から編集・出版まで複数段階の関与者を明確に記録 |
| 重要映像の証拠的価値の向上 | 紛争現場や人権侵害の映像で、関与者の身元を必要に応じて redact しつつも、もとの撮影者が記録できるようにする |
| 選挙コンテンツの真正性とディープフェイク対策 | 選挙キャンペーン公式コンテンツを検証可能な形で発行 |
| デジタルマーケティングのブランド保護 | 企業が正規キャンペーンと模造品を区別できるようにする |
| デジタル創作者の attribution | 創作者が自身のアートと SNS 等を紐付け、無断転載に対しても由来を辿れるようにする |
| 音源サンプリングとアーティスト間コラボ | 楽曲のサンプル元を辿れるようにし、許諾管理を機械可読にする |
Training and Data Mining Assertion(cawg.training-mining)
Training and Data Mining Assertion v1.1 は、C2PA アセットを AI 学習やデータマイニングのワークフローで利用してよいかをクリエイターが宣言するアサーションです。
4 つの利用区分
仕様書は、利用形態を 4 つの事前定義エントリに分類しています。
| エントリ | 内容 |
|---|---|
cawg.data_mining | テキスト抽出やパターン分析(広義のデータマイニング) |
cawg.ai_inference | 学習済み AI モデルへの入力(推論時利用) |
cawg.ai_training | 分類・物体検出など、非生成型 AI の学習データとしての利用 |
cawg.ai_generative_training | 生成 AI の学習データとしての利用 |
3 つの許諾値
各エントリには次のいずれかの値を入れます。
allowed: 利用許諾ありnotAllowed: 利用不可constrained: 条件付き許諾
constrained の場合は constraint_info フィールドに条件詳細(ライセンス種別、URL、自由記述など)を記述します。仕様書 §3.1 の原文では:
constrained implies that permission is not unconditionally granted
と明記されており、無条件の許諾ではないことを示すための値です。さらに重要な規定として、constraint_info 等の追加情報がない constrained は notAllowed と同等に扱う、と明記されています。
In the absence of additional information, constrained shall be treated as equivalent to notAllowed.
つまり、条件付き許諾を意図する側は constraint_info を必ず添えないと、デフォルトで「不許可」として消費されることになります。
カスタムキーも追加可能ですが、cawg. プリフィックスは予約語として使えません。
Metadata Assertion(cawg.metadata)
Metadata Assertion v1.1 は、C2PA 2.0 で c2pa.metadata に課された制限のために表現できなくなったメタデータを、別のアサーションとして C2PA Manifest に含めるための仕様です(§1.1 History)。
c2pa.metadata との違い
c2pa.metadata 系の歴史は 3 段階で整理できます。
- C2PA 1.3 以前: メタデータ規格ごとの個別アサーション(
stds.exif、stds.iptc.photo-metadataなど) - C2PA 1.4: 単一の
c2pa.metadata(common metadata assertion)に統合 - C2PA 2.0:
c2pa.metadataに Appendix A の制限が追加
CAWG metadata の決定的な違いは:
The restrictions expressed in Appendix A […] SHALL NOT apply to this assertion.
つまり、format(JSON-LD ベース、後述)は C2PA 2.0 §18.14.1 “Common Requirements” の定義をそのまま継承しつつ、Appendix A の制限だけを適用除外にした、というのが CAWG metadata の位置付けです。
実装方式
JSON-LD ベースの単一アサーションとして実装されます。仕様書 §3 が引用している C2PA v2.0 §18.14.1 から:
Each metadata assertion shall contain a single JSON content type box containing the JSON-LD serialization of one or more metadata values.
@context プロパティで使用するメタデータ標準の名前空間(exif / exifEX / tiff / Iptc4xmpCore / Iptc4xmpExt / dc / photoshop など)を指定し、それらの規格に従ったフィールド(GPS 情報、撮影日時、カメラ機器情報、人物情報、場所情報など)を JSON-LD オブジェクトに統合します。XMP データモデル経由で JSON-LD にシリアライズする手順が推奨されています。
実機で CAWG を読む
c2pa-rs リポジトリには C_with_CAWG_data.jpg という CAWG 入りのテスト fixture があるので、実機で見てみます。
# c2pa-rs リポジトリを clone(前回記事と同じ)
git clone --depth 1 https://github.com/contentauth/c2pa-rs.git
# CAWG 入り fixture を読み、assertions 配列だけを jq で抜き出す
c2patool c2pa-rs/cli/tests/fixtures/C_with_CAWG_data.jpg | jq '.manifests[].assertions'
出力(CAWG 関連が見やすいように整形):
[
{
"label": "c2pa.actions.v2",
"data": {
"actions": [
{
"action": "c2pa.created",
"digitalSourceType": "http://cv.iptc.org/newscodes/digitalsourcetype/digitalCapture"
}
],
"allActionsIncluded": true
},
"created": true
},
{
"label": "cawg.training-mining",
"data": {
"entries": {
"cawg.ai_inference": { "use": "notAllowed" },
"cawg.ai_generative_training": { "use": "notAllowed" }
}
}
},
{
"label": "cawg.identity",
"data": {
"signer_payload": {
"referenced_assertions": [
{
"url": "self#jumbf=c2pa.assertions/cawg.training-mining",
"hash": "rBBgURB+/0Bc2Uk3+blNpYTGQTxOwzXQ2xhjA3gsqI4="
},
{
"url": "self#jumbf=c2pa.assertions/c2pa.hash.data",
"hash": "sASozh9KFSkW+cyMI0Pw5KYoD2qn7MkUEq9jUUhe/sM="
}
],
"sig_type": "cawg.x509.cose"
},
"signature_info": {
"alg": "Ed25519",
"issuer": "C2PA Test Signing Cert",
"cert_serial_number": "638838410810235485828984295321338730070538954823",
"revocation_status": true
}
}
}
]
これがマニフェスト内の assertions 配列の中身です。マニフェスト全体にかかる C2PA Claim Signature(Es256)の側は、同じ出力の別ブロック(.manifests[].signature_info)にあるので、こちらは c2patool ... | jq '.manifests[].signature_info' で別途確認できます。
ポイントを 3 つ:
- C2PA 本体のアサーション(
c2pa.actions.v2)と CAWG のアサーション(cawg.training-mining、cawg.identity)が同一マニフェスト内に並列に並んでいます。 cawg.training-miningではcawg.ai_inferenceとcawg.ai_generative_trainingの両方がnotAllowedになっています。つまりこのコンテンツは推論にも生成 AI 学習にも使うな、というクリエイター意思を機械可読で表明しています。cawg.identityは独自のsignature_info(Ed25519)を持ち、その対象はsigner_payload.referenced_assertionsで指定されたcawg.training-miningとc2pa.hash.dataの 2 つです。マニフェスト全体にかかる C2PA Claim Signature(同じ出力の別ブロックにEs256で記録される)とは別系統の署名で、二層構造になっていることが確認できます。
この fixture では CAWG identity 署名と C2PA Claim Signature が両方とも同じテスト証明書から発行されていますが、想定されている典型的な使い方は、これらが別主体の署名(編集ツール側 vs 人間関与者側)になるパターンです。仕様書の §1.3 ユースケース例も、フォトジャーナリスト・編集者・新聞社といった人間関与者が CAWG identity を出し、彼らが使うツールが C2PA Claim Signature を出す、という構図で書かれています。
おわりに
CAWG は C2PA を「ツール署名のレイヤー」だとすると、その上に「人間・組織の意図のレイヤー」を乗せる仕様群です。Identity Assertion で関与者の身元と役割を、Training and Data Mining Assertion で AI 利用許諾を、Metadata Assertion で各種メタデータ標準を、それぞれ機械可読・改ざん検知付きで残せます。
C2PA の v2.4 解説記事(こちら)でも触れた c2pa.ai-disclosure アサーションは、CAWG training-and-data-mining が先行した後、C2PA 本体側にも AI 周辺の透明性情報の枠組みが追加された例です。両者は方向性が違っていて、CAWG 側は「このアセットを将来 AI に使ってよいか」というクリエイターの許諾意思の表明、C2PA 側は「このアセットの生成にどんな AI が関与したか」という生成器側からの事実開示、と棲み分けています。
国内事業者で C2PA を実装する場合、
- 編集ツール / カメラ / SaaS の側: C2PA Claim Signature の発行とアサーション組み立て
- 配信・発行する個人 / 組織の側: CAWG identity 署名で関与の主張、CAWG training-mining で AI 利用許諾の表明
という二層を意識した設計が必要になります。c2pa-rs / c2patool は CAWG にも対応済みなので、本記事で確認した fixture を出発点に、自前のクリエイター証明書で identity assertion を試作してみるのが理解への近道です。