お断り: 本記事は CAWG 公式仕様書(cawg.io)C2PA Technical Specification v2.4 を筆者が読解して整理したものです。原典には本記事に含まれない細部(CDDL スキーマ・検証ルール・推奨事項など)が多数含まれます。実装や設計判断の根拠として用いる際は、必ず公式仕様書をご確認ください。本記事に誤りや古くなった箇所を見つけられた場合は、記事末尾のフィードバック枠よりお知らせいただけると助かります。

はじめに

C2PA を実装側から触っていると、必ずどこかで CAWG という単語に出会います。cawg.identitycawg.training-miningcawg.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 等の追加情報がない constrainednotAllowed と同等に扱う、と明記されています。

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.exifstds.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 つ:

  1. C2PA 本体のアサーション(c2pa.actions.v2)と CAWG のアサーション(cawg.training-miningcawg.identity)が同一マニフェスト内に並列に並んでいます。
  2. cawg.training-mining では cawg.ai_inferencecawg.ai_generative_training の両方が notAllowed になっています。つまりこのコンテンツは推論にも生成 AI 学習にも使うな、というクリエイター意思を機械可読で表明しています。
  3. cawg.identity は独自の signature_info(Ed25519)を持ち、その対象は signer_payload.referenced_assertions で指定された cawg.training-miningc2pa.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 を試作してみるのが理解への近道です。

参考資料