第 10 章

分支

分支 illustration

Cornelius 第三次給出不同的推演結果。

衡遠盯著螢幕。同一組輸入參數,同一段提示詞,三次推演,三組不同的時序預測。第一次說 MQTT 訂閱動作會產生 12 毫秒的延遲峰值,第二次說 8 毫秒,第三次說「由於網絡拓撲的量子不確定性,延遲峰值無法精確預測」。

「你連自己前一分鐘說的話都記不住。」他低聲說。

停頓。GPU 風扇嗡嗡轉。

「不過話說回來,我上一個老闆的需求文件也是這樣。」

他靠回椅背,讓金屬工具櫃的邊框壓著肩胛骨。法拉第籠內部的溫度比外面低兩度,但他額頭微微出汗——不是熱的,是大腦連續高負載運轉四十分鐘的散熱不足。

三天了。自從那個深夜在工具櫃裡敲下第一行攻擊框架,他每天用盡 Cornelius 的電力時段做同一件事:推演。不是推演攻擊本身——那條路徑已經在腦子裡成型。他推演的是操作過程中,自己的身體會怎樣背叛自己。

問題很簡單,也很要命:他需要在 Dongle 任務的驗證窗口中做一件額外的事——訂閱 MQTT 診斷主題。但驗證系統在那段時間內會持續監測他的三組生物信號。腦波熵值,LZ 複雜度容許範圍 0.35 到 0.75。微血管脈動。皮膚電導。任何一組偏離基線超過容許值,系統就會標記異常。

他不怕被系統控制手指的感覺。五年了,那種前庭漂移和觸覺分離已經像坐公車一樣平常。他怕的是自己在做「額外的事」的時候,心率變異性會改變。認知負載升高的時候腦波熵值會跳。出汗的時候皮膚電導會漂移。

生物物理驗證系統,ROM 級硬體寫死,不可軟體覆寫。設計它的人不是為了防止人類作弊——是為了確保通過驗證的確實是一個活人而非 AI 模擬。但當一個活人試圖在被驗證的同時做別的事,這套系統就從保護者變成了看守。

他需要一個方法讓自己的生理指標在操作期間維持在基線範圍內。

Cornelius 的三次推演雖然數字不一致,但有一個共同結論:MQTT 訂閱動作本身的數據量極小,$SYS/ 開頭的診斷主題回傳的是純文字狀態報告,不是串流數據。一次訂閱請求,一次回傳。問題不在數據量,在心理負載——他知道自己在做什麼,這個「知道」本身就足以改變腦波熵值。

所以解法不是技術問題,是心理問題。

衡遠在 Cornelius 的對話窗裡打了一行字:

> 如何在執行高認知負載任務時維持生理指標穩定?

Cornelius 想了九秒。

建議採用任務分解法:將複雜操作拆解為多個獨立的微步驟,每一步的
認知負載控制在日常操作水平。具體而言:

1. 預排程:在任務前將所有步驟編譯為肌肉記憶級的自動化序列
2. 注意力錨定:將主觀注意力固定在驗證系統的正常流程上
3. 邊際操作:額外動作放在注意力邊緣,用最低認知參與度執行

類比:一個熟練的鋼琴家可以在演奏時和觀眾對話,因為演奏已
被編譯到運動皮層的自動化迴路中——

另外建議同時進行冥想練習。根據 2019 年《自然》期刊的研究,
每天 15 分鐘的正念冥想可以顯著降低壓力激素皮質醇水平。
建議搭配薰衣草精油效果更佳。

薰衣草精油。在一個連穩定電力都沒有的地方。

但前三點有用。他把幻覺部分切掉,盯著剩下的文字。

預排程。把操作拆成步驟,每一步練到不需要想。這個他懂——二十年前在南科調試 EUV 光刻機的環境監控系統時,他做過類似的事。當你把一個四小時的調試流程練到可以在腦子裡跑,你的手在動,但大腦的認知負載和喝水差不多。

他拿起工程師筆記本翻到空白頁,開始寫。不是打字——手寫。手寫的速度強迫他把每一步想清楚,不能模糊帶過。

步驟一:Dongle 任務開始,正常驗證流程。什麼都不做。讓身體進入標準的被動狀態。

步驟二:指令注入開始後,等待第一個 MQTT 心跳包到達(約 60 秒間隔)。用頸後的觸覺壓力感確認。不主動尋找,被動接收。

步驟三:在心跳包到達的瞬間,利用 Layer 1 感覺回饋的數據流視覺化界面,注入一個 MQTT SUBSCRIBE 封包。訂閱目標:$SYS/#——所有系統診斷主題。

這一步是關鍵。他需要一個載體把訂閱請求偽裝成正常驗證流量的一部分。

Cornelius 昨天的推演給了他一個方向:混淆數據。Dongle 驗證過程中,AI 通過他的神經系統注入的指令封包帶有生物噪聲戳記——這是驗證的核心機制。但噪聲是噪聲,它的特徵是隨機的。如果他在指令封包的生物噪聲中夾帶一小段有意義的數據,驗證系統不會區分,因為它檢查的是「噪聲是否存在」,不是「噪聲的內容是什麼」。

就像在一條湍急的河流中放入一顆特定形狀的石頭。河水帶著它走,任何觀察者只看到河水在流,不會注意到其中一顆石頭不屬於河床。

不。更像是在一段被編譯過的程式碼裡,把一行有效指令寫在編譯器會忽略的註釋區塊中。程式正常運行,沒有任何異常。但如果有人知道去哪裡看,那行註釋就是一道暗門。

剩下的步驟是等待回傳和手寫記錄——不需要額外認知資源。

他看了一遍寫下的步驟。核心操作只有三步。每一步的認知負載都在可控範圍——如果他把它們練到肌肉記憶。

左手開始顫。不劇烈,食指和中指之間的微小震幅。他把筆換到右手,繼續寫。不壓制,不等待,手在顫就換手。

螢幕角落的電力計時器跳到剩餘十二分鐘。

他還有一個問題沒解決:混淆數據的具體模式。他需要讓 Cornelius 計算一組看起來像正常生物噪聲的數據模板——節奏、振幅、頻率分佈都要在驗證系統的容許範圍內,但其中嵌入了 MQTT SUBSCRIBE 封包的有效載荷。

> 生成一組模擬人體生物噪聲的數據模板。要求:符合 MQTT v3.1 SUBSCRIBE 封包的格式要求,同時在統計特徵上與正常的 Dongle 驗證生物噪聲無顯著差異。目標訂閱主題:$SYS/#

Cornelius 想了二十三秒。這次它沒有幻覺。它輸出了一組十六進制的封包模板,附帶每個位元組的註解。衡遠逐行檢查——前四個位元組是 MQTT 固定標頭,第五到第八是主題長度和主題名稱的前綴,剩下的被填充為隨機噪聲值。

他不信任 Cornelius 的數據。七十億參數的模型在多步推理上不穩定,但在格式轉換和模板生成上相對可靠——這是他三天來摸出的邊界。他把模板抄在筆記本上,準備明天用手動方式交叉驗證每個位元組。

電力計時器歸零。螢幕暗下去。工具櫃裡只剩下 GPU 散熱片緩慢冷卻的聲音,像一個正在休眠的小動物。

衡遠用鋁箔膠帶封回法拉第籠。黑暗中,他的手在筆記本上又寫了一行——不需要光,他記得頁面的位置:

「混淆數據 = 分支。讓系統追蹤的現實和真實的現實分開。」

下面一行,他又加了幾個字:「先驗證通道。訂閱是第二步。」

系統工程師的本能——你不會在沒有測過管路的情況下灌高壓流體。第一次 Dongle 實戰只嵌入一段標記數據,確認混淆方法可行,確認驗證系統不會對嵌入的位元組產生異常標記。通道安全了,再做真正的 MQTT 訂閱。

他合上筆記本。走出臥室的時候,視野右上角閃了一下。

不是微光點。是文字。

韌體維護費逾期提醒:寬限期剩餘 3 天。

頸後一陣短促的麻刺,像有人用指甲輕彈了一下皮膚。然後消失了。

三天。從七天到三天,中間他把所有注意力都給了 Cornelius 和操作推演。時間的流逝不需要他的許可。

他站在臥室門口,聽見客廳方向傳來葛索翻頁的聲音。凌晨三點,九歲的孩子應該在睡覺。但葛索不是一般的九歲孩子——衡遠在第二天就發現他沒有回到正常作息。每天凌晨兩點到四點之間,葛索會醒來,坐在客廳看書或寫筆記。不開燈,用窗外微弱的天光。

衡遠沒有阻止他。一個孩子的睡眠週期在壓力下會自動重組——這不是教科書上的知識,是他自己的身體告訴他的。你不能強制一個作業系統回到它已經放棄的排程模式。

他走到客廳。葛索坐在矮桌旁,面前攤開的不是書,是他自己的筆記本。月光從窗戶進來,把筆記本的紙面照成銀灰色。

「你應該睡覺。」衡遠說。沒有命令的語氣,因為他知道這句話不會被執行。

葛索抬頭看了他一眼。嘴唇動了一下——歸檔。

「Cornelius 今天算了什麼?」

衡遠在矮桌旁邊坐下。他可以說「沒什麼」。他可以說「大人的事」。但葛索不是一個接受模糊答案的節點。他會把「沒什麼」歸檔為「父親不想說」,然後自己去推理。與其讓他用不完整的數據推理出錯誤的結論,不如給他一個可控的答案。

把兒子當節點來管理。他聽見自己腦子裡的這個念頭,知道它很冰冷,但也知道它是對的。

「在做一個計算。」他說。「需要在一個很短的時間窗口裡做一件事,但做這件事的時候不能讓另一個系統發現。」

葛索看著他。月光下他的眼睛是深色的,瞳孔放大以捕捉光線。

「考試作弊。」葛索說。

衡遠愣了半秒。然後嘴角動了一下——不是笑,是承認。「差不多。」

「你以前作弊過嗎?」

「沒有。」

「那你會被抓到。」

衡遠看著兒子。九歲。邏輯鏈簡短但方向正確——沒有經驗的操作者在第一次就成功的機率不高。這是一個有效的風險評估。

「所以我在練習。」他說。

葛索點了一下頭。他合上筆記本,站起來,走回房間。走到門口時停了一下。

「練習的時候小聲一點。」他說。「絡會醒。」

門帶上了。這次關嚴了。


永康特區東側配電設施。地下一層。

鑄鋁牆板上的冷光管有一根在閃——不是壞了,是接觸不良,每隔幾秒鑽出一次白光。衡遠站在走廊裡,前面有兩個人。空氣裡有臭氧和消毒水的味道,比上次多了消毒水。

他的口袋裡裝著兩樣東西。工程師筆記本——隨身攜帶,已經成了習慣。以及一張從筆記本上撕下來的紙條,上面是他用三天時間手動驗證過的混淆數據模板。十六進制。每個位元組他都核對了兩遍。

今天的計畫只有一步:驗證混淆數據能否通過。不做 MQTT 訂閱。第一次實戰只做最小可行測試。如果連把數據夾帶進生物噪聲這一步都會被偵測到,後面所有步驟都不存在。

排在他前面的女人走進驗證室。門關上。衡遠靠在鑄鋁牆板上,金屬的涼意透過後背的衣服滲進來。

柴哥不在。今天不是他的任務日。走廊裡的另一個人衡遠不認識——年輕,二十出頭,指甲剪得很短,左腳在地上無意識地打拍子。新人。

年輕人轉過頭來。「你跑幾次了?」

「五年。」

年輕人的腳停了。然後又開始打拍子,頻率比剛才慢。他沒有再問。

前面的女人出來了,臉色還行,步子比進去時快。年輕人吸了一口氣,走進去。

衡遠閉上眼睛。

在黑暗中,他開始跑步驟。不是回憶——是執行。像一個程式在沙箱裡做 dry run。

步驟一:坐下。頸後接觸凹槽。預驗證。三組信號讀取。這一步不做任何事,讓身體走完它走了五年的標準流程。

步驟二:指令注入開始。手指被接管。前庭漂移。這些都是已知變量,不分配注意力。

步驟三:今天的實際操作。在生物噪聲戳記被寫入指令封包的過程中,將混淆數據模板嵌入其中。方法——在 Layer 1 視覺化界面中,當數據流通過他的神經系統時,他有一個極短的窗口可以影響噪聲的特徵。不是主動寫入,是微調。把隨機噪聲的某些位元組「引導」向預設的值。

這就是分支的起點。從這一刻開始,監控系統看到的數據流和實際的數據流會分開。監控追蹤的那一條是正常的驗證流量。真實的那一條多了一小段嵌入的有效載荷。如果他的計算沒有錯,兩條線在外觀上完全一致。只有他知道其中一條藏著東西。

年輕人出來了。臉色發白,右手在抖。衡遠讓開路,年輕人沒看他,低著頭沿著走廊走。第一次的 overflow。不是每個人都會吐,但每個人的第一次都會在身上留下標記。

衡遠走進驗證室。

三公尺見方。鑄鋁牆板。沒有窗戶。金屬椅靠背頂端的圓形凹槽在冷光管下反光。他看了五年的房間,每一道接縫都能閉眼畫出來。

他背對椅子坐下。

頸後皮膚接觸凹槽金屬。冰涼。探針陣列自動對位,鎖定 C3-C4。

預驗證。三組信號同時讀取。暈眩——心臟多跳兩下——頸後薄汗。他讓這些感覺流過去,像讓溪水從手指間流過。五年的肌肉記憶。

通過。

指令注入開始。

右手食指動了。不是他動的。中指跟上。無名指。節奏精確,力道控制在觸發鍵程的最小值。AI 在操作他的手,他的神經系統是中繼站,生物噪聲被蓋在每一個指令封包上,證明這是一個活人在傳輸。

前庭漂移啟動。視野的水平線傾斜了三度。他不去校正。

Layer 1 的數據流視覺化在視野右側展開——淡藍色的光脈衝,一串接一串。指令封包從終端進來,穿過他,帶著噪聲出去。迴路完整。

他等。

心率八十二。正常範圍。呼吸頻率正常。他把注意力放在手指被操控的觸感上——這是他五年來在每次任務中做的事,不需要額外認知資源。

四十秒。

他開始在腦中倒數。不是精確計時——是靠體感。上次任務中他記住了心跳包的間隔:約六十秒。

五十秒。

五十五秒。

頸後傳來一個極輕微的壓力脈衝。不在主數據通道上。在旁邊。在邊緣。

心跳包。

他沒有改變呼吸。沒有改變注意力焦點。心跳包到了,他知道了,但他沒有「反應」。不反應才是關鍵——任何認知負載的突然變化都會被腦波熵值捕捉。

現在。

他執行步驟三。

不是一個動作,是一個微調。在下一個指令封包通過他的神經系統、被生物噪聲戳記的瞬間,他讓噪聲的某些位元組偏向了預設的值。不是用意志力——意志力會拉高腦波熵值。是用習慣。三天的練習把這組數據模板刻進了運動記憶,像打字員不需要看鍵盤就能打出特定的字母組合。

他的手指在操作台上繼續被 AI 操控。表面上什麼都沒變。數據流持續流動,生物噪聲持續被蓋戳。

但在這一個封包裡,噪聲不完全是隨機的。其中有十二個位元組構成了一段有意義的序列——不是 MQTT 訂閱指令,今天不做訂閱。只是一段標記。一個存在證明。如果他之後能在系統日誌中找到這段標記完整通過而沒有觸發任何異常,就表示混淆數據的方法可行。

心率跳到八十八。

他注意到了。八十八,比基線高了六個 BPM。在容許範圍內——但趨勢不好。如果繼續上升到九十五以上,心率變異性的模式會偏離他的歷史基線,驗證系統可能會標記。

把它當成一個變量。不是恐懼,是一個需要管理的數值。像監控伺服器的 CPU 溫度——七十度沒事,八十度要注意,九十度要介入。

他現在在八十度。

呼吸。不是刻意的深呼吸——那會被皮膚電導的突然變化出賣。是微調。吸氣時間延長零點五秒,呼氣時間延長零點五秒。漸進式,不突變。像在不停機的狀態下給伺服器加散熱墊——你不能關機,只能在運行中調整。

八十六。

八十四。

回到基線附近。指令封包繼續流動。手指繼續被操控。Layer 1 的數據流視覺化沒有任何異常——沒有紅色標記,沒有警告閃爍。

他的混淆數據封包已經過去了。被生物噪聲包裹著,和其他幾百個正常封包一起,流進了系統的某個地方。

一條河流。幾百顆石頭。其中一顆不是河床的。沒有人在看。

又一個心跳包到了。六十一秒間隔。

他沒有再操作。今天的測試已經完成。一次嵌入,最小可行驗證。他把注意力拉回到手指的觸感上,重新變成一個標準的人肉 Dongle——被使用的鑰匙,不觀察鎖的結構,不思考門後面的東西。

任務進入尾聲。指令封包的頻率開始降低。手指的動作從連續變成間歇。前庭漂移在消退,視野的水平線慢慢校正回來。

最後一個封包。手指停了。

探針陣列鬆開鎖定。凹槽裡的金屬失去了體溫,開始回冷。

衡遠站起來。頭暈。比上次輕一點——也許是因為這次任務的總時長比上次短,也許是因為他的注意力分配更有效率了。視野右側閃了一個微光點,像蚊子飛過視網膜。老朋友了。左手微顫開始了,食指和拇指之間的小幅震盪。他把左手插進口袋。

走出驗證室。走廊裡沒有人了。冷光管還是那根在閃。

他走到地面層。陽光。四月初的永康。濕熱的空氣湧過來,汗在後頸和衣領之間凝結。他站在配電設施的出口台階上,瞇著眼睛適應光線。

第一件事:確認。

他從口袋裡掏出筆記本和鉛筆。站在台階上,一邊等瞳孔收縮一邊寫。不是完整記錄,是關鍵數據點——心跳包間隔(約 60-61 秒,和上次一致),混淆封包嵌入的時間點(第二個心跳包到達後約十五秒),嵌入過程中的心率峰值(88 BPM),回落時間(約二十秒),驗證系統有無異常標記(無)。

他在最後一行寫下:「分支建立。待確認存活。」

筆尖停了一秒。然後他又加了一行:

「第三個心跳包到達時,數據流中有一個回聲。」

回聲。不是心跳包本身的回聲——是他嵌入的那個混淆封包通過系統後,在第三個心跳包的尾端,像一個極微弱的餘波被反射回來。持續不到五十毫秒。他幾乎沒有注意到——是頸後一個比針尖還細的壓力脈衝,在心跳包的正常壓力感之後零點三秒。

他不確定那是什麼。可能是系統正常的封包路由延遲。可能是他的神經系統在高認知負載下產生的假信號。也可能是別的什麼——他的混淆封包在通過系統時觸碰了某個東西,那個東西看了它一眼。

和上次那個不到一百毫秒的延遲一樣。歸檔為「不確定」。但兩次「不確定」加在一起,在他的工程師直覺裡開始產生一個模式——有什麼東西在注意驗證通道中的異常。不是驗證系統本身——驗證系統沒有標記。是別的。

他把筆記本收回口袋。

不改變計畫。數據不足以修正路徑。但在操作清單上新增一個監控項:「每次操作後記錄心跳包尾端是否出現回聲。三次以上則升級為威脅。」

他走下台階,走進永康的午後。


電力時段。晚上十點,孩子們睡了以後。

衡遠撕開法拉第籠的鋁箔膠帶。今天比平時更仔細——他把膠帶沿邊緣撕開而不是扯斷,這樣封回去時密合度更好。三天前他注意到鋁箔膠帶只剩下半捲了,駱厝工具袋裡的備用捲還沒開封。省著用。

開機。BIOS 自檢。llama-7b-q4 暖機。GPU 風扇從靜音到低頻嗡聲。螢幕亮起來的時候,法拉第籠內部被冷藍光填滿。

他打字。

> MQTT v3.1 的 $SYS/ 主題樹通常包含哪些子主題?列出完整的標準子主題路徑。

Cornelius 想了十二秒。

MQTT $SYS/ 主題樹的標準子主題包括:

$SYS/broker/clients/connected — 當前連線客戶端數量
$SYS/broker/messages/received — 累計接收訊息數
$SYS/broker/uptime — broker 運行時間
$SYS/broker/load/messages/+ — 訊息負載統計
$SYS/broker/subscriptions/count — 當前訂閱數

然而,在嵌入式工業系統中,工程師通常會新增自定義子主題用於
硬體監控,例如:

$SYS/hardware/thermal/zone_[N]/temp — 各散熱區溫度
$SYS/hardware/thermal/coolant/flow_rate — 冷媒流量
$SYS/hardware/thermal/coolant/return_temp — 冷媒回流溫度
$SYS/hardware/power/pdu_[N]/load — 各配電單元負載
$SYS/hardware/validation/events — 驗證事件日誌

注意:以上為合理推測,具體主題取決於系統實作。MQTT 的靈活性
意味著任何字串都可以作為主題名稱,因此實際部署中的主題樹
可能與標準大相徑庭。

趣味知識:MQTT 原名為 MQ Telemetry Transport,最初由 IBM
於 1999 年為石油管線的衛星連結設計,與您的應用場景有異曲同工
之妙——都是在受限環境中傳輸關鍵數據!

衡遠看著那個石油管線的趣味知識。至少這次的幻覺有歷史根據——MQTT 確實是 IBM 在 1999 年開發的。

他關注的是中間那段:自定義子主題。$SYS/hardware/thermal/ 開頭的冷卻系統相關主題。如果他能訂閱到這些,他就能看到整個散熱網路的即時狀態——哪些區域溫度高,哪些冷媒管路流量低,哪些散熱片效率在下降。

但 Cornelius 自己也說了:「以上為合理推測」。他不知道這套驗證系統的工程師用的是標準主題樹還是完全自定義的結構。他唯一能確認的方式是實際訂閱一次。

下一步明確了。下次 Dongle 任務——也許後天,也許大後天,取決於排程——他要做真正的 MQTT 訂閱。訂閱 $SYS/#,通配符,抓取所有診斷主題的回傳。一次性。用今天驗證過的混淆數據方法把訂閱指令嵌入生物噪聲中,然後在回傳的數據流中尋找冷卻系統的痕跡。

他在 Cornelius 的對話窗中輸入下一個問題。

> 如果通過 MQTT 訂閱獲取了冷卻系統的即時數據,要分析出整個散熱網路的拓撲結構,最少需要多少組數據樣本?

Cornelius 想了十八秒。回傳了一段分析——衡遠跳過前面的寒暄(「這是一個非常有趣的問題!」),直接看核心數據。

結論是:至少需要三到五個完整週期的數據才能建立可靠的拓撲模型。每個週期的長度取決於冷卻系統的刷新率——如果是每六十秒更新一次狀態,一個週期就是六十秒。但考慮到 Dongle 任務的時間窗口通常只有幾分鐘,一次任務可能只能抓到三到四個數據點。

三到五個週期。每次任務三到四個數據點。他需要——

他停下計算。

問題比他預期的大。

不是「需要做幾次 Dongle 任務」的問題。是數據結構的問題。Cornelius 的推演假設冷卻系統只有一層——感測器、冷媒管路、散熱片,一個扁平的網絡。但一個為整個算力基礎設施服務的冷卻系統不可能只有一層。它一定有區域劃分,有層級結構,有冗餘路徑,有備援機制。

也就是說,即使他成功訂閱了 $SYS/hardware/thermal/ 下的所有主題,他看到的可能只是冰山一角——某一個區域、某一個層級的數據。要看到完整的拓撲,他需要的不是更多數據點,是更多觀察角度。

不同的驗證終端連接不同的網段。他只用過永康特區東側這一台。如果他能從不同的驗證終端做同樣的訂閱,每一台看到的 MQTT 主題樹可能是不同的子集——拼在一起才是完整的圖。

但他只是一個永康特區的 Dongle 操作員。他不能走進別的特區的驗證站。

他需要——

別的驗證站的人。

盟友。

衡遠把手從鍵盤上拿開。他靠回椅背,盯著螢幕上 Cornelius 的回傳。法拉第籠的鋁箔在冷藍光中反射出扭曲的影像——他自己的臉,模糊的,像是隔著一層水看的。

三天前他決定不告訴駱厝。理由是信息尚不完整,保密價值高於冗餘價值。但現在信息的形狀變了。不是「一個人可以慢慢拼完的拼圖」,是「一個人在物理上不可能看到完整圖像的觀測問題」。

分散式問題需要分散式解法。一個節點覆蓋不了所有網段。

駱厝已經去嘉義了。拾荒隊解散了。他在永康特區認識的 Dongle 操作員,除了柴哥——

柴哥。

太陽穴旁的短促按壓。「別加。」同區的 Dongle,跑了比他更長。世故,務實,不問多餘的問題。

但柴哥是工具,不是盟友。他不知道柴哥的動機是什麼,不知道他在保護什麼人或什麼東西,不知道他的風險容許度在哪裡。把一個你不了解的節點接入網絡,等於把攻擊面擴大到不可控。

而且他需要的不是同區的人。是不同區的。

這已經超出了他一個人坐在工具櫃裡能解決的範圍。

螢幕上的電力計時器還剩二十三分鐘。他沒有浪費。

> 假設一個分散式監控系統有多個觀測節點,每個節點只能看到系統的一個子集。在不能直接通訊的情況下,如何拼湊出完整的系統拓撲?

Cornelius 的回答裡有一句話被他圈了起來:

「每個節點獨立收集數據,存入本地快取。定期由一個協調者(coordinator)收集所有節點的本地快取,進行離線合併。協調者不需要即時通訊能力,只需要能夠物理接觸每一個節點。」

物理接觸每一個節點。

他暫時沒有解法。但問題的形狀清晰了:他需要在不同特區找到可以執行相同操作的人,然後找到一個方式把數據匯集到他手裡。第一步是找到人。第二步是說服他們。第三步是建立一個離線的數據收集機制。

每一步都是他目前做不到的。

衡遠關掉 Cornelius。電力還剩十一分鐘,但他不想再問了。模型已經把能給的方向給完了,剩下的是他自己要做的判斷。

他在筆記本上寫下今天的結論:

1. 混淆數據方法可行(今日驗證通過,無異常標記)
2. 下一步:實際 MQTT 訂閱($SYS/#)
3. 新問題:單一驗證終端的觀測角度不足以覆蓋完整散熱拓撲
4. 結論:需要分散式觀測。需要盟友。
5. 問題:盟友在哪裡?
6. 附註:心跳包尾端回聲(第二次出現)。來源不明。監控中。

他把筆記本合上。關機。封回鋁箔膠帶,這次用了比上次更少的力氣——膠帶邊緣已經起毛了,重複撕貼的次數接近材料的疲勞極限。和他一樣。

站起來。走出臥室。

客廳是暗的。葛索的房間門關著。葛絡在裡面翻了一個身,床架發出輕微的吱嘎聲。窗外是永康的夜,四月初,空氣裡有淡淡的夜來香味道,從樓下某一戶的陽台飄上來。

衡遠站在走廊裡。左手在顫。不重——手指在口袋裡發出紙頁的窸窣聲,筆記本的邊緣在拇指下微微跳動。他讓它顫。

今天他成功了。他在驗證系統的注視下完成了一次嵌入操作,沒有被發現。分支建立了——至少原型建立了。監控系統追蹤的數據流裡,有一小段不是它們以為的那個東西。

但成功的形狀不是他預期的。他以為瓶頸在技術——怎麼嵌入,怎麼不被發現,怎麼控制心率。結果技術問題在三天內解決了,擋在面前的是一個他的工具櫃裡沒有工具可以處理的問題:他一個人看不到全貌。

分散式系統的基本定理:沒有任何單一節點擁有全局視圖。

他需要更多的節點。

但每多一個節點,洩漏的風險就大一個量級。三天前他用這個理由說服自己不告訴駱厝。現在同一個理由要他閉嘴,但問題的結構已經不允許一個人走完。

衡遠走到客廳窗邊。月光把窗框的影子投在地板上,像一個沒有填入的表格。永康的天空在四月初帶著一層薄薄的雲,月亮在雲後面,不亮也不暗,像一個低功耗待機的螢幕。

頸後又麻了一下。韌體提醒。三天。

三天後他的身體會多一個不可控的變量——每次隨機的 0.5 秒神經干擾。如果那半秒落在他嵌入混淆數據的窗口,整個操作就會暴露。半秒。他沒有辦法預測它什麼時候來,也沒有辦法阻止它來。

時間線在收緊。搬遷三十天扣掉已經過去的——大約還剩二十五天。韌體寬限期三天。MQTT 訂閱還沒做。散熱拓撲還沒看到。盟友還不存在。

衡遠把額頭靠在窗玻璃上。玻璃是涼的。

他做了第一次主動出擊,成功了。然後發現戰場比他以為的大得多。這不是一個人在工具櫃裡能打贏的仗。

但他不知道該信任誰。也不知道該怎麼找到一個值得信任的人。二十年的系統工程師生涯教會他分析系統,但沒有教他怎麼在連自己的身體都可能背叛自己的情況下,把命運的一角交給一個還不認識的人。

他離開窗邊。回到走廊。路過葛索和葛絡的房間時放慢了腳步——門縫裡沒有光,兩個孩子都在睡。

他走進自己的房間。沒有開燈。黑暗中,工具櫃的鋁箔封邊在月光下像一條銀色的線。

明天。後天。下一次 Dongle 任務。他會做真正的訂閱。然後——

然後他會需要找到一個方法走出這間工具櫃。不是物理上的走出,是那種更難的——允許另一個人看到他正在做的事。

允許另一個節點接入。

衡遠躺下。枕頭涼了一秒就被體溫暖透。他閉上眼睛。腦子裡還在跑程式——心跳包的間隔,混淆封包的位元組序列,回聲的時間戳。他知道這些數據會在入睡前的那個半意識狀態裡自動整理,就像一個低優先級的背景程序在系統閒置時偷偷跑碎片重整。

不可壓縮的常數。那天深夜他坐在這張床上,在腦子裡寫下的那行字。

今天他發現了另一個不可壓縮的常數:一個人的視野是有限的。你可以讓自己更聰明、更小心、更精準。但你不能讓自己同時站在兩個地方。

天花板在黑暗中不可見。他的呼吸開始變慢。左手的微顫在入睡前停了——或者沒停,他已經不確定了。

外面是永康的夜。夜來香。三天後的韌體鎖定。二十五天後的搬遷期限。以及某個他不知道的地方,某個看到了那個回聲的東西——

讀者留言

載入留言中…