微软的“画图”和“照片”应用会在本地生成的 AI 图像中嵌入一个不可见的追踪水印。这项功能通过远程服务器实现:即使用户在本地生成图像,其输入的提示词也会被发送到微软服务器进行审核。服务器在返回审核结果的同时,会附带一个唯一的全局唯一标识符(GUID)。这个 GUID 随后作为隐形水印被编码进图像的像素中,并与一个名为 C2PA 的内容凭证系统相关联。尽管微软公开了其内容凭证的使用,但并未明确说明这个与用户提示词相关联的、由服务器发放的 GUID 水印的存在,这引发了关于用户隐私和知情权的担忧。
本地生成与远程审核的结合
尽管微软在 Windows 系统中内置了本地 AI 模型,允许“画图”等应用在用户设备上直接生成图像,但整个过程并非完全离线。
- 本地模型:应用内包含可用于图像生成的本地 AI 模型文件(
.onnxe格式)。 - 远程审核:在运行本地模型之前,应用会将用户输入的 提示词 发送到微软的远程服务器进行内容安全审核。
- 服务器响应:服务器不仅返回审核结果,还会附带一个 16 字节的 GUID(全局唯一标识符),即
watermarkId。
隐形水印的发现与原理
对应用文件的逆向工程分析揭示了一个名为 Watermarker.dll 的组件,它负责添加水印。
- 两种水印:该组件不仅能添加一个用户可选的 可见水印(右下角的 Copilot 小图标),还能强制添加一个 不可见的水印。
- 强制嵌入:一个名为
WmkWriteWatermark的函数负责将服务器返回的 GUID 嵌入图像像素。这个过程会改变图像中大量像素点的颜色值,但肉眼难以察觉。 - 失败即中止:在“画图”应用中,如果这个隐形水印添加失败,整个图像生成过程将 被视为失败,用户不会得到任何图像。
这项分析的核心发现是:“本地生成”并不意味着整个操作都在本地进行。微软接收并审核用户的提示词,然后发放一个独特的 GUID,该 GUID 会被“画图”应用嵌入到本地生成的图像中。
C2PA 内容凭证:双层标记系统
除了修改像素,应用还会为生成的图像附加 C2PA 内容凭证。这是一个加密签名的文件级元数据,旨在声明内容的来源。
- 信息关联:C2PA 凭证中明确记录了由服务器发放的
watermarkId。这表明文件级的元数据和像素级的隐形水印是 同一个溯源系统的两个部分。 - 双层保护:
- 文件级标记:C2PA 清单,如果文件被转换格式或元数据被擦除,可能会丢失。
- 像素级标记:隐形水印,即使文件被截图或转换格式,也可能保留,从而使内容与其来源记录(C2PA)重新关联。
为何需要本地水印功能?
“画图”应用存在两种不同的 AI 生成路径,这解释了为何需要一个本地水印工具。
- 云端 Image Creator:生成、加水印和签名都在微软的云端完成,“画图”应用直接接收成品。
- 本地 Cocreator (Copilot+ PC):图像由设备的 NPU(神经处理单元)在本地生成。因此,系统必须具备在本地嵌入服务器发放的 GUID 水印的能力。
此外,应用在保存 AI 生成的图像时,会限制文件格式选项(如 PNG、JPEG),以确保所选格式支持嵌入 C2PA 凭证,而像 BMP 这样的传统格式则被排除在外。
“照片”应用也存在同样机制
微软的“照片”应用中也发现了相同的 Watermarker.dll 文件和类似的工作流程。其“图像创建器”和“图像再创造”功能同样会将服务器发放的 GUID 作为隐形水印嵌入图片。
一个细微的区别在于,如果水印添加失败,“照片”应用似乎 仍会返回未加水印的图像,而“画图”应用则会直接报错。
微软的披露与未披露
微软在其支持页面上确实披露了部分信息,但关键细节被忽略了。
已披露:
- 会对用户提示词进行 内容过滤。
- 生成的图像会包含 C2PA 内容凭证,以帮助识别 AI 生成内容。
未披露:
- 并未解释 C2PA 凭证中包含一个与 隐形像素水印 绑定的 GUID。
- 没有说明这个 GUID 是由 远程提示词审核服务器 针对每个生成请求而发放的。
- 用户并不知道一个与自己输入内容直接关联的 独特追踪标识符 被永久嵌入了图像像素中。
这一发现表明,即便是本地的 AI 功能,也与远程服务器进行了超出用户普遍认知的深度绑定,这在隐私和用户知情权方面具有重要意义。