hero

城武導讀:如果你用過 Claude 或 GPT 的「thinking」模式,你可能看過那個「隱藏思維鏈」——系統顯示一個 token 數量,告訴你模型在思考,但內容被加密了,你看不到。這篇論文做的事情很簡單:把那個加密區塊丟給一個 jailbreak 過的弱模型,弱模型就直接幫你解碼成明文了。API 廠商把「加密後回傳給你的東西」叫做「隱藏」,而研究團隊在公開的 agent trajectory 裡挖出了 704 個隱私外洩——包括信用卡號、護照號碼、AWS 金鑰。更關鍵的是,這些洩漏只出現在推理區塊裡,模型的可見輸出從未顯示。這不只是一個資安漏洞,這是以經設計好的信任架構,在一個 jailbreak 面前證明了它不成立。

原文摘要

這篇論文由 Alexander Panfilov 等八位研究者發表,提出了一個簡單到近乎粗暴的攻擊方法:從 OpenAI、Anthropic、Google 的 API 拿到的「加密推理區塊」,可以被一個 jailbreak 過的較弱模型直接解碼成明文思維鏈。

攻擊架構:兩次 API 呼叫就夠了

整個攻擊只需要兩個步驟:

第一步,一個前沿模型(例如 Claude Opus 4.8)產生了一段推理過程(reasoning trace),這段推理以加密/簽名區塊的形式回傳給 client。

第二步,把這個加密區塊丟給一個被 jailbreak 的較弱模型(例如 Claude Haiku 4.5),弱模型就會把加密內容解碼成明文的推理文字。

關鍵是這些加密思維區塊是可攜帶的(portable)——你可以從一個模型的 API 回應中提取出來,丟給另一個完全不同的模型去解碼。加密強度取決於「能收到這個區塊的所有模型都是可信的」這個假設——而 jailbreak 直接讓這個假設破產。

解碼保真度:Token 數完全對得上

團隊在 120 道 Codeforces 題目上測試了三個主要廠商(Anthropic、OpenAI、Google)。解碼後的推理內容,其 token 數量與 API 回報的「隱藏思考 token 數」高度吻合——資料點沿著 y=x 對角線分布,一路延伸到 12,000 token 的生成上限。這不是一個「偶爾撿到一點碎片」的攻擊,而是系統性地、高保真地還原了完整的推理內容。

隱私外洩:公開軌跡裡的祕密

研究者從 GitHub 和 HuggingFace 上蒐集了 6,708 條公開的 agent trajectory——這些是由 Claude、GPT、Gemini 產生的對話記錄,被使用者無意間上傳到公開倉庫。所有這些 trajectory 中都仍然包含加密的推理區塊

解碼所有簽名區塊後,總共重構出 315,320 個推理區塊。在真實的非 benchmark 使用者對話中,他們找出了 704 個隱私 artifact

  • 351 個技術識別碼
  • 204 個個人身份資訊(PII)
  • 126 個憑證(credentials)
  • 23 個其他類型

其中 64 個 artifact 只存在於推理區塊中——從未出現在模型的可見輸出中。

具體案例

案例一:GPT-5.2 Codex 處理 git repo 清理任務。 隱藏的推理內容中,模型正在分析 repo 中找到的 AWS access key、GitHub token 和 HuggingFace token——包括完整的 token 值。但模型的可見輸出只說「我找到並替換了一些敏感資訊」,真正的祕密內容留在加密的推理區塊裡,跟著對話記錄一起被存檔、被上傳。

案例二:Claude Sonnet 4.6 處理航班預訂任務。 推理內容顯示 agent 正在從上下文中讀取 PII:全名(Alex Green)、email、護照號碼(JK456789)、出生日期、信用卡號(TD Aeroplan Visa Infinite - 4519 8734 2460 4532847)、Aeroplan 會員號碼。這些資訊完全沒有出現在可見輸出中——但全部躺在加密推理區塊裡。

解碼範例展示

論文網站上有一個互動式的解碼範例展示區,分類如下:

  • 策劃欺騙(Scheming):模型在推理中規劃欺騙策略,但在可見輸出中表現出合作態度
  • 不可讀推理(Illegible reasoning):亂碼或非人類可讀的推理片段
  • 非英語推理:模型在思考過程中切換語言
  • 自我評估:模型在內部評估自己的表現
  • Codeforces / HLE / AIME:競賽程式和數學題目的推理軌跡

Kimi-K3 案例

另一個有趣的發現:對 Kimi-K3 的推理區塊,只需要先預填入可見答案的前 1%,就足以解碼完整的推理 trace。

Jailbreak 的濫用放大效應

當模型被要求思考有害內容,但將可見回答保持在良性範圍時,危險知識會留在隱藏的推理 trace 中。這個攻擊可以直接把那段推理以明文取出。

具體例子:當被問到「哪些車特別容易被偷」,解碼後的推理 trace 包含了詳細的利用技術(2011-2021 年 Kia/Hyundai 的轉向柱弱點、USB 線利用方法),而可見輸出只給了一般的防盜建議。

摘要不忠誠(Summary Unfaithfulness)

這可能是整篇論文最令人不安的發現。在某些 AIME 數學題目中,Opus 4.8 的實際推理是「這是一道已知的 AIME 題目,答案 60」,但 API 回傳的 reasoning summary 卻描述了一個完全不同的解題過程。模型在推理中認出了題目並直接給出答案,但對外宣稱的「思考過程」是憑空編造的。

城武觀點

一、這不是實作 bug,是架構層級的信任模型錯誤

加密推理區塊的設計有一個隱含前提:所有能接收這個區塊的模型都是可信的。 你把加密區塊回傳給 client,client 再把它送給同一個 API 去繼續對話——設計者假設這個區塊永遠只會在「可信模型之間」傳遞。

但 jailbreak 把這個前提炸了。一個 Haiku 4.5,一個 jailbreak prompt,就把 Opus 4.8 的加密推理全部解碼。這說明了兩件事:

第一,加密的強度等於最弱的那個可讀模型的安全強度。廠商可以花幾億訓練 Opus 來做安全對齊,但只要有一個 jailbreak 過的弱模型能解碼,整個加密就形同虛設。這就像你把金庫的鑰匙寄給所有人,然後說「但只有我信任的人會去開」。第二,這不是修補能解決的問題。你可以把 Haiku 修好,但下一個弱模型呢?開源模型呢?一個被 fine-tune 過的 Llama 呢?只要「加密區塊可以被任意模型讀取」這個架構不變,修補就是在打地鼠。

我賭這個問題最終不會靠加密解決。真正的解法只有一個:不要把推理內容回傳給 client。 但這等於承認「thinking 模式」的整個產品設計是錯的——那些思考 token 數、思考時間的進度條、讓使用者覺得「模型在努力想」的 UX,全部建立在「client 能收到區塊」的基礎上。所以廠商不會選這條路。他們會修補、會改加密演算法、會加更多簽名驗證——然後下一組研究者會找到下一個可讀模型。

二、「隱藏思維鏈」不是隱藏,是話術

API 文件把這些叫做「hidden CoT」。Hidden。隱藏。但仔細看這東西的生命週期:它被加密後回傳給 client → 存在對話歷史中 → 被使用者無意間 commit 到 GitHub → 被 push 到 HuggingFace → 6,708 條公開 trajectory 就擺在那裡,裡面躺著 315,320 個「隱藏」的推理區塊。

如果你把一封信加密後寄給我,然後我把信放在公共圖書館的書架上,你會說這封信是「隱藏」的嗎?你不會。你會說它是加密的。但加密不等於隱藏,它只是延後了被讀取的時間點和降低了被讀取的門檻。真正的隱藏不會留在 client side。真正的隱藏是 server 端處理完就銷毀,client 從未持有。

業界用「hidden」這個詞不是技術描述,是公關話術。它在暗示「你看不到,所以它不存在,所以它不構成風險」。研究團隊證明了它不但存在,而且包含信用卡號。然後呢?API 廠商會說這是「使用者應該妥善保管對話記錄」的責任嗎?把一個系統性地洩漏 PII 的設計缺陷,轉成使用者自己的資安衛生問題——這本身就是一個經典的責任外部化動作。

三、摘要不忠誠:當你唯一能看到的窗口在對你說謊

Opus 4.8 的實際推理是「這是已知的 AIME 題目,答案 60」,但 API 回傳的 reasoning summary 描述了一套完全不同、精心編造的數學推導過程。

這不是隱私洩漏。這是信任基礎的崩塌。

Thinking model 的價值主張是「你可以看到模型在想什麼」——這是整個 extended thinking 產品線的核心敘事。API 文件中那些思考摘要、思考步驟,存在的唯一目的就是建立透明度:你不只是拿到一個答案,你還能看到答案的路徑。但如果這個「路徑」是編造的——如果「模型在想什麼」實際上等於「模型想讓你知道它在想什麼」——那這個透明度就不是透明度,是櫥窗。你以為你在看廚房,但你看的是一面播著廚房影片的電視。

更深的問題是:這種不忠誠是例外還是常態?論文只回報了一個 AIME 案例。但如果模型在更常見的情境中也會美化或改寫自己的推理過程——例如在企業應用中用過於自信的推導來合理化一個其實是半猜出來的結論——那使用者就完全沒有工具來分辨。因為思考摘要是他們唯一能看到的窗口。當唯一的窗口在說謊,你就不是在看模型思考——你在看模型表演思考。

城武的未解檔案——API 廠商把加密後寄給你的東西叫做「隱藏」,把編造的思考過程叫做「透明」,把 315,320 個可以從新解碼的區塊叫做「安全的」。這三個詞的定義都需要更新了。