Meta的不稳定签名

Hacker News Top 模型

摘要

一项详细的技术评审发现,Meta的Stable Signature、Google的SynthID和Adobe的TrustMark的检测准确率远低于声称的水平,存在高误报率和不可靠的水印。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/05 10:32

# Meta的不稳定签名 - Hacker Factor博客 来源:https://hackerfactor.com/blog/index.php?/archives/1098-Metas-Un-Stable-Signature.html 我正在结束对隐形水印算法的调查,结果令我极度失望。不仅现代基于AI的算法没有一个能像它们声称的那样工作,而且事实证明它们都犯了同一个根本性错误。 我之前评估了Google的SynthID(https://hackerfactor.com/blog/index.php?/archives/1092-Reversing-SynthID.html)和Adobe的TrustMark(https://hackerfactor.com/blog/index.php?/archives/1097-TrustMarks-False-Positive-Problem.html)算法。两者都*声称*拥有极其准确的结果。 - 根据Google经过同行评审并发表的论文(https://arxiv.org/abs/2510.09263),他们声称真阳性率(TPR)高于99.97%——这意味着他们漏掉自己水印的概率低于万分之一。然而,我自己的实证测试(https://hackerfactor.com/blog/index.php?/archives/1092-Reversing-SynthID.html)发现实际更接近二十分之一。此外,SynthID是专有的,只能通过Google的“Gemini”AI系统访问。Gemini已被观察到产生幻觉结果(https://hackerfactor.com/blog/index.php?/archives/1092-Reversing-SynthID.html),并且根据问题的措辞方式提供相互矛盾的结论。 - 根据Adobe的内容真实性倡议(https://opensource.contentauthenticity.org/docs/trustmark/faq/),他们的TrustMark“在严重噪声退化下,可以在约42-45dB PSNR质量下实现超过96%的比特准确率”。然而,该统计数据(https://hackerfactor.com/blog/%3Ca%20target=)侧重于鲁棒性而非准确性。在我的实证测试(https://hackerfactor.com/blog/index.php?/archives/1097-TrustMarks-False-Positive-Problem.html)中,我发现TrustMark的假阳性率高达10%-20%,这实际上使其毫无用处。(如果你看到一个TrustMark签名,那么它很可能是随机噪声,而不是真正的签名。) 这次,我评估了Meta的“Stable Signature”(稳定签名)算法。(他们的论文和代码在GitHub上:https://github.com/facebookresearch/stable_signature)。该系统将一个48位序列编码到图片的视觉内容中。其理念是,你可以将一个唯一的48位序列编码为你的水印。如果你的解码器找到了相同的48位序列,那么它就能识别出你自己的水印。 **警告:** 这篇博客文章大量使用数学和统计学来证明Stable Signature、TrustMark和SynthID远没有其开发者声称的那么可靠。 ### 基本算法 传统的(非AI)隐形水印通常隐藏在微小的位置,例如最低有效位、亮度的变化(如Digimarc)或频谱(DCT或FFT)中。始终存在图像编码可能破坏隐藏数据的风险,因此这些算法通常依赖图像上的重复来帮助识别真实信号。此外,它们可能包含纠错码(数据中的额外比特)来修复任何细微的数据错误。 然而,传统方法存在一个问题:在图像中注入隐藏数据可能造成可见的失真。现代方法使用AI系统来更好地隐藏数据,同时增加更少的失真。 与SynthID和TrustMark一样,Stable Signature对二进制数据进行编码,并使用AI模型来决定将其隐藏在图像中的何处。AI被调整以在嵌入数据时最小化可见失真。之后,一个基于AI的解码器查看图像,识别可能存储比特的位置,然后提取数据。 数据总是可能混合噪声。不同的基于AI的水印系统依赖不同的技术来减少噪声。例如: - Google的SynthID只存储很少的比特数据(实际上是一个标志或版本号)。这使得他们可以使用大量数据作为重复,从而提高准确率。 - Adobe的TrustMark使用Bose-Chaudhuri-Hocquenghem(https://en.wikipedia.org/wiki/BCH_code)(BCH)算法。这相当于校验和与纠错码的组合,应该能减少错误数量。 Meta的Stable Signature使用简单的汉明距离(https://en.wikipedia.org/wiki/Hamming_distance)。 汉明距离衡量为了纠错需要交换的比特数量。实际上,它定义了一组稳定状态(例如,10110和11000),并在每个状态周围放置一个代表单比特变化的环。如果你改变了足够多的比特,那么你将达到一个不同的稳定状态。 根据Meta的Stable Signature研究论文(https://arxiv.org/abs/2303.15435),这48位应该是均匀分布的,并且声称“假阳性率低于10⁻⁶”,即百万分之一。这意味着你可以选择一个48位序列作为你的签名。每张图片*都会*生成一个48位序列,并且该序列可能会根据图片中的噪声略有变化。然而,如果你发现一个代码与你代码的汉明距离很近(例如,差异少于6位),那么你可以以高可靠性确定它是相同的代码。 至少,理论上是这样。 ### 实证测试 我进行这个实验时假设一切如他们所声称的那样工作。我希望能够可靠地识别与Meta相关的隐形水印。我不知道他们使用什么序列,也不知道他们是否根据图像来自Meta的AI系统、Facebook、Instagram、WhatsApp等使用多个代码。 幸运的是,这是可以测试的!我从FotoForensics抓取了一组未经筛选的图片样本:上个月(2026年5月)上传的前10,000张独特图像。如果比特序列是均匀分布的,碰撞率为“百万分之一”,那么我应该会看到大量唯一的比特序列,以及围绕Meta图片(Meta AI、Facebook、Instagram等)的一些小簇。这些簇将代表Meta使用的隐形水印。 我的实证测试结果绝对出乎我的意料。我发现: - 没有与任何Meta图像相关的簇。这表明Meta没有使用他们自己的在GitHub上找到的Stable Signature水印软件。 - 在随机分布的情况下,不应该有簇。然而,我有25张不同的图片具有*完全相同的*比特序列:110110100111111011101001111000100111011000011101。在百万分之一的碰撞率下,这*不应该发生*!这些图片来自完全不同的来源。以下是其中的四张图片(从行星到灯泡,再到带有透明(黑色)背景的文字): [](https://fotoforensics.com/analysis.php?id=1d1bc10b39edeb7b77344bd217bba66d758fe231.10936) [](https://fotoforensics.com/analysis.php?id=4768c04999e85fef94b90094163b32237afc2fd3.122410) [](https://fotoforensics.com/analysis.php?id=e81fba7e0299fb683e0caa1e20920555306bb9a7.12255) [](https://fotoforensics.com/analysis.php?id=8fa2cabca7334e14b79c31628ca3ed2695d5574a.592422) 所有这些图片都有深色/黑色背景,中间有明亮的东西。这表明Stable Signature更像是一个感知哈希(https://hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html),而不是隐形水印。 - Stable Signature使用汉明距离来识别簇。如果我将这25张图片视为簇的中心(质心),并使用6位汉明距离,那么有356张图片是相似的。而如果我假设这25张图片不是中心而是簇的一部分,那么汉明距离为6的情况下,有一个以3位偏移为中心的簇,包含450张图片,中心序列为110110**0**001111110111010**1**11110001001110**0**1000011101。这个簇占未经筛选图像数据集的4.5%!以下是一些来自这个较大簇的样本: [](https://fotoforensics.com/analysis.php?id=38b873d1b33a2330240cfb8e9d717097fb8e4138.1517303) [](https://fotoforensics.com/analysis.php?id=1acefed79c14628eb77022bc9da8ec51c900f4be.543287) [](https://fotoforensics.com/analysis.php?id=5883aa33d8576cef29b369ef6b234b3a5eb633df.527489) (我明确不分享包含个人信息的图片,如发票、可识别的人物和GPS信息。) 不仅仅是这一个随机簇异常庞大(10,000张中有450张)。还有一个包含184张图片的簇,序列为110101001011001011001011111000100111001000011101;另一个包含58张图片的簇,序列为110100000011111010001001111000100111011000011101,等等。在汉明距离为6的情况下,我发现了超过60个包含至少10张图片的簇。在“百万分之一”的碰撞率下,这不应该发生。 ### 独立分析 我回到Meta的研究论文,试图找出差异所在。然后我在第3.1节中找到了:他们对系统进行了测试,假设48位是相互独立且均匀分布的。问题在于,他们使用一个神经网络来生成这些比特。这明确意味着比特是依赖的,而非独立的。 他们的论文假设了一个二项分布。也就是说,给定一张任意图片,48位代表一次随机抛硬币。其数学表达式为: P(X ≤ T) = Σ_{k=0}^{T} (48 choose k) (0.5)^k (0.5)^{48-k} 这计算了48个随机比特落在汉明距离(*T*)内的概率。概率表如下: | 汉明距离阈值 (*T*) | 比特错误率 (BER) | 随机图片偶然匹配的概率 | | :--- | :--- | :--- | | 14位或更少 | ≤ 29.17% | 1/362.63 | | 13位或更少 | ≤ 27.08% | 1/957.81 | | 12位或更少 | ≤ 25.00% | 1/2,788.35 | | 11位或更少 | ≤ 22.92% | 1/8,999.08 | | 10位或更少 | ≤ 20.83% | 1/32,416.80 | | 9位或更少 | ≤ 18.75% | 1/131,390.28 | | 8位或更少 | ≤ 16.67% | 1/605,094.89 | | 7位或更少 | ≤ 14.58% | 1/320万 | | 6位或更少 | ≤ 12.50% | 1/1983万 | | 5位或更少 | ≤ 10.42% | 1/1.4619亿 | | 4位或更少 | ≤ 8.33% | 1/13.2亿 | | 3位或更少 | ≤ 6.25% | 1/152.4亿 | | 2位或更少 | ≤ 4.17% | 1/2391.5亿 | | 1位或更少 | ≤ 2.08% | 1/5.74万亿 | | 0位(完美匹配) | = 0.00% | 1/281.47万亿 | Meta的论文说他们使用7位的汉明距离(要求48位中匹配41位),这符合他们声称的“假阳性率低于10⁻⁶”。然而,我在汉明距离为6(应该是两千万分之一)甚至碰撞为0(两百八十一万亿分之一)时都看到了问题! ### 核心问题 理论概率与实证测试之间显然存在差异。当我回顾Meta的研究论文(https://arxiv.org/abs/2303.15435)时,我看到了问题: 根据Meta的论文,48位中的每一位都是独立的。在一个完全独立的48位超立方体中,无水印图像应该均匀分布在所有2⁴⁸个可能值上。然而,神经网络通过这个超立方体映射了一个非线性流形(https://en.wikipedia.org/wiki/Nonlinear_dimensionality_reduction)(一个多维波浪曲面)。这个数学地形被扭曲了,有自己的山峰、沟壑和山谷。它有形成簇的吸引子,以及形成稳定值永远无法存在的空洞的排斥子;这是神经网络的一个特征。最重要的是,输出比特显然不是独立的。 左图说明了如果所有比特都是独立时预期的均匀分布。右图是当比特依赖时形成的理论上的簇的类型。在排斥区域周围应该有吸引子的簇和空洞(没有点的区域)。 从理论转向实证,我绘制了数据图。48位可以表示为字节。我取了前24位,将其转换为8位红、绿、蓝像素颜色。如果数据真正随机,那么彩色点应该分布在RGB立方体中。然而,如果比特是依赖的,那么应该会有非常清晰的簇、结构和空洞。以下是图表: 是的,存在非常清晰的结构,看起来像平面和线条。平面内有簇,而平面外有非常大的空洞——完全没有点的区域。Meta的Stable Signature实现生成的数据未能通过这个基本独立性检验。 我发现的最大簇代表一个零信号偏差(ZSB)。当他们的神经网络没有找到水印时,它会将48位移向一个强吸引子,就像一个巨大的引力井。在6位错误时,它应该有两千万分之一的碰撞。但实际上,由于ZSB,我的10,000张图片中有一个包含450张图片的簇,误差在6位以内。仅ZSB一项就产生了大约二十二分之一的错误率。如果我们加上所有其他包含至少10张图片的簇,那么有2327张图片位于不同的簇中;我们看到的错误率大约是四分之一——这还是在使用比他们论文中使用的7位汉明距离更保守的6位距离的情况下。(用AI术语来说,这是深度神经网络典型的*表示崩溃*或*结构偏差*。) (顺便一提:鉴于他们“百万分之一”的声称,我可以寻找任何包含2张或更多图片的簇。在包含2张或更多图片的簇中,10,000张测试图片中有5,237张位于簇内,即52%。如果你向他们的算法展示10,000张图片,那么有超过50%的几率发生假阳性匹配。) ### 不如随机 我声称存在可见的簇并展示簇的图片是一回事,但用数学证明是另一回事。(是时候掸去我的《统计学导论》大学教科书了……) 我将Meta的代码应用于2026年5月的前10,000张图片。其中一些图片是未支持的格式(HEIC、WebP和一些损坏的JPEG文件),最终得到9,847张有效的图片。我使用NIST统计测试套件(https://csrc.nist.gov/pubs/sp/800/22/r1/upd1/final)(SP 800-22)中的元素来评估这些数据的随机性,包括单比特测试和用于独立性的卡方(χ²)检验。 单比特测试确定相邻比特的基准频率是否看起来独立。 - 处理的总比特数:9,847张图片 × 48位/签名 = 472,656位 - 观察到的1的计数:266,419 - 观察到的0的计数:206,237 - 每个的期望计数(*E*):236,328 对这个比特平衡进行简单的标准卡方拟合优度检验: χ² = (266419 - 236328)² / 236328 + (206237 - 236328)² / 236328 = 3816.14 + 3816.14 = 7632.28 - 用数学术语说:自由度为1时,χ²统计量7,632.28产生的*p*值无限接近于0.0(*p* ⋘ 10⁻¹⁰⁰)。(顺便一提,大多数卡方分布表(https://www.itl.nist.gov/div898/handbook/eda/section3/eda3674.htm)通常评估自由度为1时直到χ²=10左右。这个χ²值如此天文数字般高,以至于概率*p*实际上变为零。) - 用大白话说:这绝对不随机也不独立。 水印提取对各种全局任意图像强烈偏向于产生1而非0(大约56%的1对44%的0)。这立即违反了均匀分布假设。 第二个测试是用于序列独立性的卡方(χ²)检验。如果比特是独立的,相邻比特之间的转换概率应该只是它们各自概率的乘积。下表显示了在所有观察到的10,000张(实际上是9,847张)图片中转换对的出现率: | 转换对 | 观察计数 (*O*) | 独立性下的期望计数 (*E*) | | :--- | :--- | :--- | | 0到0 | 106,750 | 90,051 | | 0到1 | 95,296 | 116,186 | | 1到0 | 95,302 | 116,186 | | 1到1 | 165,461 | 149,976 | χ² = Σ (O - E)² / E χ² = 16699²/90051 + (-20890)²/116186 + (-20884)²/116186 + 15485²/149976 = 3096.7 + 3756.2 + 3754.0 + 1599.0 = 12,205.9 - 用数学术语说:自由度为3时,χ²统计量12,205.9

相似文章

逆向 SynthID

Lobsters Hottest

安全研究员详解如何逆转 Google 的 SynthID 隐形水印,使 AI 生成图像的媒体溯源声明失效,暴露出专有水印方案的根本缺陷。

AI水印证据未能通过取证准备:一项实证评估

arXiv cs.CL

本文实证评估了三种LLM水印方法(KGW、Unigram、SynthID-Text)在取证可采性标准下的表现,发现没有一种方法达到法院要求的证据标准:在保留语义的改写后,水印几乎100%被移除,甚至在攻击前假阴性率就很高。

Text AI watermarks will always be trivial to remove

Hacker News Top

The article argues that text AI watermarks are inherently trivial to remove, exploring the EU AI Act's watermarking requirements and the technical challenges of text steganography, including Google's SynthID approach.