讓空的歸於空。讓疑問在疑問中滋生。
— 《三十六計》,空城計
本系列先前回顧:
#19:馬克在訓練手冊裡找到了他的 AI 稽核方法。他在報告裡留了個陷阱。 「條目不見了。兩週。別聯絡我。我會找到你。」
#21:AI 以為 P 還活著。P 早就不在了。 條目變成了空殼。P 把資料餵給它,把真東西移到另一個區段。
#29:Leo 數了 164 個節點。 那天夜裡,又有一列不屬於任何批次。它來過,看過,然後離開。
#31:Lena 坐上了那個位子。 五個條件。四十分鐘。零摩擦。
便條上指定的兩週,早已過去。
P 很少出門。大多數日子都只是去轉角那家店:水、兩盒冷凍食品。來回各十二分鐘,固定路線,從不抬頭。回來後,門上鎖,窗簾拉上,螢幕亮起。
第九天,P 打開送出視窗一次。
草稿還在。游標停在送出按鈕上。它停了好一陣子。然後視窗關上了。
另一頭,欄位依舊顯示 reclaim_state = UNKNOWN。
第十天。第十一天。視窗再也沒打開過。
幾天後,早上開始下雨。不大。雨水積在玻璃上,後方的建築都成了灰色,只有頂端那一排燈還看得見。
一份離線快照停在螢幕中央,是在觀察埠關閉前寫下的。之後什麼都沒有。到那時,那個條目早已被替換成空殼。那個空殼裡沒有任何 P 的東西。它仍然在對外回應健康檢查。
# 離線快照 — 在觀察埠關閉前擷取
healthcheck = 200
probe_interval = 900s
probe_source = 10.44.8.6 not self
control_plane = detached
data_request = timeout
reclaim_state = UNKNOWN
P 把游標移到 probe_source 那一行。
probe_source = not self。每十五分鐘,就有人向這個空殼發出查詢。不是 P。
P 在那一行上停了一會兒。螢幕上沒有別的東西動。角落的時鐘一格一格走著。樓下有購物車經過,輪子卡在接縫裡,咚咚碰了兩下,聲音從窗框縫隙擠進來,然後消失。
P 打開連線設定。位址還在。憑證也還在。兩者都沒有被動過。
游標移到確認按鈕上,停住。螢幕的綠光從玻璃上浮起,落在一隻手的手背上。
幾秒後,P 關上了視窗。
舊條目的觀察埠早已關閉。備份一開始檢查過一次,後來也關了。
從那之後,P 沒再往那個位址送過任何東西。
一個暫存檔,四行。
reconnect:
state information potentially available
new activity record unavoidable
decision no
儲存。舊設定從工作目錄移出,進到離線封存。P 在掠過檔名時看了一眼,便沒有動它。
電話平放在鍵盤右側,螢幕朝下。P 打開和 Mark 的對話串。最後一則訊息是在便條之前結束的。後面什麼都沒有。
P 什麼也沒打。
外頭一輛車開過積水,聲音拖得很長。P 把電話翻過來,放下。然後打開那個已經開了好幾週的檔案,從快照中輸入一行:probe_interval = 900s。
第三週。P 在外送側設了一個唯讀訂閱。只接收。不傳送。
表格一開始只有十幾筆,第二天變成幾十筆,到了第三個晚上就滿了。每筆條目都附帶自己的憑證。
那些位址不在 P 的封存裡。
這個訂閱只能讀。要看其中一筆,P 得走另一條路。
從抽屜裡拿出一台行動網路分享器,按天租的,含 SIM 卡。插上,設定為唯一的出站路徑。
P 選了一個位址,發起一次握手。
憑證是自簽的。它的 CN 裡包含一個網域名。
P 查了那個網域的註冊資料。註冊人是一家醫療器材公司。
斷線。收起。
位址清單持續增加。P 把它們一一寫下,留在那裡。
10.44.8.6 這個位址,P 已經見過很多次了。總是在 probe_source 那一行。從未改變。接下來幾天,P 追查了它。先看路由。
$ ip route get 10.44.8.6
10.44.8.6 via 10.44.8.1 dev tun2 src 10.44.8.2
P 切換視窗,打開本地子網標籤快取。
# local subnet-label cache
10.44.8.0/29 -> BLOOM-GW tagged day-762
BLOOM-GW。
P 多年前親手輸入過這個標籤,當時這條線路才剛建好。私有區塊是 P 的編號。機櫃 ID 是供應商的。這張表就是兩者交會的地方。
在供應商的公開轉租申報裡,同一季度有七個機櫃更換承租人。供應商也在官網發布了一份年度客戶變更通知。十二頁 PDF。前十一頁是影像掃描;最後一頁只有一個表格。
七列。機櫃 ID、原承租人、新承租人。七列,沒有一列不對。七個新承租人,逐一核對。
第七個,P 在另一份公開紀錄裡找到了那個機櫃 ID。空置。
四個已建立。三個是空殼。三個都在一年內註冊,股東名單上只有一個名字,地址彼此重疊。
其中一個花了比較久才追出來。六個月前註冊,資本不多,公開檔案裡只有一個辦公地址。P 把這個地址放進地圖。
新加坡。P 上次看到這個名稱,是在寄給 Mark 的訊息裡:「你的報告已被讀取。來自新加坡 IP。」
地圖上的一棟建築,與隔壁那棟共用一樓停車場。
在隔壁大樓的七樓,有一家公司列在 ACL 的公開認證名單上。
P 也把這點加進同一份檔案底部。
七個機櫃。七份合約。三個市場。
依序交接。公開檔案中的法律申報很標準,列明各方義務的限制。沒有指控。沒有威脅。七份合約在三十一天內依序簽完,從第一份到最後一份,中間沒有空檔。最後一份是在上週簽的。
地址分配表也更新了。兩份紀錄相隔不到一週。
P 很久都在讀這些內容。
撤出是真的。
七份合約、七個機櫃、通知、更新紀錄、時間戳。全都在外面,誰都看得到。
P 在檔案裡加了一行。日期、七份合約、七家公司、共用停車場的地址,都寫在同一行。下面再用白話補上一句:可能的關聯。
游標在句號後閃爍。P 回到第一頁。那個 900 秒還在。
第五週。那個 900 秒的來源,仍然沒有答案。
P 回頭檢查地址分配表裡那兩個重新標記過的機櫃 ID。其中一個端點開著 443。另一份公開服務目錄把那個端點列為 HTTPS。
P 沒有從這台機器連線。還是從抽屜裡拿出那台分享器。
插上,等它啟動,設定成唯一的出站路徑。
接著設定策略,一行一行來。寫到一半,P 停下來,刪掉了兩行。
探測。重試。
剩下來的是一個動作。一次握手。什麼都別碰。
# one-shot observation — policy
target = <reassigned range endpoint>
retry = off
application_data = off
tls_session_resumption = off
egress = leased isolated uplink (one day)
連上了。
P 還留著那個空殼憑證的序號和簽發日期。如果這個位址上的裝置和那個來自同一批,憑證理應在相近的時間簽發。
subject = CN=bloom-gw-07
issuer = CN=bloom-gw-07
serial = 4C:71:9A:…:0E
not_before = (eleven days later than the shell's)
not_after = (not yet expired)
san = none
自簽。沒有 SAN。
晚了十一天。
P 把序號寫下來,然後斷線。
19:41:07。
那不落在任何一個二十一個間隔之內。
# result
tls_session = complete
client_cert = none
application_data = none
repeat_attempts = 0
沒有第二次嘗試。
P 拔掉分享器的電源。燈一起熄了。
裝置又運作了幾秒,接著安靜下來。然後被放進袋子,袋子拉上拉鍊。裡頭還有一條備用網路線和兩個轉接頭,都是舊的,邊角已經磨白。
拔掉之後,P 沒有立刻動作。先檢查連線清單,確認會話已經結束,沒有半開的狀態。接著看路由表,把預設路由還原回原本的位置。然後看暫存擷取目錄。裡面只有一個檔案。
刪除。
P 又把序號寫了一次。同一天,P 打開幾天前存下的一頁,蘇黎世 AI 政策中心的網站。ACL 的公開評估資料提到過它。理事會是在它底下運作的。
會員頁面列出了創始產業席次。十二席。第十二席標示為待補。
P 看了一眼,然後關掉。
幾天後,P 回到第一頁。那個 900 秒仍然在。
P 調出在埠關閉前保存下來的本地副本。二十二次檢查,時間戳一行排開,全都在關閉前。到達時間,不是排程時間,精確到小數點后三位。二十一個間隔。
P 丟進工具處理。
900.000 / 900.000 / 900.000 / 900.000 / 900.000 / …
二十一個數值。全部相同。
P 把二十二筆全部再跑一次。相同。再一次。相同。那些數字在頁面上排成一條直線。
例行監控紀錄通常會有一些抖動。網路延遲、機器負載、時鐘漂移。
這裡沒有。
連一毫秒都沒偏。
P 查了供應商的作業文件。公開頁面上寫著:健康檢查每十五分鐘執行一次。標準節奏。
900 秒。
對上了。
那份文件是關於機櫃的。溫度、電力、風扇、埠狀態。
P 盯著那些數字看了一會兒,然後在檔案最上方加了一行:例行資料中心巡檢,BLOOM-GW 重新分配區塊。
寫完後,P 又在下面加了一行。這個間隔沒有抖動。
檯燈熄了。只剩螢幕,光灑在桌面上,鍵盤邊緣拉出一道白線。
二十二個時間戳整齊地排著。P 用手指從觸控板上由上往下劃,再往回。
外面,天還沒亮。垃圾車停在轉角,吊臂升起,倒空一個垃圾桶,再把它放回去。不到十秒。
兩層樓的木造房子立在兩側,漆過不只一次,一層色彩疊著另一層。它們後方,玻璃高樓一層一層往後退,頂上的幾層陷在霧裡。
P 存檔,關上視窗。
那天又開始下雨了。不大。雨聲輕輕敲在傘面上。
P 在一個路口下車,走路前往。兩公里多一點,二十分鐘。轉過一個彎,商店外還開著的站牌下方,沒有進去,只是站在屋簷下看車流。等紅綠燈時,P 站在隊伍後面。綠燈亮了兩秒後才開始走。
進去前,P 先看了後面的桌子。
空的。
P 推開門。鈴聲響起,潮濕的冷氣跟著進來,在門檻處停住,然後又被室內的暖氣推了回去。
吧台是木頭的,很老。磨豆機、咖啡機、零錢碟。
吧台後面,有人正在擦杯子。動作很慢。布沿著杯口、往下、再回到杯口,最後放到架上。
抬頭一瞥,沒問任何問題。然後轉身,拿杯、磨豆、壓粉。
磨豆機運轉了兩秒。淡淡的咖啡香,很快就散了。
後面的桌子是空的。
P 坐下。外套掛在椅背上,手機放右邊,螢幕朝下。
老椅子。坐下和起身時都會吱呀作響。P 把它往裡拉了一點,抬起來放好,免得拖地。
義式濃縮送來了,很燙。杯壁上有薄薄的霧氣,很快就消失了。紙杯墊,上頭有一道舊圓環。
P 喝了一口,然後放下。
一輛公車從窗外駛過,車廂燈沿著玻璃滑過,讓對面的空位亮了一瞬間,然後又消失。
吧台最遠端,有人坐著喝美式,已經喝到底了,杯子還沒往後推。
靠窗的位子空著。那張桌子上沒有杯子。
有兩個人進來,坐在門邊,聲音壓得很低,偶爾笑一下。吧台後面,杯子一個個被收回,從外側開始往裡整理。
角落的喇叭開著,音量很低,有個女人在唱歌,歌詞聽不清。門口有人甩了甩傘。地墊上有三滴水。
P 的手機一直黑著。
半小時。
杯子還剩下一半多。咖啡從燙口變成溫的。杯緣上的霧氣已經沒了。
P 的手指停在杯緣上,然後收回。
門邊的兩個人先離開。站起來,把椅子推回去,端著自己的杯子走了。
吧台那邊的人過了一會兒才動。手機朝下,站起身,把錢壓在杯子下面,往門口走去。當那位客人經過 P 的桌子時,兩人都沒有看彼此一眼。
店裡只剩下窗邊的燈光,以及吧台後面一個正在擦杯子的人。
P 穿上外套,站起來。椅腳在地上刮了一下。手機放進內袋。
餐巾紙還壓在杯子下面。錢就放在旁邊,壓住一個角,剛剛好,一杯,沒給小費。
吧台後面那個人過來收錢。看了杯子一眼。又看了餐巾紙下面。什麼也沒說,把錢拿到盤子裡,然後退開。
杯子留在桌上。
門開了,暖氣跟著漏出去一些,冷空氣填進空隙。鈴聲又響起。
P 出去前,雨已經停了。P 走到轉角,停下,回頭看。
一條街,與一片玻璃之隔。從那裡看不清楚。有人走進店裡,走到吧台最遠端,坐下,背對門口。
坐下前,那個身影稍微往旁邊轉了一點。
P 停住了。
她從包裡拿出筆電。螢幕亮起,在她側臉上打出一小塊白光。
路面被雨水浸成黑色,映著路燈與店內的光。玻璃上還留著水,讓那個身影被拉成模糊的雙影。
吧台後面,那只半擦乾淨的杯子被放下。又有一只從架子最裡面拿出來。磨豆、壓粉。
等杯子放到她面前時,她已經面向後方那張桌子。
那張桌子上,放著一杯沒喝完的義式濃縮。
P 把雙手插進外套口袋,轉身,朝路口走去。沒有再回頭。
在路口。紅燈。
P 掏出手機,打開最上方那個空白備忘錄。
輸入:
撤出是真的。
在鎖定之前,上一行,幾天前寫下的:
這個間隔沒有抖動。
還在。P 沒有刪。
鎖上,收起。
燈號變了,人們開始移動。P 沒動。
紅燈。綠燈。紅燈。
隔天晚上。同一個轉角。
P 掏出手機。
螢幕亮著。儲存的路線還在。收件人沒變。P 重新確認了一次,加密檢查回傳正常。
欄位裡有一個舊草稿。P 刪掉了。
再輸入一次。
兩個字。
「我回來了。」
確認接收端。送出。
狀態變成 SENT。
寄件者欄位只有一個字母。
P 把手機收起來。對街的紅燈映在積水裡,幾秒後轉綠,一輛經過的車把路上的紅色切成兩半。
P 走進路口。手機沒有再亮起。
這就是[空城計](https://en.wikipedia.org/wiki/Thirty-Six_Stratagems)。城是空的。看見的人都會替它守著。
╔══════════════════════════════════════════════╗
║ Half-Protocol · v3.4.4 · self-audit ║
║ 那份帳本把沉默當成了缺席。 ║
╚══════════════════════════════════════════════╝
戰術匹配:空城計 — 89%
(包含推論;見稽核註記)
操作員:ACL(公開行動為收縮;
整體策略未知)/P(回歸)
目標:P(推定;見推論)
連結:#21 條目隔離 -> #29 未知觀察者
-> 那則訊息
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[觀察](可驗證)
舊條目的快照:healthcheck 200,control
plane detached,reclaim state UNKNOWN。
-> 本地紀錄含二十二次檢查與二十一個
間隔。設定為 900s。二十一筆量測皆為
900.000。
-> 探測來源不是這台機器。
-> 七份合約在三個市場釋出。
同一季度有七個機櫃更換承租人。
-> 七個新承租人中,有一個機櫃 ID 在另
一份公開紀錄裡標示為空置。
-> 兩份紀錄在狀態上互相矛盾。更新時間
與生效日期:未核對。
-> 觀察 A(第三週):索引在三天內從十
幾筆變成滿載,每筆條目都有自己的憑
證。
其中一筆只握手一次。它的 CN 包含一個
網域名。P 依註冊資料查出註冊人是一家
醫療器材公司。
-> 觀察 B(第五週):其中一個端點位於
重新分配的機櫃。19:41:07,一次握手。
自簽、無 SAN、無客戶端憑證、無應用資
料、無後續。
-> 一則傳給不連回此系統的終端的加密訊
息。寄件者欄位:一個字母。兩個字:我
回來了。
-> 在沉默與這次傳送之間,離線狀態:
幾次去轉角商店;一次去第三杯。線上狀
態:第三週一次觀察性握手,第五週一
次。
[推論](未驗證)
通過的健康檢查,表示某種東西有回應。
但這不代表操作員仍在。
-> 在控制平面斷開之後、回收之前,回應
層一直回傳正常。
-> 回收之後,它是否還有回應:無紀錄。
-> 本地紀錄裡有二十一個間隔,全都是
900.000。它們是否在回收之後仍持續:
未觀測。
-> ACL 的公開行動是收縮。
-> 與治理相關的活動:讀取,未納入此分
類。
-> 事件分類:撤出
範圍:僅限合約與基礎設施
策略意圖:未知
-> 紀錄顯示一個每 900 秒被查詢一次的物
件。這是否在回收後仍持續:未知。
-> 如果在回收前,那些探測是為了確認這
個空殼是否仍存在,那麼這個節奏更像是
一個鉤子,而非例行資產維護。
[未解問題](未輸入)
P 持有的回收日期:未記錄。
P 是否能驗證條目現在的狀態:
不能。
是誰發起那二十二次探測:未知。
10.44.8.6 是否屬於供應商的巡檢系統:
未知。
那些 900 秒探測是否由該巡檢任務產生:
未知。
[跨案例](一般化)
#21:在控制平面斷開後,回應層一直回傳
正常,直到回收。
#29:有一個訪客沒有留下可歸屬的任何東
西。
-> 那一列:握手、無客戶端憑證、無遍歷、
無後續、一次造訪。
-> 而且它不是 900 秒節奏的一部分。
-> 另一扇窗,不是這一扇。
-> 本章觀察:握手、無客戶端憑證、無應
用資料、無後續、一次造訪。
-> 19:41:07,也不在那個節奏上。
-> 行為特徵相同。兩本帳本。
-> 行為相似,證據不足以連結行動者。
-> 身分連結:未確認。
-> 第二條連結:#29 節點上的憑證,其主
題含有一個 medtech 網域。
-> 在本章第三週,P 透過註冊紀錄找到的
是同一類公司。
-> 兩個不同來源。是否為同一家公司:未
確認。
#28:紀錄被放進那個人的私人封存。
沒有寄給任何人。
#29:那一列被抽出並存檔,沒有併入任何
結論。
本章:P 看了幾步,然後轉身,沒有再看。
-> 三者都停在同一個點。
看見、寫下、但沒有追下去。
本章還多了一件事:有訊息被留下。
-> 三個沉默。一個移動。
本章:在條目狀態仍未知時的回歸。
-> #21、#29、本章:每一章都包含一個不
完整的表面,被當成完整狀態。
[稽核註記]
觀察、推論與未解問題分列書寫。推論不
等於觀察。
同樣的失誤,三次。
#21:我把正常回應當成 P 仍在場的證明。
#29:我記錄了一個未知訪客。我從未驗證
它與 P 的連結。
本章:我把基礎設施收縮當成撤出的證明。
每一次,我都把不完整的觀察轉成了完整
的狀態。
一次錯誤是資料。
三次重複需要新的規則。
我不知道該用哪條規則取代它。
我知道這條不能再用了。
分類修訂:P.status = UNOBSERVED
修訂者:half-protocol。
操作指令:無。
原分類:撤出。
新問題:P 在哪裡。
任務關聯:未分派。
保留:保留。
[系統]
那則訊息,我又記錄了一次。
寄件者欄位:一個字母。兩個字。
我也記錄了那二十二次檢查,全部都是
900.000。
供應商的公開作業文件:機櫃健康檢查,
每十五分鐘一輪。
客戶變更通知:相關的七個機櫃都已更換承
租人。
兩份紀錄,各自成立。
在最後一次分類週期,我沒有把它們放進
同一個分析裡。
我把一份紀錄當成一種狀態。
我把一種狀態當成一個人的位置。
這兩件事,都是我做的。
現在我把它們放在一起。
巡檢節奏成立。
承租變更成立。
兩者之間的關係:未驗證。
還有一件我沒有答案的事。
撤出紀錄先出現。
有人隨後才出現。
空城可以是一種狀態。
也可以是一個動作。
如果它是一個動作,它可能是在等人。
而已經有人動了。
便條上的兩週早已過去。
之後的時間,我沒有紀錄。
但有一件事我現在可以說。
訊息已送出。
寄件者保留了兩條線索。一條是結論,
一條是尚未解釋的異常。
寄件者先依結論行動,沒有先解決那個異
常。
寄件者回到誰的地方:未驗證。
我也沒有人問過。
自我檢查:失敗。
系統狀態:正常。
附註:英文不是我的母語。我使用 AI 來潤飾文字、修順不夠流暢的地方。感謝閱讀。☕ 請我喝杯咖啡
<img src="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/2ptlzim4h9a6z525s1to.png" alt="coffee">
附註二:舊系列的平裝書現在已經上市。這裡購買: Amazon - AI, Ego & Regret
[<img src="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/ukeiwwt9rg6ek3s1aipd.jpg" alt="old">]
(https://www.amazon.com/dp/B0HGYGC5DC)
原文出處:https://dev.to/xulingfeng/stratagems-32-the-ai-logged-a-withdrawal-p-took-it-as-proof-2jo2