打开网易新闻 查看精彩图片

你有没有想过,一张AI生成的图片上,藏着一个只有机器能看懂的隐形签名?

这几年,像谷歌的SynthID、Meta的水印方案、OpenAI和亚马逊都在给自己生成的图片打上这种隐形标记。它的作用是溯源,如果哪天这张图被人拿去做坏事,平台可以通过解码这个隐形签名,证明这张图确实是自己生成的。听起来挺靠谱的一套机制。

但2024到2026年间,一系列研究陆续发现了一件让人不安的事情:这个隐形签名,居然能被偷走。

攻击者不需要破解水印算法,也不需要拿到解码器的密钥,只要拿到几张甚至一张带水印的图片,就能把水印"扒"下来,贴到一张完全不相关的图片上。被贴上假水印的图片,在解码器眼里,看起来就像是原始来源生成的。这意味着有人可以伪造证据,把一张有害图片伪装成出自某个可信平台,从而嫁祸给对方,或者反过来洗白自己生成的违规内容。

这篇来自新加坡国立大学的论文,没有急着造一个更强的攻击工具,而是先停下来问了一个更根本的问题:为什么有些水印系统的"签名"这么容易被偷走,而另一些却很难?

水印为什么会"传染"到别的图片上

先弄清楚这个偷水印的过程到底是怎么回事。

假设你手里有好几张带同一个水印消息的图片。水印本质上是原图和加了水印之后的图之间的微小差异,这个差异被称为残差(residual):也就是"带水印的图"减去"原图"得到的那一点点像素扰动,肉眼几乎看不出来,但解码器能读出里面藏的信息。

攻击者的思路很简单:把这几张带水印图片的残差提取出来,取个平均,得到一个"典型"的水印扰动模式。然后把这个模式叠加到任意一张毫不相关的图片上。如果解码器还能从这张新图里读出原来的水印消息,攻击就成功了。

这个操作听起来有点像伪造签名。你收集了某人签了十次名的样本,把它们叠在一起找出笔迹的共性,然后照着这个共性在一张新的支票上签了一个假名。如果这个人的签名足够"标准化",笔迹套路固定,伪造就容易得手;如果每次签名都因为纸张、心情、握笔方式而变化很大,伪造者就很难提炼出稳定的规律。

论文提出了一个指标来量化这种"容易被伪造"的程度,叫做残差可迁移性(residual transferability,简称RT):衡量水印残差从一批图片转移到另一批完全无关的图片后,解码器还能不能正确读出水印信息。RT的取值在0到1之间,0代表完全不能迁移(相当于瞎猜),1代表几乎能完美迁移(伪造轻而易举)。

研究团队测了五种主流水印方案,发现RT的差异大到离谱。

CIN方案的RT高达1.00,几乎是"随便拿几张图就能百分百伪造"的水平。VINE是0.99,MBRS是0.98,同样非常危险。但HiDDeN只有0.28,RivaGAN更是低至0.08,几乎伪造不动。

这个差距不是一星半点,而是从"几乎不设防"到"很难攻破"的天壤之别。更让人意外的是,这五个方案的训练损失函数、是否用了判别器、是否做了鲁棒性增强训练,看起来都差不多,可结果却是天壤之别。这就把问题从"训练没做好"引向了另一个方向:架构设计本身。

架构里藏着的秘密:水印到底"认不认"图片

研究团队接下来做的事情,有点像医生做对比诊断。他们把高RT和低RT的系统放在一起,从水印怎么被嵌入、又怎么被解码这两个角度,逐一比对。

先看嵌入端。研究者把同一组图片(比如五张不同的照片)都嵌入相同的水印消息,然后把它们的残差取平均,看看这个平均残差长什么样。结果发现,高RT系统的平均残差,无论换哪五张图片来做实验,得到的图案几乎长得一模一样。而低RT系统换一批图片,残差的图案就明显不同了。

这说明了什么?

高RT系统在嵌入水印时,有一部分信号跟图片本身几乎没关系,它更像是一段"固定套路"叠加在任何图片上。而低RT系统的水印信号,跟图片内容强绑定,换一张图,水印痕迹的样子也跟着变。

这就好比两家裁缝店做的定制西装。A店不管你身材胖瘦高矮,衣服内衬的某个暗纹缝法永远长一个样,因为他们用的是一套固定模板贴上去的,效率高但风格千篇一律。B店的每件衣服内衬纹路都要根据顾客的体型现场调整,做出来的每件都不一样。如果有人想复制A店的暗纹"签名"然后贴到别的衣服上冒充A店出品,很容易,因为那个暗纹本来就跟具体这件衣服没什么关系。但想复制B店的暗纹,就难了,因为那个暗纹本身就是为这具体一件衣服量身定做的,脱离了这件衣服就不成立。

再看解码端。研究者在解码器的最后一层特征里,测量了两种变化的贡献比例:一种是固定消息、换不同封面图片带来的特征变化(封面主导的变化),另一种是固定图片、换不同消息带来的特征变化(消息主导的变化)。

结果同样戏剧性。CIN的封面主导变化只占4.6%,消息主导占95.4%,几乎完全不看图片,只认消息。MBRS更夸张,封面变化只占1.0%。而HiDDeN的封面变化占到57.2%,RivaGAN更是高达74.1%,解码器在很大程度上是在"看图说话",而不是单纯读取一段固定编码。

低RT系统能扛住伪造攻击,根本原因是解码器把水印信息和图片内容捆绑得很紧,脱离了原图,水印证据就站不住脚。

哪些架构设计在"锁死"水印和图片的关系

找到现象之后,研究团队进一步做了一件更硬核的事:controlled intervention(控制变量式的架构改造实验)——也就是在同一个水印系统上,只改动某一个架构组件,其他条件保持不变,看看这个组件到底对RT有多大影响。

他们锁定了HiDDeN和RivaGAN这两个低RT系统,分别找到了各自压低RT的秘密武器。

HiDDeN的秘密叫Broadcast–GAP,可以理解为"广播-全局池化"组合拳:在嵌入阶段,水印消息被"广播"到图片的每一个局部区域,跟局部图像特征强行融合在一起;在解码阶段,解码器一直保留着空间维度的特征分布,直到最后一步才做全局平均池化(Global Average Pooling,一种把整张特征图压缩成一个向量的常见操作)去汇总信息。

研究者做了个很干净的对照实验:把HiDDeN的Broadcast–GAP拿掉,RT从0.214直接飙到0.985;反过来,把这套设计移植到MBRS和CIN上,RT分别从0.995骤降到0.098、从1.000骤降到0.091。这个反差大到不需要额外统计检验就能看出显著性。

但研究者没有止步于"广播"和"全局池化"哪个更重要这个问题,他们做了个2×2的交叉实验:只去掉广播、只去掉全局池化、两个都去掉、两个都保留。结果显示单独去掉广播,RT从0.214涨到0.228,几乎没变;单独去掉全局池化,RT涨到0.313,涨得也不算离谱;但两个一起去掉,RT直接飙到0.985。

这说明广播和全局池化不是各自独立起作用的两个开关,而是一套耦合设计,拆开单独看都不管用,必须两个一起才能锁死水印跟图片的关系。

这有点像自行车的双闸设计。你以为前闸和后闸是两个独立的安全装置,单独用哪个都能减速,但极限工况下(比如下坡急刹),只靠一个闸片的效果会大打折扣,两个闸片配合才能真正把车稳稳停住。研究者原本可能以为这是两个独立可加的因素,但实验数据逼着他们承认,这是个一体化的机制。

RivaGAN走的是另一条路,靠的是内容自适应注意力机制(content-adaptive attention):编码器会根据输入图片的内容动态调整水印嵌入的位置和强度,而不是每张图都套用同一个固定模式。研究者把这个自适应机制换成一个固定嵌入模式后,RT从0.077猛涨到0.944。这再次印证了同一个道理:让水印嵌入的方式随图片内容变化,会大幅提高伪造的难度。

论文还给出了一个很有说服力的旁证:训练动态曲线。高RT的配置(比如CIN、MBRS)只需要看过相对较少的训练图片,解码准确率就能冲到很高的水平,这说明模型学到了一条"跟图片无关的捷径",很快就能收敛。而含有Broadcast-GAP或内容自适应注意力这些低RT机制的配置,需要看过多得多的图片才能收敛,因为它被迫去学习跟图片内容强相关的表示,这条路更难走,但走通了之后更难被伪造。

对已经上线的水印系统,怎么办:CoverLock登场

架构层面的发现固然重要,但现实里有个尴尬的问题:如果你的水印系统已经上线了,成千上万张图片都用旧架构生成了水印,难道要把整套系统推倒重来?

研究团队给出的答案是CoverLock,一个不需要重新设计原始水印架构、可以直接"外挂"上去的轻量级插件。

它的核心思路,是在原始的水印消息外面,再包一层"图片专属密码"。具体来说,CoverLock从一个冻结的DINOv2(一种谷歌旗下Meta AI开发的自监督视觉特征提取模型,不需要标注数据就能学到很强的图像表征能力)骨干网络里,提取出这张图片的视觉特征统计量,再通过一个轻量级的可训练投影头,把这些特征映射成一串二进制编码。这串编码只跟这张图片本身有关,换一张图,编码就不一样。

嵌入水印的时候,原本要嵌入的消息m,先跟这个图片专属编码做异或运算(XOR,一种逐位比较、相同为0不同为1的二进制运算),得到一个新的载荷p,再把p交给原始的水印编码器去嵌入。解码的时候,先用原始解码器读出p,再用CoverLock重新从收到的图片里算出对应的专属编码,两者再做一次异或,就还原出真实消息m。

这个设计聪明在哪?

它没有改动原始水印编码器和解码器一个字节的参数,只是在外面加了一层"锁"。而这把锁的钥匙,是从图片本身生成的。这就相当于给你家的门锁加装了一个指纹识别器,原来的钥匙孔还在,但没有对应的指纹,光有钥匙也打不开门。攻击者就算偷到了残差(相当于偷到了钥匙的形状),因为不知道目标图片会生成什么样的专属指纹,伪造出来的东西对不上号,照样打不开。

这里还有一个很关键的问题需要解决:如果直接拿图片特征去生成这个编码,会不会太不稳定?比如同一张图片,经过JPEG压缩或者调了一下亮度,提取出来的编码是不是就完全变了?如果是这样,正常用户的合法水印验证也会失败,这就得不偿失了。

CoverLock为此设计了一整套训练目标。它用对比学习(contrastive learning,一种让模型学会拉近相似样本、推远不同样本表示的训练方式)来训练这个编码生成器:同一张图片的原始版本和经过各种失真(JPEG压缩、模糊、噪声、裁剪、亮度对比度调整)处理后的版本,要被拉到相近的编码;不同图片之间,要被推得足够远。

除此之外,研究者还加了几条正则化约束,包括编码稳定性(同一图片不同失真版本编码要一致)、比特平衡(每一位编码在大量图片上应该0和1各占一半,不能偏向某一边)、比特方差(每一位不能在所有图片上都固定不变)、跨图片独立性(不同图片的编码要互相独立、不能有规律可循)、比特去相关(同一编码内部各位之间不能有强相关性)。这些约束听起来琐碎,但每一条都是在防止编码生成器"偷懒":比如如果不做比特平衡约束,编码生成器完全可能学出一套所有位都偏向1的编码,那这套编码的信息量就很低,容易被猜中或者被统计分析破解。

这套系统在Small、Base、Large、Giant四种不同大小的DINOv2骨干网络上都做了验证,命名为CoverLock-S/B/L/G。

CoverLock到底防住了没有:实打实的数据

理论说得再漂亮,最终还是要看实验数据。

研究团队选了CIN、VINE、MBRS这三个已知的高RT、高危险系统,在COCO、ImageNet、DIV2K三个图片数据集上,分别测试了三种伪造攻击:用单张真实残差直接伪造(GT@1)、用100张水印图片做平均攻击(Yang et al. 2024a提出的方法)、以及用单张参考图配合参考模型做攻击的WMForger方法。

对照组是两种传统防御手段:一种是训练一个ConvNeXt分类器去识别伪造图片,另一种是MHDW,一种较早提出的、把水印验证跟媒体哈希绑定的方法。

结果相当悬殊。

在没有任何防护的情况下,CIN在COCO数据集上被WMForger攻击的成功率高达86.09%,MBRS在COCO上被同一攻击打穿的成功率是96.28%。加上ConvNeXt分类器防护后,情况略有改善但仍然堪忧,比如MBRS在COCO上对WmForger攻击的ASR依然高达96.28%(分类器几乎没起作用),对Yang等人的攻击更是把ASR从原本的低值推高到了46.14%,这说明分类器在面对没见过的攻击模式时会失效,甚至可能因为过拟合到特定的伪造特征反而误伤或漏防。

而用了CoverLock之后,三个系统在三种攻击、三个数据集下的平均ASR,全部被压到0.25%以下。具体来看,GT@1攻击下平均ASR是0.243%,Yang等人的攻击下是0.015%,WmForger攻击下是0.059%。跟分类器防护动辄10%到60%的失守率相比,这个差距不是量级上的改善,是彻底把攻击面堵死了。

为什么分类器防不住,而CoverLock可以?

论文里有一张很说明问题的图,展示了不同攻击方式生成的残差图案。GT@1和GT@100(用不同数量真实样本估计的残差)长得不一样,Yang等人的方法和WmForger生成的残差结构也明显不同。分类器是靠"记住"某种攻击留下的痕迹特征去判断真假的,一旦换了一种攻击方式,残差的视觉模式变了,分类器就抓瞎了。而CoverLock压根不关心残差长什么样,它只关心图片本身能不能生成正确的解锁密码,这跟攻击者用什么手段伪造残差没有任何关系。

这就好比小区保安靠记脸来识别可疑人员,换个人换套衣服就能蒙混过关;而门禁系统靠刷身份证或指纹,不管来的人换了多少套衣服,没有对应的生物特征就是进不去。CoverLock走的是后一条路。

当然,防御能力提升了,鲁棒性会不会因此打折扣?这是个很现实的顾虑,毕竟给系统加了一道锁,正常用户解锁会不会也变得更难?

研究者专门测了这一点。他们把整体的误码率(BER,Bit Error Rate,指解码出错的比特占比)拆解成两部分:原始消息载荷的误码率,和CoverLock图片专属编码的误码率。结果显示,MHDW和CoverLock-G在payload部分的误码率是一样的,都是7.4%,但CoverLock-G把hash部分的误码率从MHDW的14.6%压低到了4.2%。也就是说,CoverLock带来的鲁棒性优势,主要来自于它生成的图片专属编码在各种失真下更稳定,而不是改善了原本消息解码的能力。

在具体的失真类型上,比如高斯噪声、亮度调整、模糊、JPEG压缩、对比度调整、中心裁剪,CoverLock在绝大多数情况下的比特准确率都明显优于MHDW。比如CIN在COCO数据集下面对这六种失真的平均比特准确率,MHDW是84.09%,CoverLock达到94.60%,接近十个百分点的提升。

而在安全性和鲁棒性的整体权衡曲线上,CoverLock的几个变体都稳稳地占据了低攻击成功率、高正常识别率的理想区域。把DINOv2骨干网络从Small换成Giant,ASR能进一步从0.489%降到0.111%,同时保持大约92%的正常验证通过率,这条曲线明显优于传统分类器和MHDW方案画出的曲线。

写在后面

读这篇论文时,有一个细节让我反复琢磨:研究者没有一上来就急着造一个更强的攻击或者更强的防御,而是先花了大量篇幅去做"病理诊断",去搞清楚为什么某些系统天生就更抗打。这种做研究的顺序,先理解机制再谈对策,其实是很多工程领域容易跳过的一步。大部分人遇到安全漏洞的第一反应是打补丁,很少有人愿意先停下来问"这个漏洞的根源到底是什么架构决策造成的"。

另一个值得琢磨的地方是,高RT和低RT系统的训练损失函数、是否用判别器、是否做鲁棒性增强,这些"看起来应该很重要"的训练配置,被论文的对照实验证明基本不影响RT的高低。真正拍板的是架构设计里那些不起眼的细节,比如消息是在哪一层跟图像特征融合的,解码器是提前压缩空间信息还是留到最后。这提醒我们,很多时候系统的安全性不是由"整体设计理念"决定的,而是由某个具体的、看似技术性的实现选择决定的。这种颗粒度的洞察,往往比宏观层面的架构选型更容易被忽视,也更值得被认真对待。

论文里还留了一个没有完全解决的问题:CoverLock目前的评测覆盖的是已知的、比较常见的失真类型,如果攻击者专门针对CoverLock这个图片绑定机制设计自适应攻击,会发生什么?水印和它的防御手段之间,这场猫鼠游戏,显然还没有到终局。

Q&A

Q1:残差可迁移性RT是什么,为什么它能衡量水印被伪造的风险?

A:RT是论文提出的一个指标,衡量水印残差(带水印图与原图的微小差异)从一批图片转移到另一批无关图片后,解码器还能否正确读出水印信息。RT取值0到1,越高说明水印越容易被伪造转移,实测中CIN、VINE、MBRS的RT接近1,而HiDDeN、RivaGAN的RT低至0.28和0.08。

Q2:CoverLock是怎么防止水印被偷走伪造的?

A:CoverLock是一个外挂式插件,它从冻结的DINOv2模型提取图片专属特征,生成一串只跟这张图片相关的二进制编码,跟原始水印消息做异或运算后再嵌入。伪造攻击估计出的残差因为对不上目标图片的专属编码而失效,实验中三种攻击下的平均成功率都被压到0.25%以下。

Q3:Broadcast-GAP和内容自适应注意力这两个架构设计为什么能降低RT?

A:Broadcast-GAP让水印消息在嵌入阶段跟图像局部特征强绑定、解码阶段延迟到最后才压缩空间信息,内容自适应注意力则让嵌入模式随图片内容动态变化。两者都能让水印证据依赖具体图片内容,实验显示去掉这些设计后RT会从0.2左右飙升到0.9以上。