TOOLPIPO LAB C2PA

Content Credentialsは再保存すると消える?

画像の作成・編集についての記録は、保存し直しても残るのでしょうか。コピー、JPEGへの再保存、スクリーンショットで比べました。

ToolPipoの合成C2PA元画像

結論

見た目が同じでも、再保存で埋め込まれた来歴が失われる場合があります。来歴がないことだけでは、AI生成かどうかを判定できません。

検証概要

検証日
検証条件
自作ファイル・条件・実測結果は本文に掲載
再現用ファイル
本文に作成条件・確認方法を掲載

コピーでは残り、再保存とスクリーンショットでは確認できなかった

Content Credentialsは、画像の作成・編集についての情報を記録する仕組みです。今回は、その情報をC2PA形式で画像ファイルに埋め込んだサンプルを使いました。

見た目が同じでも、埋め込まれた来歴が引き継がれるとは限りません。

ファイルをそのままコピーすると、ハッシュ値も埋め込みC2PAも変わりませんでした。JPEGに再保存した画像と、画面から撮影したPNGでは、元のC2PAを確認できませんでした。

C2PAが見つからないことだけを理由に、AI生成・AI編集されていないとは判断できません。

実測比較(SHA-256は先頭16文字、完全値は各実験に記載)
ファイル・処理pixel寸法サイズSHA-256埋め込みC2PA
元の合成JPEG16×1643,633 bytesc78dd174bdf6020a…検出。trainedAlgorithmicMediaを確認
byte-for-byteコピー16×1643,633 bytes元と同一元と同じC2PAを検出
Canvas JPEG再保存16×16762 bytesc7a24e663e6d757f…今回のlocal解析では確認できず
Chromium screenshot PNG16×16112 bytes4ff2faadd756f869…今回のlocal解析では確認できず

ここで調べたのは各ファイルに埋め込まれた来歴です。外部データベースからの復元、透かし、画像指紋の照合は行っていません。

検証に使ったC2PA画像

元画像は、ToolPipoが検証用に用意した16×16ピクセルの合成JPEGです。実在する人物や外部の著作物は含みません。

サンプルの署名と検証上の注意点

テスト証明書で署名したC2PAの記録には trainedAlgorithmicMedia がありました。AI画像・編集来歴チェッカーでも「来歴記録あり」と表示されますが、署名については signingCredential.untrusted と報告されます。この画像が特定の生成AIサービスで作られたと証明する実験ではありません。

元ファイル:43,633 bytes / SHA-256 c78dd174bdf6020aa21ab4e2f092eaecece6aa69b000192b48b2783d9aa8f209。

図1:同じ元画像から作ったファイルの見た目
元C2PA JPEGCanvas JPEG再保存Chromium screenshot PNG
ToolPipoの合成C2PA元画像元画像をCanvasでJPEG再保存した画像Chromiumで画像要素を撮影したPNG
図1。比較しやすいよう16×16 pixelを拡大表示しています。元fixtureは単色に近い検証用画像で、見た目から来歴の有無は読み取れません。

実験1:ファイルをそのままコピー

元のJPEGを、内容を変えずにコピーしました。サイズは43,633 bytes、SHA-256は元と同じ c78dd174bdf6020aa21ab4e2f092eaecece6aa69b000192b48b2783d9aa8f209 です。

C2PAの解析結果も変わらず、active manifestの trainedAlgorithmicMedia と signingCredential.untrusted を確認できました。

実験2:JPEGとして再保存

元画像をChromiumで読み込み、16×16ピクセルのCanvasに描いてから canvas.toBlob(..., "image/jpeg", 0.92) で保存しました。コピーとは違い、新しく作ったJPEGです。

サイズは762 bytes、SHA-256は c7a24e663e6d757f89c254441a66ed642018d987a24f59094fd1ffeef1306e00。チェッカーで埋め込みC2PAは確認できず、調べたメタデータ項目にもAI関連の文字列はありませんでした。C2PA対応アプリで新しい来歴を付けたわけではありません。

実験3:画像要素のスクリーンショット

元画像をChromiumの img 要素に表示し、その要素の表示領域だけをPlaywrightで撮影して新しいPNGを作りました。OS全画面スクリーンショットの再現ではありません。

生成ファイルは16×16 pixel、112 bytes、SHA-256 4ff2faadd756f869e8b7904fd6f76752974d86e7348f089c87f836ea351e925a。チェッカーでは埋め込みC2PAを確認できず、対象metadata項目にもAI関連文字列は見つかりませんでした。PNGのバイト列とハッシュはChromiumの版・環境で変わり得ます。

図2:派生ファイルを作った経路
出発点C2PA付き合成JPEG
byte copy同じファイルデータ → C2PA検出
Canvas JPEGpixelをdecode → Canvasに描画 → 新しいJPEGへencode
screenshot PNGブラウザで表示 → 画像要素の領域を撮影 → 新しいPNG
図2。下2つは新しいファイルであり、C2PA対応ソフトが来歴を引き継いだ結果ではありません。

ファイル内で見つからなくても、来歴がすべて消えたとは限らない

CAIのDurable Content Credentialsの説明では、ファイルに埋め込むmanifestに加え、見えない透かしや画像指紋を使って、オンラインに保存したmanifestを探し直す方法が説明されています。CAI公式FAQも、通常の画像のスクリーンショットには元画像のC2PA metadataが含まれない一方、透かしや指紋による復元の可能性を区別しています。

今回はクラウド上のmanifest、透かし、画像指紋を照合していません。スクリーンショットに埋め込みC2PAがなくても、外部から来歴を復元できるかは分かりません。ToolPipoのチェッカーも外部には問い合わせず、選んだファイルの内部だけを調べます。

図3:確認した範囲
今回確認したこと4ファイル内の埋め込みC2PAと、元画像との違い
確認していないこと透かし・画像指紋・クラウド上のmanifestからの来歴復元
ファイル内で見つからないことと、来歴がどこにもないことは別です。

合成サンプルをダウンロード

3ファイルすべてToolPipoの合成fixtureまたはその派生ファイルです。実在人物・実在個人情報・外部著作物は含みません。

自分で確認する

  1. 上の3ファイルをダウンロードします。
  2. AI画像・編集来歴チェッカーに元JPEGを読み込み、C2PAの記録と検証上の注意点を確認します。
  3. Canvas JPEGとscreenshot PNGを順に読み込み、表示内容を冒頭の表と比較します。
  4. 必要なら各ファイルのSHA-256を計算し、記事に記載した値と照合します。

画像はブラウザ内で解析され、ToolPipoのチェッカーは外部manifestを取得しません。

一次資料と検証方法

仕様の説明と、ToolPipoの合成ファイルから得た実測結果は分けて記載しました。元fixtureは既存のToolPipoテスト素材から作られ、再エンコードとscreenshotはChromium 151.0.7922.34で生成しました。コンテンツ制作・計算検証方針もご覧ください。

自分のファイルで確認する

自分のファイルで確認する

関連する検証