研究員 Xusheng Li 逆向工程拆解 Windows 的 Paint 與 Photos,發現兩者在「本地」生成 AI 圖片時,仍然會把提示詞送到微軟伺服器審核,再把伺服器發回的一組 GUID 以隱形浮水印形式寫進像素。整個過程沒有在介面上提示過用戶。
事件背景
Paint 的 Cocreator 一直以「在裝置的 NPU 上運行」作為賣點,Photos 的生成功能同樣如此。Li 測試的版本是 Paint 11.2605.71.0 與 Photos 2026.11060.2004.0。
他抓到的網絡請求顯示,按下生成之前,應用會先把提示詞連同風格參數送去一個 Azure Front Door 端點做內容審核。伺服器回覆時發出兩組 GUID:一組 `watermarkId` 會被寫進圖片像素,另一組 `promptGenerationId` 用於 C2PA 資訊清單的簽署。兩組編號分開傳送,但在伺服器一端是關聯的。
真正值得留意的是第三件事:下一次生成請求會帶上上一次的 `promptGenerationId`,欄位名為 `lastPromptGenerationId`。換言之,同一部機上連續多次的生成請求,在伺服器眼中是明確串連起來的一條鏈,而不是各自獨立的事件。
拆解出來的機制
項目 | 內容 |
|---|---|
受影響應用 | Paint 11.2605.71.0、Photos 2026.11060.2004.0 |
受影響功能 | Cocreator(本地 NPU)與 Image Creator(雲端)同樣中招 |
寫入內容 | 16 位元組 GUID,伺服器發出 |
浮水印手法 | 內容自適應、區塊域,每個位元至少改動三處 |
改動幅度 | 一張 512×512 圖片約 193,376 個像素被改動 |
C2PA 對應 | 資訊清單記錄軟綁定,演算法識別碼 `com.microsoft.invismark.1`,由微軟簽署 |
抗處理能力 | 改的是像素而非中繼資料,重新壓縮仍然保留 |
匯出限制 | Paint 只准 AI 圖片存成 PNG、JPEG、GIF 或 `.paint` 等相容格式 |
兩者分別 | Paint 寫不到浮水印就當生成失敗;Photos 只記錄錯誤,照樣把沒有浮水印的圖交出來 |
19 萬這個數字值得停一停。這不是在檔案尾巴貼一段中繼資料,而是把識別碼攤開寫進整幅圖的像素分佈裡,所以截圖、轉存、重新壓縮都洗不走它。
「本地」的定義問題
Li 自己對追蹤這一點的措辭相當克制:這組 GUID 本身並不能證明誰做了那張圖,它只是一次生成請求的識別碼;只有在微軟把每個提示詞與發出它的帳戶關聯並保留下來的前提下,才有可能由圖反查到人。這是一種能力,不等於已在執行的做法。
微軟並未回應 The Register 的查詢。公司的支援文件確實有寫遠端內容過濾與 C2PA 憑證,但沒有說清楚資訊清單記錄的,是一組與提示詞對應、由伺服器發出的 GUID,而且它同時被寫進像素。
問題其實不在浮水印本身。C2PA 這類來源標記正是業界應對 AI 生成內容的方向,微軟做的比法規要求更多。問題在於「本地 AI」這四個字在用戶心中的意思,與實際發生的事並不一致:計算確實在裝置上發生,但提示詞離開了裝置,而且回來的東西被永久寫進成品。
對市場的影響
對用戶而言,實際影響取決於用途。做著玩的插圖無所謂;但如果提示詞本身帶有商業或個人敏感資訊,那段文字已經去過微軟的伺服器,而成品帶着一個可以指回那次請求的編號。Li 給關心此事的人的建議很直接:改用 Stable Diffusion 這類開放權重模型,配合開源的本機工具。
對業界而言,這件事替「on-device AI」這個賣點劃了一條需要驗證的界線。裝置端推理與裝置端隱私是兩回事,而目前市面上大部分「本地 AI」功能都保留了某種形式的雲端環節,可能是審核、可能是遙測、可能是模型更新。買方以後要問的不是「是否本地運行」,而是「有甚麼離開過這部機」。
對微軟而言,這是一個披露問題多過技術問題。同樣的機制,若在生成介面上寫明一句「提示詞會送往審核,成品會帶上來源標記」,今日就不會是新聞。




No comments yet