画像の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チャンクを直接読み取ります。
検証時に確認すべきこと
- 誰が署名したか。 Adobe Inc.という証明書のサブジェクトと「C2PA Test Signing Cert」というサブジェクトは全く異なります。テスト証明書で署名されたマニフェストは構造的には有効ですが、誰も保証していません。
- トラストリスト。 CAIは既知の署名者のリストを管理しています。リスト外の証明書は必ずしも偽物ではありませんが、自分で判断する必要があります。
- コンテンツハッシュが一致するか。
c2pa.hash.dataが実際の画像コンテンツと一致する場合のみ、画像が署名後に変更されていないことが分かります。 - アクティブマニフェストの内容。 何回かの編集を経て複数のマニフェストが生成され、最後のものがアクティブです。その
c2pa.actionsは、これがc2pa.createdかc2pa.editedか、ソースタイプがdigitalCaptureかtrainedAlgorithmicMediaかを記述します。
一般的な結果
- 有効な署名、カメラメーカーが署名者、ソースタイプdigitalCapture:カメラからの直撮り。
- 有効な署名、OpenAIまたはAdobeが署名者、ソースタイプtrainedAlgorithmicMedia:AI生成で、生成ツールがそれを宣言している。
- 有効な署名だが、イングリディエントがAI生成:複合画像。具体的なアクションを確認。
- マニフェストは存在するが署名が無効:署名後に画像が変更されたか、マニフェストが他の画像から移植された。