---
source_url: https://xusheng.dev/posts/reversing/mspaint_invisible_watermark/main/
source_title: "Microsoft Paint and Photos Embed Server-Issued GUIDs as Invisible Watermarks in Locally-Generated Images"
source_site: "Xusheng Li"
source_published_at: 2026-08-21 00:00:00 +0000 UTC
hero_image: https://xusheng.dev/posts/reversing/mspaint_invisible_watermark/social-preview.jpg
tags: watermarking,reverse-engineering,microsoft-paint,ai-image-generation,security
generated_at: 2026-08-24T20:01:05.539Z
model: claude-haiku-4-5
---
# Microsoft Paint と Photos が生成画像に目視不可能なウォーターマークを埋め込んでいることが判明

TL;DR: リバースエンジニアリング調査により、Microsoft Paint と Photos がサーバーから発行された GUID を目視不可能なピクセルレベルのウォーターマークとして、ローカル生成の AI 画像に埋め込んでいることが明かされた。このウォーターマークは C2PA コンテンツ認証メタデータにも紐付けられている。

Microsoft Paint と Photos は、ローカルで生成した AI 画像にサーバー発行の GUID を目視不可能なウォーターマークとして埋め込むことが、リバースエンジニアリング分析で明らかになった。2026-08-21 に公開された調査では、この埋め込みプロセスと両アプリケーションの異なる処理方法が詳細に解析されている。

## リモート審査とウォーターマーク ID

Paint と Photos がローカルで画像生成モデルを実行する前に、AIServices.dll がプロンプトとスタイルを `https://apsaiservices-a0fqcjc6bzbhgdcd.b02.azurefd.net/v1/paint-cocreator/moderate-prompt` に送信する。レスポンスパーサーは `revisedPrompt`、`promptGenerationId`、`watermarkId`、`containsHumanReference` の各フィールドを期待する。このサーバーから返される watermarkId は 16 バイトの GUID であり、この値がウォーターマーク埋め込みの鍵となる。

## ウォーターマーク埋め込みアルゴリズム

16 バイトの GUID はコンテンツ適応ブロック領域ウォーターマーキングアルゴリズムを使用して画像に埋め込まれる。ウォーターマークは 18 バイトのメッセージとして構成され、0x4c プレフィックス、GUID、そしてバイトサムチェックサムから成る。このメッセージから派生した 144 個の個別ビットが埋め込まれ、各ビットは最低 3 回の配置が必須である。ウォーターマーク埋め込みには最小で幅 192 ピクセル、高さ 192 ピクセルの画像が必要とされる。

512×512 BGRA テスト画像への検証では、262,144 ピクセル総数のうち 193,376 ピクセルが変更された。

## Paint と Photos の相違する処理

Paint は `WmkWriteWatermark` 実行後、ウォーターマーク埋め込みに失敗した場合は画像の返却ではなく生成全体をエラーに変換する。これに対し Photos はウォーターマーク埋め込みエラーをログに記録しながらも、ウォーターマークなしで生成画像を返却し続ける。

Paint は AI 生成画像の保存を C2PA 互換形式である PNG、JPEG、GIF、.paint に制限している。PNG に保存された C2PA マニフェストは、アルゴリズム `com.microsoft.invismark.1` とウォーターマーク GUID 値によるソフトバインディングを含む。18,979 バイトの caBX チャンク内にマニフェストが格納される。

## ローカルモデルと暗号化

Paint と Photos はローカル AI モデルを .onnxe 拡張子ファイルで配布している。seg.onnxe は 23.1 MB、inseg_enc.onnxe は 28.0 MB、inseg_dec.onnxe は 16.5 MB、mager.onnxe は 302.4 MB のサイズである。Paint は seg.onnxe の暗号化キーに Microsoft_2023 を、その他の .onnxe ファイルに 4,096 バイトの英数字キーを使用する。ウォーターマーク処理は Watermarker.dll（1.67 MB）により実行される。

Copilot+ PC は画像をローカル生成しながらも、プロンプトをなお Microsoft のリモート審査サービスに送信する。

![watermarker-dll-properties](https://xusheng.dev/posts/reversing/mspaint_invisible_watermark/watermarker-dll-properties.png)

![visible-watermark-setting](https://xusheng.dev/posts/reversing/mspaint_invisible_watermark/visible-watermark-setting.png)

## 筆者の見立て

- ローカル生成器はクラウド生成器のようにリモートで出力をウォーターマークできないため、Paint がローカルに生成されたピクセルを直接改変する必要があるもの、とこの実装の理由を解釈している
- リモートエンドポイントが ウォーターマーク処理やコンテンツ認証パッケージング前に画像を返却できれば、どちらの信号も付加されていないクラウド生成画像を取得する可能性があると予想している
- この実装は 2026 年 8 月 2 日に発効した EU AI Act 第 50 条の透明性規則に関連している可能性を示唆している
- Paint または Photos を改変して、プロンプト審査とウォーターマーク埋め込みの両方をバイパスすることが可能な可能性があると予想している

*この記事は元記事の事実のみに基づいて自動生成されました。*

## 出典

Xusheng Li『Microsoft Paint and Photos Embed Server-Issued GUIDs as Invisible Watermarks in Locally-Generated Images』https://xusheng.dev/posts/reversing/mspaint_invisible_watermark/main/
