当前位置:
AIGC文章详情

以为Paint的AI生图不用联网?一份逆向研究掀开了底牌:提示词云上审核,图片像素里埋了一个唯一ID

源自25位全网作者

01:05

如果你最近在用Windows自带的Paint玩AI生图,尤其是手里有台Copilot+ PC,看着图在本地NPU上几秒跑出来,你大概率默认过一件事:这玩意儿全程在我自己电脑上,数据不出门。

8月25日公开的一份逆向研究,把这个默认直接击碎。研究者逐行拆解Paint的程序文件后确认:你输入的提示词会先发到微软云端审核,服务器给每张图下发一个全球唯一的GUID编号,这个编号被写进图片像素里,肉眼看不见,截图、裁剪、转格式都很难洗掉。知乎小红书上有博主把它浓缩成一句更扎心的话:“本地生成”不等于“完全离线”。小红书

先说结论,三条加一个附赠

  • 本地生成是真的。Paint安装目录里躺着四个加密的ONNX模型文件,最大的一个302.4MB。在Copilot+ PC上,Stable Diffusion确实在本地跑,生成的图片本身不上传。

  • 离线是假的。生图之前,提示词和风格设置会先发给微软云端的审核接口,审核通过才放行本地生成,服务器同时下发一个唯一的watermarkId。

  • 编号是写进像素的。这个16字节的GUID被编码成144位信息打散到整张图里。研究者拿一张512x512的纯色图做测试,262144个像素里有193376个被轻微改动,占比超过73%,肉眼毫无察觉,但机器一读就在。知乎

  • 附赠:文件层还有一层C2PA元数据,和像素水印用同一个GUID关联。转格式、删元数据能甩掉文件层那份,甩不掉像素里那份。

以为Paint的AI生图不用联网?一份逆向研究掀开了底牌:提示词云上审核,图片像素里埋了一个唯一ID

1.67MB的水印DLL,贴个Logo用得着这么大吗

整个发现的起点很朴素:反常。Paint设置里有个可见水印开关,打开后生成的图右下角会多一个小Copilot图标。贴一张SVG小图标,几十KB的代码绰绰有余,但研究者在文件堆里找到的Watermarker.dll足足有1.67MB。

拆开一看,里面确实有两个函数。一个负责可见水印,逻辑直白;另一个叫WmkWriteWatermark,接收像素缓冲区和一段payload往下写。这段payload短了返回错误码-6,长了返回-5,而且函数根本不看你传的长度,硬编码拷贝前16个字节。16字节,在Windows的世界里几乎等于GUID的代名词。往上追调用链,包装函数的参数类型就是winrt::guid,实锤。

更狠的是态度:如果这步水印写入失败,Paint会把整个生图任务标记为失败,你拿不到图。知乎微软不允许存在一张没有隐形水印的本地生成图。

你的提示词,先上云走一趟

水印里写的是GUID,那GUID从哪来?答案是微软的远程服务器。本地模型开始跑之前,Paint会先把提示词和风格信息打包,发到一个Azure Front Door地址,路径是/v1/paint-cocreator/moderate-prompt。知乎

以为Paint的AI生图不用联网?一份逆向研究掀开了底牌:提示词云上审核,图片像素里埋了一个唯一ID

服务器返回四个关键字段:审核后可能被改写的revisedPrompt、promptGenerationId、watermarkId,还有一个containsHumanReference,标记你的提示词是否涉及人物。研究者实测,换一条提示词,服务器就发一对新的ID;而且每次请求会带上前一次的promptGenerationId,等于你连续生图的整个会话,在服务器端是可以被明确串起来的。

像素层加文件层,同一个编号穿两根线

回到本地。图生成完,Watermarker.dll把watermarkId扩成18字节的消息:开头固定0x4c,中间16字节GUID,最后一字节是校验和,共144位。编码器把图片尺寸向下取整到8的倍数,给每一位信息维护计数器,要求每一位至少成功放置3次,在选中的图像块上做小幅量化修改。从算法特征看,这是内容自适应的块域SVD风格水印,和Google的SynthID同属一类技术路线。

以为Paint的AI生图不用联网?一份逆向研究掀开了底牌:提示词云上审核,图片像素里埋了一个唯一ID

与此同时,Paint还会把图片和元数据送去在线签名,给文件附加C2PA Content Credentials。研究者从Paint里直接保存了一张生成的PNG,IHDR块之后紧跟一个18979字节的caBX块,里面就是签过名的C2PA清单。知乎清单里的c2pa.soft-binding字段,算法标识com.microsoft.invismark.1,value和像素里的watermarkId一模一样。

C2PA把这种机制叫软绑定:哪怕文件元数据被整个删掉,靠检测像素水印也能对回同一条来源记录。顺带一个细节解释了为什么AI图导出列表里没有BMP:PNG、JPEG、GIF乃至.paint都能塞进C2PA清单,而BMP这种经典格式按规范无法嵌入任意清单数据。知乎允许导出BMP,等于给文件层追踪开了个后门,所以直接缺席。

微软Photos应用里也有一个同名DLL,机制相同,区别只在失败处理:Photos会记一条日志然后继续把图给你,Paint则是强制的。知乎

微软说了什么,没说什么

先划清边界:这是独立逆向研究,不是微软官方公告,研究本身也没有证明这个GUID能直接对应到具体个人。知乎它的定位更接近出生证明:证明这张图是AI生成的、是哪条生成链路出来的,而不是监控谁在生图。

微软并非什么都没披露。官方支持页面写明了会应用内容过滤、生成图片会包含C2PA清单、会收集提示词用于防滥用。但页面没有解释的是像素里那层:C2PA清单里有一个对应像素隐形水印的GUID,而这个GUID来自远程提示词审核。知乎披露了存在,没披露机制,这正是这次研究最有价值的地方。

放在大背景里看,这事不孤立。欧盟AI法案第50条的透明度规则今年8月2日刚生效,要求AI生成内容携带可检测的机器可读标记。知乎Anthropic给Claude输出加水印、Google有SynthID、各家推C2PA,给AI内容打标已经是全行业的既定方向。国内也一样,网信部门近期已经对未有效落实生成合成内容标识要求的剪映、猫箱、即梦AI依法查处。微博争议从来不在要不要标识,而在标识到什么颗粒度、用户知情到什么程度。

以为Paint的AI生图不用联网?一份逆向研究掀开了底牌:提示词云上审核,图片像素里埋了一个唯一ID

对你来说意味着什么

  • 只是玩玩生图的普通用户:不用恐慌,这套机制是溯源用的出生证明,不是监控探头。但要知道,你敲进提示词框的内容确实上了云,别把真实姓名、公司内部项目、客户资料这类信息当描述词写进去。

  • 在意隐私的用户:重点不是图片,是提示词。审核环节会记录提示词内容用于防滥用,且连续会话能被串联,这是比水印本身更需要留意的点。

  • 拿AI图商用或公开发布的用户:C2PA正在成为平台核验AI内容的通行标准,保留元数据只会越来越重要。像素水印按这项研究的设计,截图压缩都很难洗掉,就别花精力去水印了,把心思花在合规标注上。

  • 别误解设置里的水印开关:那个开关只控制右下角的Copilot小图标,和隐形水印完全无关,关掉它什么都不会改变。

值得继续盯的信号有三个:微软会不会对像素级GUID水印做出官方说明;Photos会不会从宽松改为和Paint一样的强制;以及欧盟监管会不会对这种超出法案最低要求的做法给出评价。

一句话收尾:本地生成是真的,离线是误会。微软把该说的说了一半,这次逆向研究把另一半翻了出来。你手里的Copilot+ PC依然是台好用的本地AI生图机器,只是从此以后,每张从Paint里出来的图,都带着一个云发的身份证号。

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章