部落格

關於 TLS、後量子密碼學與內聯攔截的技術筆記—從位元組層級談起。

意義的交握

TLS 保護傳輸層。它上面那一層—你的意義應該完整抵達另一個心智的那一層—卻沒有任何東西在保護。一位協定工程師為「溝通失真」寫下的失效模型:為什麼意義沒有本地校驗和(它的神諭住在另一個心智裡,它的裁決是一趟來回)、為什麼接收不可逆,以及為什麼工具唯一能站的位置,是送出之前那最後可逆的一刻。始於一次實作的三篇筆記,這是第三篇。

一個心智論

為什麼建立在相近模型上的 AI 寫程式工具,用起來卻像差了一個世代?因為一個系統要維持概念完整性,唯有在恰好一個心智握有其設計的寫入權時—而每一種工具架構,不是保住這個條件,就是打破它。行內助手、多代理編排、擁有整個迴圈的代理,用這一個判準排開—再加上 Brooks 當年不可能有的那一半:作為設計意圖無損通道的 LLM。以一個可以被推翻的預測寫下。

一個心智,被放大

tlslane 在約三個月內,從一個空的儲存庫,變成一套從零寫起的 TLS 堆疊、一條 eBPF inline 資料路徑、一個控制平面,以及一支浸泡測試機隊—由一個人完成。故事不在速度—而在這個系統維持住了它的概念完整性,而 Brooks 早已預言了原因:AI 沒有幫這個專案增加開發者,它放大了其中一個。而當我試著把工作分散到多台機器上,Brooks 對那件事也說對了。

站在路徑之外:介紹 ticketconnect

把一條 TLS 連線升級到後量子的方法,大多都站在路徑上的某處。有第四種做法不是這樣—今天我們把它開源。ticketconnect 透過 eBPF 與 ptrace,把一份 TLS 1.3 恢復用工作階段安裝進一個未經修改的 OpenSSL 客戶端,讓它自己的下一條連線以 PQC 為根的 PSK 恢復。經過驗證,也對自身侷限誠實。

TLS 路徑上的三個立足點

要把一條路徑升級到後量子密碼學,你得先進入它。inline(eBPF,在封包層)、redirect(以 netfilter 導入真正的 socket),或 proxy(一個讓流量指向的端點)—各自在平台適用範圍、一行設定,以及最終由誰掌握流量控制之間做取捨。只有 inline 對兩端都隱形。

為什麼我們稱它為「接合」(splice)

這是我們試的第三個名字—先 split、再 bridge、最後 splice。為什麼前兩個詞,各對一個「把兩條 TLS 連線接起來、並在中間轉換密碼學」的東西說了一個小謊,而被捨棄的名字仍在程式碼裡化石般留存。一段取材自 git 的詞源考據。

我們的代理程式拒絕信任了三週的那個 CA

一個代理程式在每一條連線上拒絕了一張完全有效的上游憑證,整整三週。憑證沒問題;主機信任那個 CA。代理程式在開機時讀過一次信任庫,之後再也沒讀。當重啟就能修好,你看到的就是過期的記憶體狀態。

1.2 KB 問題:後量子如何撐破 ClientHello

開啟 PQC,部分連線就失敗—不是密碼學錯誤,而是交握進行到一半卡住或重置。ML-KEM 金鑰交換把 ClientHello 撐過 MTU,於是它跨越多個 TCP 區段,假設只有一個區段的設備就出錯。為什麼它看起來像網路不穩,又為什麼它是遷移的第一隻金絲雀。

為什麼是混合式後量子,而非純 ML-KEM

如果 ML-KEM 才是具量子抵抗力的演算法,為什麼要部署 X25519MLKEM768、還拖著傳統的 X25519?混合式不是把量子安全加倍—X25519 提供的後量子保護是零。它真正的工作,以及那個精確的風險權衡,就顯現在兩個密鑰如何在封包上結合。

後量子 TLS 遷移:實務指南

密碼學是容易的部分—NIST 已經做完了。把 TLS 遷移到後量子實際上要做些什麼,一步一步:設定期限的法令、後量子在封包上的樣貌,以及盤點 → 遷移 → 舉證的順序—包含那條你碰不到的長尾端點。

M-23-02 究竟要求什麼:解碼到封包層的現實

這份聯邦後量子備忘錄常被讀成「現在就部署 PQC」。其實不然—它近期具約束力的要求,是盤點易受量子攻擊的密碼學,而那解碼後就是每次交握的一個欄位。為什麼這首先是個可觀測性問題,以及為什麼設定檔無法回答它。

0x4588 ≠ 4588:一個讓後量子從我們自己儀表板上消失的單字元錯誤

一個十六進位/十進位的失誤,讓每個 ClientHello 都宣告了未被指派的金鑰交換群組—而三層疊加的失誤把它藏了數週。這個故事,以及為什麼封包才是唯一的真相來源。

一條連線、兩次交握:在不更動端點的情況下升級 TLS 加密

一條 TLS 連線如何在傳輸途中升級其加密—兩次獨立的交握、兩套金鑰排程,以及為什麼憑證才是關鍵所在。

逐位元組解析 X25519MLKEM768:封包層上的後量子金鑰交換

後量子金鑰交換在一條 TLS 1.3 連線上真正的樣貌—代碼點、1.2 KB 的金鑰交換、位元組順序,以及如何用一行 openssl 指令驗證。