ガイド

画像のContent Credentialsを検証する方法

ブラウザのドロップゾーンからコマンドラインまで、C2PAマニフェストを読み取って検証する4つの方法と、各方法で何が表示でき、何ができないか。

オプション1:オンラインツール

画像をAuditImageのホームページにドロップすると、数秒でマニフェストの生成者、署名証明書、アクション、イングリディエントが表示されます。AuditImageはCBORエンコードされたアサーションを含むJUMBF構造全体を解析し、署名、コンテンツハッシュバインディング、アサーションハッシュ、証明書チェーンをC2PAトラストリストに対して検証し、C2PAとEXIFとXMPをクロスチェックします。タイムスタンプトークンは存在しますが検証されていないとして報告されます。

厳密な署名検証にはverify.contentauthenticity.org(公式CAIサイト)を使用してください。署名、証明書チェーン、コンテンツハッシュをチェックし、トラストリストのステータスを表示します。

オプション2:ブラウザ拡張機能

Chrome Web Storeには「C2PA Content Credentials」という拡張機能があり、右クリックメニューから任意のWeb画像を検査できます。Chrome自体がC2PA検証をブラウザとGoogle Searchに組み込んでいるところであり、Credential付きの画像にはラベルが表示されます。

オプション3:コマンドライン

c2patoolはRustで書かれたC2PAリファレンス実装で、クロスプラットフォームです:

c2patool photo.jpg              # マニフェスト概要をJSON形式で表示
c2patool photo.jpg --detailed   # アサーション、イングリディエント、ハッシュバインディング、署名結果
c2patool photo.jpg --tree       # マニフェストツリー

exiftoolもJUMBFを読み取れます:

exiftool -a -G1 -s -JUMBF:all photo.jpg
exiftool -v3 photo.jpg | grep APP11   # APP11の存在と分割の有無を確認

オプション4:自らバイト列を読み取る

JPEGではマニフェストはAPP11セグメント(マーカーFF EB)に配置されています。ペイロードはJPで始まり、その後に2バイトのボックスインスタンス番号、4バイトのパケットシーケンス番号、JUMBFボックスの長さとタイプjumbが続きます。64KBを超えるマニフェストは複数のAPP11セグメントに分割され、シーケンス番号で再アセンブルされます。PNGではcaBXチャンクを直接読み取ります。

検証時に確認すべきこと

  1. 誰が署名したか。 Adobe Inc.という証明書のサブジェクトと「C2PA Test Signing Cert」というサブジェクトは全く異なります。テスト証明書で署名されたマニフェストは構造的には有効ですが、誰も保証していません。
  2. トラストリスト。 CAIは既知の署名者のリストを管理しています。リスト外の証明書は必ずしも偽物ではありませんが、自分で判断する必要があります。
  3. コンテンツハッシュが一致するか。 c2pa.hash.dataが実際の画像コンテンツと一致する場合のみ、画像が署名後に変更されていないことが分かります。
  4. アクティブマニフェストの内容。 何回かの編集を経て複数のマニフェストが生成され、最後のものがアクティブです。そのc2pa.actionsは、これがc2pa.createdかc2pa.editedか、ソースタイプがdigitalCaptureかtrainedAlgorithmicMediaかを記述します。

一般的な結果

  • 有効な署名、カメラメーカーが署名者、ソースタイプdigitalCapture:カメラからの直撮り。
  • 有効な署名、OpenAIまたはAdobeが署名者、ソースタイプtrainedAlgorithmicMedia:AI生成で、生成ツールがそれを宣言している。
  • 有効な署名だが、イングリディエントがAI生成:複合画像。具体的なアクションを確認。
  • マニフェストは存在するが署名が無効:署名後に画像が変更されたか、マニフェストが他の画像から移植された。