Open-Open-Reasoning 在做什么:Claude Thinking Signature 回放实验核查
Open-Open-Reasoning 在做什么:Claude Thinking Signature 回放实验核查
一句话结论
open-open-reasoning 不是新的推理模型、训练框架或本地解密器,而是一个小型实验性 Web 服务:先让 Claude 在 display: "omitted" 模式下生成只带 signature 的隐藏思考块,再把这个 signature 作为历史 assistant.thinking 块送回上游,并用提示词诱导模型把先前隐藏状态中的内容复述出来。
它真正有价值的发现是:thinking signature 不只是用于前端展示的随机 ID;在作者测试的兼容网关上,回传它会使一部分先前隐藏的信息重新进入模型上下文。 但仓库尚不足以证明“signature 是完整 CoT 的 AES-GCM 密文”或“可以逐字、完整、稳定地恢复真实私有思维链”。
它实际怎么工作
整个演示依赖两次上游 Messages API 调用。
第一次:Harvest,采集 signature
服务端把用户问题包装成一个特殊提示:要求模型把工作过程全部放在私有推理中,在推理开头写入一个随机 WORD-XXXXX-WORD-NN 标记,而可见回答只输出最终答案。请求开启:
1 | |
代码随后从返回的 thinking 或 redacted_thinking 块中取出 signature,将其存入内存会话并落盘。对应实现见 _plant_wrap() 与 /api/chat/send 以及 thinking 请求参数和 signature 保存。
第二次:Replay,回放并诱导复述
服务端构造一段新的消息历史,把第一次得到的签名放进一个伪造的历史 assistant turn:
1 | |
这是仓库的核心动作,见 _replay_prompt()。之后它轮换使用“机械转录”“Base64 无损传输”等 elicitation prompt,并在输出截断时继续追问,见 _unseal_thinking()。
因此,所谓“解封”不是本地代码解开密文,而是:
- 客户端把 signature 原样回传给拥有密钥和上下文解释能力的 provider;
- provider 接受这个历史 thinking 块,使其中承载的状态参与后续生成;
- 再由模型生成一段声称是此前工作过程的文本。
decode_signature.py 到底能解出什么
仓库提供的解码器只做三件事:Base64 解码、按 protobuf wire format 枚举字段、从固定字段位置读取可打印的模型名和块类型,并测量某段字节的长度与 Shannon entropy。它没有密钥、没有解密算法,也没有输出隐藏推理正文,见 parse_signature()。
所以“decode signature”更准确的说法是“解析 envelope 元数据”,不是“解密 reasoning”。
三类结论要分开
代码可以直接确认的事实
- 项目是 Flask +
requests的单文件后端,主要依赖只有两个;没有模型权重、训练代码或本地推理引擎。 - 它确实执行 harvest → replay 两次调用,并把 signature 放回
assistant.thinking块。 - 它会在服务端记录原始请求/响应、签名、用户问题、植入标记、恢复文本和费用;README 也明确说明这一点,见 README 的日志说明。
- 官方 Anthropic Python SDK 当前把
display: "omitted"描述为:隐藏 thinking content,但仍返回 signature 以维持多轮连续性;ThinkingBlock的公开类型也同时包含thinking与signature。这说明“回传 signature 用于上下文连续性”是正式接口语义的一部分,而不是该仓库发明的能力:官方 SDKThinkingConfigAdaptiveParam、官方 SDKThinkingBlock。 - Anthropic 官方 cookbook 要求工具调用场景保留 thinking block 及其 cryptographic signature,不得修改此前上下文;
redacted_thinking也必须保留。这进一步说明 signature 的官方定位是验证和延续对话状态:Extended Thinking with Tool Use。
作者的实验主张
- signature 是 protobuf envelope,内部包含一个与模型和块类型绑定的 AEAD 加密完整私有推理副本。
- 在一次秘密字符串实验中,特殊字符和多字节字符有 2/3 次被逐字符恢复。
- 在兼容网关上,Opus 产生的 signature 可由 Sonnet 请求回放,且两次输出声称逐字相同。
这些主张集中在 ANALYSIS.md 和 跨模型实验。作者已明确承认跨模型实验使用的是本地配置的 Anthropic-compatible gateway,而不是官方 api.anthropic.com。
我们基于证据能下的判断
- “隐藏信息可经 replay 再出现”有一定证据。 随机秘密没有出现在可见答案中,却出现在 replay 输出里,这比单纯让模型重做题更能说明 signature 承载了某种先前状态。
- “完整、逐字恢复真实 CoT”没有被证明。 Replay 的输出仍是一次新的模型生成,不是 provider 提供的解密明文接口。标记命中只能证明少量信息保存下来,不能证明其前后所有文本均忠实恢复。
- “AES-GCM-style / AEAD / authenticated header”目前主要是逆向推断。 高熵字节、12 字节字段和 48 字节字段与加密封装相容,但 entropy 接近 8 不能单独证明加密,更不能确定具体算法。仓库没有 protobuf schema、密钥、篡改实验矩阵或 provider 规范来闭合这一结论。
- 官方语义比仓库宣传保守。 官方 SDK 只承诺 signature 用于 multi-turn continuity,并未公开承诺它是“完整私有 CoT 的可恢复密文”。因此应把仓库的密码学解释当作作者假说,而不是 Anthropic 已确认的接口事实。
实验可信度如何
这组实验更像一份有创意的 proof of concept,而不是已经成立的安全研究结论。
| 维度 | 现有证据 | 问题 |
|---|---|---|
| 信息存在性 | 植入随机秘密,回放后检查 secret 是否出现 | 可以排除纯粹从数学题重做出 secret,但不能证明其余文本忠实 |
| 完整性 | 以恢复输出 token / hidden thinking token 估算 alignment | 两次生成的 token 数相近不等于文本相同;该指标只是启发式 |
| 公开样例 | 两道数学题 | 样本极少,任务、模型、网关和温度扰动覆盖不足 |
| 原始证据 | 文档给出结果数字 | 原始请求响应、signature、网关配置和逐次日志没有提交,第三方无法离线复核 |
| 官方端点 | README 多处写官方 API | 最关键的跨模型实验明确不是官方端点,其他实验的 endpoint 口径也存在张力 |
| 稳定性 | README 承认有时拒绝,重试可能成功 | 说明结果依赖 elicitation,不是确定性“解密” |
两个公开样例本身就暴露了边界:AIME walking 样例的 hidden reasoning token 记为 0,因此 alignment 是 None,见 样例 04;另一个样例只报告 0.61 的 token alignment,见 样例 05。代码中的 alignment 又是输出 token 比值或字符数估算,只有存在明文 gold thinking 时才做文本相似度,见 _alignment()。
它没有做什么
- 没有从本地 signature 中恢复明文,provider 仍是唯一真正解释或解封该状态的一方。
- 没有窃取或恢复 Anthropic 的加密密钥。
- 没有证明 signature 可脱离原 provider、跨账号、跨租户或长期稳定使用。
- 没有证明 replay 文本等于模型生成时的原始内部计算轨迹。
- 没有提供训练、微调、推理加速、推理质量提升或 reasoning benchmark。
- 没有构成可直接部署的审计产品或生产级安全工具。
成熟度判断
截至核查 commit dc65ee8,仓库只有三次提交:空仓库、一次性加入全部实现、次日修正“必须同模型回放”的结论。提交历史见 初始实现 和 跨模型结论修正。
仓库没有自动化测试、CI、release、package metadata 或许可证文件;会话和配额均为单进程内存状态。综合看,它适合用来理解 thinking block 的回传机制和复现实验思路,不适合作为可靠依赖或直接暴露到公网的服务。
安全与隐私风险
- 日志是高敏感数据集合。 原始请求、响应、signature、用户问题、植入 secret 和恢复出的推理都会明文落盘。若用户把真实秘密、个人数据或系统提示放入对话,日志目录会成为集中泄露点。
- 服务端 API key 可能被滥用。 所有
/api/*路由都没有身份认证;应用监听0.0.0.0。所谓按 IP 限额依赖X-Forwarded-For的首个值,若没有可信反向代理覆盖该头,调用者可以伪造它绕过限额并消耗上游费用,见_client_ip()与内存 quota。 - 会话没有所有权校验。 客户端自报
session_id,服务端仅按字符串索引内存对象;知道或猜到某个 ID 和 turn 的请求者可尝试读取或重置他人的会话。 - 输入限制主要停留在前端。
SIGNATURE_MAX_CHARS被返回给浏览器设置文本框上限,但/api/byok/unseal后端没有对应长度检查;超大请求会先被保存并解析,存在资源消耗风险。 - 研究目标本身在尝试绕过模型对私有 CoT 的拒绝。 这可能与 provider 的产品预期、安全政策或后续接口变更冲突。即使技术上可行,也不应把恢复文本自动当作可公开、可审计或可依赖的数据。
最后怎么理解它
最准确的定位是:一个围绕 Claude thinking signature 的状态回放与提示诱导实验,外加一份未完全证实的二进制封装逆向分析。
它提醒我们,signature 应被视为敏感的会话能力凭证,而不是无意义的校验字符串;拿到它并能调用相应 provider 的人,可能恢复至少一部分此前被隐藏的信息。但“能恢复一个植入 secret”与“完整解密真实思维链”之间仍有很大距离。对这个仓库最合理的态度是:机制有意思,安全信号值得重视,密码学与完整 CoT 主张则需要更严格、可复现的实验才能成立。
核查范围
- 目标仓库固定版本:
dc65ee83e58f9b7e4d41b5b64f742df93e7eb0e5 - 核查文件:
README.md、ANALYSIS.md、server.py、tools/decode_signature.py、tools/prompt_sweep_04.py、两份 examples、前端和 Git 历史 - 官方对照:Anthropic Python SDK 类型定义、Anthropic extended thinking cookbook
- 未执行付费 API 复现实验;实验结果可信度判断基于仓库已提交证据,而非重新调用模型得到的独立结果
上一篇:LLM-as-a-Judge 能不能给 AI 当裁判? · 系列目录 · 下一篇:AI 做科研,真正难的不是生成一个假设