工具
Steganeur:用 LLM token 概率隐藏密文的 Rust 工具
开发者发布开源 Rust 工具 Steganeur,利用语言模型 token 选择通道在自然文本中嵌入秘密信息。
2026.08.22 · 周六约 2 分钟阅读
一位开发者在 Hacker News 上以「Show HN」形式发布了开源项目 Steganeur,这是一个用 Rust 编写的隐写工具,核心思路是利用大语言模型的 token 选择概率作为信息隐藏通道,把秘密信息编码进模型生成的「掩护文本」之中。接收方只需拿到这段文本与同一模型,即可还原出原始消息。
项目原理
Steganeur 并不依赖特殊格式或字符替换,而是把消息比特映射到语言模型在每个位置上可选的 token 上。生成出的句子读起来与正常输出无异,但其中已嵌入编码信息。开发者特别强调:在启用拒绝采样(rejection method)后,输出在统计意义上与模型的正常采样结果完全一致,而不仅仅是「看起来相似」。
四种编码方法与 GPU 兼容性问题
项目共实现了四种编码方法,但其中三种依赖一个关键前提——编码与解码时模型的 logprobs 必须逐位完全一致。
- 在 GPU 上,浮点规约运算通常是非确定性的,同一模型两次前向推理得到的 logprobs 会出现微小漂移,足以破坏编码比特。
- 唯一对 GPU 友好的方法是「block」法:它按 token id 而非概率值进行分桶,因此对浮点抖动不敏感,可在任意后端服务器上工作。
- 其余三种方法则需要 CPU 推理环境。
实现与依赖
- 语言:Rust,双协议 MIT / Apache-2.0 开源。
- 目标后端:llama.cpp,要求服务器在返回 top_logprobs 时附带 token id 字段。
- 部署形态:面向自托管 LLM 服务,不依赖特定云厂商。
适用场景与局限
Steganeur 主要面向安全研究、隐私通信实验以及对 LLM 推理内部状态感兴趣的开发者。由于多数方法要求 CPU 推理或确定的浮点结果,在大规模商用 GPU 集群上的实用性受限。此外,消息容量受限于模型在每个位置的候选 token 数量,传输速率有限,更适合传递短密钥、标识符等小体量信息。
截至发稿时,该帖在 Hacker News 上获得 3 个点赞、0 条评论,社区关注度较低。项目仍处于早期个人作品阶段,是否会被后续采纳或扩展,取决于隐写社区与 LLM 工程社区的反响。
