在无序中嵌入信息

Lobsters Hottest 新闻

摘要

本文探讨了通过重新排序现有无序元素(如Exif标签和CSS规则)来隐藏数据的方法,利用Lehmer码在不添加新数据的情况下编码信息。

<p><a href="https://lobste.rs/s/ssvgqs/embedding_information_disorder">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/05 20:34

# 在无序中嵌入信息 来源:https://thoughts.hmmz.org/2026-07-05.html --- 将信息伪装在众目睽睽之下,是我常被吸引的玩具问题,通常通过发明荒谬的方法来存储密钥。我尝试过许多方法,比如重新利用 ext4 时间戳的纳秒部分、通过修改的蓝牙鼠标固件广播、修改家电,以及最近修改 Exif 元数据。 与其添加或修改元数据或图像噪声,不如对元数据进行重新排序。Exif 标签按低位优先编码,但读取器并不强制这一顺序。一张索尼 A7R 照片包含 63 个标签,提供 `log2(63!)` 种排列顺序,即 289 位,比 AES-256 密钥还大,仅仅通过重新排列现有内容即可实现。 实际上 Exif 重排序并不理想,因为读取器会对乱序标签打印警告,而且标签受分组约束,但在实现过程中我接触到了 **Lehmer 码**(https://en.wikipedia.org/wiki/Lehmer_code),它提供了一种编码排列的方法,并揭示了它在无处不在的看似无序集合中隐藏“免费存储”的适用性。 ### Lehmer 码 Lehmer 码直观易懂且**易于实现**(https://thoughts.hmmz.org/lehmer/lehmer.js.txt)。对于唯一序列中的每个位置,统计后面比当前元素小的元素个数。*(A, B, C, D)* 的 Lehmer 数字为 *(0, 0, 0, 0)*,而 *(D, C, A, B)* 的 Lehmer 数字为 *(3, 2, 0, 0)*,每个位置的最大数字递减一位,同时其所需的存储量也递减。 以下是一个包含 13 个元素的序列,足以提供编码一个 32 位数的数字: 任何可以恢复唯一序列的地方,Lehmer 码都能提取出比特流。这样的序列出现在本页中,该页面包含**唯一的句子**,足以提供一整个轨道的 Lehmer 数字: ### 无处不在 一旦发现一个这样的序列,就很难不注意其他的。在计算领域,大多数逻辑上无序的集合在序列化时都会假定某种顺序。以下是一个 CSS 样式表: `` td, th { text-decoration: underline; color: green; } p { font-weight: bold; } a { color: red; } `` 选择器列表、属性和规则的顺序在非重叠规则求值时基本被忽略,但文件顺序依然存在,并可通过 DOM 查询。**维基百科的样式表**(https://en.wikipedia.org/w/load.php?lang=en&modules=ext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cmediawiki.skinning.content.parsoid%7Cmediawiki.skins.legacy%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022)包含 1003 条规则,1950 个选择器和 2731 个属性。仅通过重新排列规则就能嵌入超过 1KB 的数据,而通过同时重排选择器和属性还能嵌入更多。 1KB 足以将恶意软件隐藏在一个微小且无害的解码器后面。谁说 Internet 蠕虫不能用 CSS 编写?以下是一个良性的演示,嵌入在本页的 `example` CSS 块中: ### 水印 Lehmer 编码似乎天然适合文件水印。原本相同的 tar 包和 ZIP 文件可以通过重新排列目录顺序来嵌入水印,这种顺序在解压时很容易被忽略,而且水印甚至可能持久地转移到目标文件系统,例如通过指定 ext4 的出生时间戳顺序。 可转移性也体现在其他方面。考虑浏览器在打印 HTML 或 SVG 时的行为,其中绝对定位元素被重新排序。至少在 Linux 上的 Firefox 处理 SVG 时,**PDF 输出遵循输入顺序**(https://thoughts.hmmz.org/lehmer/second-order.diff.txt)(第一个(https://thoughts.hmmz.org/lehmer/first-order.svg),第二个(https://thoughts.hmmz.org/lehmer/second-order.svg))。 对于程序二进制文件,`-ffunction-sections` 配合 GNU 链接器脚本可以重排二进制文件中的函数,或者转换用于渲染错误消息的静态字符串表。 ### 无中生有 想象一下,你正在使用一个后端 API,它生成的 JSON 属性或 Protocol Buffer 字段看起来是随机顺序。第一反应可能归因于实现中的哈希表,但如果顺序实际上是在泄漏数据呢?对于 Protocol Buffer,很少有工程师会检查其物理表示。 ### 隐形密钥交换 一个只拥有 Javascript 解释器的间谍必须每天推导出一个新的**可变 DHT 密钥**(https://www.bittorrent.org/beps/bep_0044.html),用于发布情报。其上线指示他们使用 Lehmer 码对 BBC 新闻网站中午时分的文章标题列表进行编码,目前有 76 个标题(= 369 位)。世界很庆幸我不写间谍电影。 ### 物理安全 一个有趣的应用可能是将 Lehmer 码延伸到现实世界。以亚马逊上广告的这个无害马克杯架为例: 忽略这些特定杯子的非唯一性,视觉模型可以识别边界框,然后根据每个框的平均亮度或色相得出顺序。这样的杯架将提供 44 位,单独来看不足以构成一个好的密码。 这将是一个有趣的移动应用开发项目。下次你去别人家里时,请留意那些塞满独特杯子的大号杯架。 --- *David Wilson · [email protected] · 公元 2026 年 7 月 5 日周日 20:31:09*

相似文章

概念隐写术

arXiv cs.CL

介绍概念隐写术,这是一种通过高级模式而非词汇选择将隐蔽信息嵌入LLM的思维链推理中的方法,并表明它可以绕过标准的释义防御。提出了一种策略感知的释义作为防御手段。

@vintcessun: 原来LLM文本embedding被高频token(句号、冠词)绑架了!Unembedding矩阵隐式定义了一个低秩子空间,主导这些无信息量的表达。这是LLM作为通用embedding效果不佳的根本原因,且污染很隐蔽。EmbedFilter…

X AI KOLs Timeline

该研究揭示了LLM文本嵌入被高频token(如句号、冠词)绑架的问题,提出EmbedFilter方法通过对unembedding矩阵进行SVD分解并减去投影分量来释放真实语义,实现零训练开销的降维和检索效率提升。

论共享嵌入序列模型中指令与数据的不可分离性

arXiv cs.AI

本文形式化了在共享嵌入序列模型中完美防范提示注入的不可能性,证明没有管内机制能够保证语义忠实控制,原因是指令与数据的表示不可分离,类似于冯·诺依曼架构中的代码-数据混淆。