你打开微软画图,输入一句“一只戴红帽子的蓝猫”,看着NPU在本地渲染出图片。界面没有弹出任何联网提示,微软的营销文案告诉你“本地生成,隐私无忧”。
但你的每一次输入、每一张图片,都已经和你的设备永久绑定了。
2026年8月25日,安全研究员Xusheng Li通过逆向工程揭示了一个被精心掩盖的事实:微软在Windows两款最基础的创意应用——Paint和Photos中,部署了一套静默运行、无法关闭的隐形设备标识系统。每次AI生图,一个由微软服务器下发的128位全局唯一标识符都会被编码到图片像素深处,同时写入C2PA溯源元数据。这不是简单的“AI内容标注”,这是全球规模最大的消费者级图片追踪基础设施。
一个1.67MB的DLL里藏着什么
Li的发现始于一个不起眼的直觉。他在分析Paint应用的AI功能时,注意到一个名为Watermarker.dll的动态链接库,体积1.67MB。Paint中有一个可见水印设置——在图片右下角添加一个很小的Copilot标志——但实现这个简单功能“根本不需要一个单独的DLL”。他让AI帮忙分析这个DLL,结果证实了他的猜测。
Li还原了完整的调用链。当用户在Paint的Cocreator功能中输入提示词后,Paint先将提示词发送到微软Azure内容审核端点。服务器返回三样东西:经审核修订后的提示词、一个名为promptGenerationId的标识符,以及另一个名为watermarkId的独立GUID。然后,设备本地NPU调用Stable Diffusion管线渲染图片。渲染完成后,PaintAIManager.dll调用AddWatermark(bitmap, watermarkId),最终由Watermarker.dll的WmkWriteWatermark函数将16字节的watermarkId编码到图片像素中。
编码机制本身堪称精密。函数将GUID、一个前缀和校验和拼接成144位消息,然后通过小幅修改选定图片块来分布这条消息——每个比特至少被嵌入三次。修改幅度被设计为肉眼不可感知。同一GUID还会出现在画图附加的C2PA签名声明中,算法名称被标记为com.microsoft.invismark.1。
更让人警觉的是不可见水印与可见水印的关系。Li的代码树分析证明,两者走的是完全独立的代码路径。可见水印走AddPerceptibleWatermark路径(合成SVG格式的Copilot标志),受用户设置控制;不可见水印走WmkWriteWatermark路径,没有任何用户界面可以干预。你关掉了可见水印,隐形水印照样写入。
如果水印写入失败,Paint的行为更加极端:它会把整个生成视为失败,拒绝返回未标记的图片。要么加水印,要么别用。Photos使用了同一份Watermarker.dll——但当水印写入失败时会记录错误后仍然返回图片——但用户同样无法知晓水印是否成功嵌入。
这不是水印,是追踪
披着合规外衣的追踪基础设施
微软完全可以解释这套系统的合法性。2024年欧盟AI法案第50条自2026年8月2日起正式生效,要求AI提供商确保生成内容以机器可读格式标记为人工合成或篡改。C2PA(内容溯源与真实性联盟)是由Adobe、微软、Arm、Intel等巨头共同发起的开放标准,目前已有超过6000名成员和附属机构。在这个框架下,给AI生成图片打上来源标记似乎合情合理。
微软也确实在官方文档中公开披露了Paint会为AI生成图片附加C2PA元数据,并说明提示词可能发送至Azure进行内容审核。但关键的区别在于:文档没有披露像素级编码的存在,没有说明审核服务器返回的watermarkId会被嵌入到“本地”生成的输出中,更没有解释watermarkId与用户提示词在服务器端的关联方式。
C2PA标准要求的是“谁、用什么工具、是否用了AI”的声明——这是关于内容本身的元数据。而微软的实现远超这个范围:将每次生成的唯一标识符,通过物理级的像素修改嵌入图片,与C2PA签名中的watermarkId形成软绑定。即使元数据被剥离,像素中的水印理论上仍可被检测并与服务器端记录关联。
你的提示词被发送到微软进行审核,返回的GUID被编码到像素中。——安全研究员 Xusheng Li
更值得关注的是请求之间的关联性。Li发现,Paint会将前一次请求的promptGenerationId作为lastPromptGenerationId附带在后续审核请求中发送,使连续请求之间可以被显式关联。这意味着微软不仅知道“这张图片是谁生成的”,还知道“这个用户生成了一系列什么样的图片”。
“本地生成”的语义陷阱
微软在Copilot+ PC的营销中反复强调一个卖点:AI生图在本地NPU完成,无需上传云端。这种表述在技术上是真实的——Stable Diffusion管线的推理确实在设备本地运行。但Li的分析揭示了一个被有意模糊的事实:渲染是本地的,但提示词审核永远在线。
每次输入提示词,都经过Azure内容审核服务器。每次审核,都带回一个watermarkId。每次生图,这个ID都被嵌入像素。即使渲染完全在本地的NPU上运行,用户与微软服务器之间仍然有一条隐形的数据流:提示词发出,GUID返回。
这对Copilot+ PC的购买者来说尤其讽刺。他们为NPU支付了溢价,获得了“本地AI”的能力,却发现自己比普通用户被绑定得更紧。因为在非Copilot+ PC上,Paint使用云端生成——图片本来就是微软服务器生成的,多加一个水印反倒顺理成章。而Copilot+ PC用户被承诺的是“本地自主”,实际获得的却是“本地算力加服务器绑定”的二合一套餐。
所谓的本地生成,在标识符追踪层面,和云端生成没有本质区别。区别只在于,云端生成的用户知道自己在上传;本地生成的用户以为自己很安全。
从黄点到GUID:数字指纹的进化史
隐私安全领域的观察者很难不联想到一个经典前例。自2004年电子前沿基金会(EFF)揭露以来,人们发现大多数主流彩色激光打印机——惠普、施乐、佳能、兄弟——都会在每一页打印件上嵌入肉眼不可见的黄色点阵,编码打印机的序列号和打印时间。这些点阵由设备固件直接生成,用户无法关闭,多年来被用于追踪泄密文件的来源。
微软的GDID(全局设备标识符)和Paint的watermarkId构成了Windows生态的“黄点2.0”。GDID是微软为每套Windows安装分配的系统级持久标识符,它绑定Windows实例、跨版本更新保持不变,据一份2026年的联邦刑事诉讼文件披露,GDID被用于关联用户在微软服务中的活动。Watermarker.dll嵌入的watermarkId虽然每次生成不同(单次生成请求的GUID),但它在服务器端与发送提示词的用户和设备信息存在关联——这正是Li指出的关键风险点。
两者的组合效果是:GDID告诉你“这台设备是谁”,watermarkId告诉你“这台设备生成了什么图片”。前者是身份,后者是行为记录。
如果微软将每个提示词与发送者关联,理论上可以通过图片中的水印追溯到用户。——The Register
普通消费者的困境
对于使用Windows自带的画图软件随手生成一张AI图片的普通用户,现实是残酷的:没有任何UI开关可以关闭这个行为。没有设置隐私禁用隐形水印这样的选项。唯一的方式——正如Neowin的报道所言——是“自己去跑开源模型”。
Li在分析中也给出了一个看似技术性的建议:探索能否用已签名的空操作桩替换Watermarker.dll,或者通过中间人攻击拦截API调用。这对于技术极客而言是一个可行的自救方向,但深层的含义令人不安——当全球最大的软件公司在系统层面部署了无法关闭的追踪机制时,用户的自我保护方案是“篡改系统文件”。
对于绝大多数消费者——那些不会逆向工程、不懂DLL注入、不理解什么是Stable Diffusion的用户——没有选择。他们只能继续使用Windows自带的工具,在不知情的情况下生成每张都携带追踪标识的图片,然后分享到社交媒体、上传到自己的博客、发到微信群。
结论与展望
黄点追踪技术从20世纪80年代末沿用至今,从未被真正废止。它被揭示、被讨论、被批判,但打印机厂商从未停止部署。GDID在今年7月被联邦诉讼文件意外曝光后,微软仍未正面回应其隐私政策。Watermarker.dll的水印机制则是在2026年8月被独立研究者从代码层面挖出的——微软至今没有官方声明。
这三个案例共享同一个模式:以安全或合规的名义部署,在用户不知情的情况下运作,被发现后保持沉默。
但这一次的规模完全不同。Windows在全球有约16亿台活跃设备。Paint和Photos是Windows用户基数最庞大的创意工具之一。当亿万用户日常使用这些工具生成AI图片,每张图片中都携带了一个可追溯到具体设备和具体生成请求的标识——这不是内容认证,这是历史上规模最大的消费者级数字追踪系统之一。
从欧盟AI法案的合规角度看,微软的做法确实在技术层面满足了“机器可读标记”的要求。但从用户隐私和数据保护的角度评判,这套系统的核心问题在于:它超出了用户合理的知情预期。用户不知道提示词会去服务器,不知道服务器会返回一个GUID,不知道这个GUID会被嵌入图片像素,不知道这张图片一旦分享出去就永远携带这个标识。四个“不知道”,构成了一个完整的知情权黑洞。
截至本文发稿,微软尚未对Xusheng Li的发现作出正式回应。但问题不会因为沉默而消失:当全球最大的软件公司选择用“内容安全”的外衣包装用户追踪基础设施——这究竟是合规的边界探索,还是信任的透支?
答案取决于接下来的24小时里,微软的官方回复,以及更重要的,回复的内容。






快报