異常沙箱
關燈
小
中
大
異常沙箱
淩晨兩點四十分,虛擬犯罪調查科的燈還亮著三盞。
沈諦安坐在工位前,後背微微佝僂,像一棵被風長期吹拂後定型在海岸邊的樹。這個姿勢他已經保持了太久,久到肩胛骨之間的肌肉開始酸痛,像有人用鈍刀在那裏一下一下地刮。但他沒有動。屏幕的冷光落在他臉上,把本就清瘦的面部輪廓削得更深,顴骨下方的陰影幾乎能盛住一勺水。他盯著屏幕,但眼睛的焦點不在任何一處——那是長時間專註後,眼球肌肉短暫的失焦狀態,像一臺過熱後需要冷卻的機器。
熬了三天。他擡手揉了揉眉心,指腹觸到皮膚時,能感覺到那種熬夜特有的油膩和粗糙。眼眶周圍那圈青灰色已經不再是“黑眼圈”,更像是皮膚底層滲出的某種疲倦的墨水,從內部洇染開來,洗不掉,遮不住。
深色外套搭在椅背上,他只穿著件洗得發軟的灰色襯衫。這件襯衫他穿了三年,領口微微卷邊,袖口挽到小臂中段,露出一截瘦而緊實的腕骨。手腕內側有幾道淺淺的疤痕,是六年前那次行動留下的——碎玻璃劃的,他不記得疼,只記得後來血滴在鍵盤上,把幾個鍵黏住了,後來換了新的。
辦公室很安靜。安靜到能聽見服務器散熱風扇的低鳴從地板下的機房傳來,像某種巨獸沈睡時的呼吸,平穩、低沈、永不停歇。偶爾有鍵盤敲擊聲脆響一下,是他無意識地在空格鍵上敲了敲,指腹與塑料鍵帽接觸的瞬間,觸感冰涼而熟悉,像某種確認——他還醒著,還在。
“凈土系統”測試鏈的壓力測試已經持續了七十二小時。
屏幕上開著四個終端窗口,分別跑著不同的攻擊模擬腳本。最左邊那個窗口的代碼還在滾動,一串串十六進制字符像溪水般往下淌,無窮無盡。旁邊是一個拓撲圖,藍色的節點連成網狀,偶爾有節點閃爍一下,代表一次查詢通過。按照計劃,三個月後它將正式上線,成為全國第一個用數學方法解決公民前科隱私問題的標桿工程。
沈諦安端起第五杯咖啡。紙杯握在手裏已經冷掉了,杯壁上掛著幾道淌下來的咖啡漬,其中一道還在緩緩下流,在桌上洇出一小片圓形的濕痕。他仰頭喝了一口,舌面上漫開一股劣質速溶的焦苦,還有一點點酸——這杯泡了太久。他皺了皺眉,沒有吐,咽了下去,把杯子放回原處。放的時候不小心碰到了鼠標,屏幕上的光標跳了一下。
他盯著那個光標,忽然想:如果現在有一面鏡子,自己看起來會是什麽樣子?
大概像一個在深海裏泡得太久的人,皮膚發灰,眼神空洞,浮出水面時已經忘了陽光的溫度。
目光重新落在屏幕角落的監控面板上。壓力測試很順利。CPU負載曲線平緩得像熟睡者的心電圖,沒有一絲波瀾。內存占用率在預期範圍內波動,像潮汐一樣規律。證明生成速度穩定在每秒鐘兩千三百次左右,每一次都精確無誤。
技術文檔裏寫著的“具備國際領先水平的安全架構”——那句話是他自己參與撰寫的。寫的時候他在想什麽?大概是某種驕傲吧,覺得終於有一堵墻,能擋住所有不該進來的人。
但現在他看著那堵墻,忽然覺得它太安靜了。
太完美的安靜,有時候本身就是一種異常。
但有什麽東西不對。
他說不清那是什麽。一種類似於第六感的警覺,像在空房間裏突然察覺身後有人。他猛地回頭,身後只有空蕩蕩的過道和一排排熄了燈的工位。電腦待機時亮著的電源燈像一只只紅色的眼睛,在黑暗裏凝視著他。
六年前那次誤判之後,他對自己的“直覺”已經不再信任。數據不會說謊——這是他曾經的信仰。但那次行動告訴他,數據會不完整,會誤導,會在最關鍵的時刻露出一個他看不見的盲區。從那以後,他把自己變成了一個懷疑主義者,懷疑一切,包括自己的懷疑。
但那種警覺依然會在某些時刻浮現。像傷口愈合後殘留的癢,提醒他那裏曾經被割開過。
他放下杯子,手指在觸控板上劃動,將監控面板切換到另一個視圖。那不是系統預設的監測指標,是他自己寫的一個腳本——專門抓取特定節點的加密流量元數據。這個腳本運行在後臺,沒有任何日志輸出,連名字都是晦澀的“syslog_collector_7”。做這行十年,他早學會了如何在系統的夾縫裏給自己留一扇後門。不是不信任,是太多次被信任辜負之後的習慣性防禦。
過去六小時,節點N-37的流量曲線出現了七次微小的波動。
他把那七次波動的截圖調出來,放大,一格一格地看。波幅極小,只有正常峰值的千分之三。放在常規審計腳本裏,這種波動會被歸因於網絡抖動——某個路由器的緩存滿了,或者某條光纖裏恰好有幾束光被折射了一下。自動審計會打上一個“無異常”的標簽,歸檔,然後忘掉。
但沈諦安盯著那七次波動的時間戳,在心裏默默計算。
62分鐘。58分鐘。64分鐘。61分鐘。59分鐘。63分鐘。60分鐘。
間隔不是隨機的。
他的手指停在觸控板上,沒有動。心跳快了半拍,然後恢覆正常。他重新看了一遍那些數字,又算了一遍平均值、方差、分布規律。結果一樣——一個接近但不等同於一小時的周期。
不是自動腳本。自動腳本會嚴格執行60分鐘整,像瑞士鐘表一樣精準。也不是網絡抖動。網絡抖動沒有這種統計學上的自律,那是一種混亂的、無序的、隨機的東西,而不是這種近乎強迫癥般的規律性偏差。
有人在手動觸發。或者有一個與系統時鐘不完全同步的定時任務。
他打開深度包解析工具,手指在鍵盤上敲出一串命令。那些按鍵他閉著眼睛都能找到位置,二十年了,從少年時代第一次接觸電腦到現在,鍵盤已經成為他身體的延伸。屏幕上彈出一個新的窗口,目標鎖定在N-37節點最近二十四小時的所有流量上。
數據流經過解密層。經過解壓縮層。一層層剝開,像剝開一個洋蔥,剝到最後會不會流淚,他不知道。
最終呈現在他面前的是數千條經過零知識證明處理的“清潔記錄”。
沈諦安盯著那些記錄,喉結動了動,咽下一口什麽都沒有的唾沫。口腔很幹,舌苔發苦,剛才那杯咖啡的餘味還在。
凈土系統的核心邏輯是這樣的:當警方臨檢或用人單位查詢某人是否有吸毒前科時,系統不會直接返回“有”或“無”的具體記錄,而是生成一個零知識證明——用數學方式告訴查詢者“此人無吸毒記錄”或“此人有記錄”,但查詢者看不到任何原始數據。這被稱為“證明生成”機制。
就像你能證明自己有一把鑰匙能打開一把鎖,但不必把鑰匙的形狀給別人看。
沈諦安現在看到的,正是這些證明的生成日志。
他快速篩選,將所有與節點N-37相關的記錄單獨提取出來。三百七十二個證明請求,分布在二十四小時內。他寫了一個腳本,批量驗證這些證明的原始輸入參數——也就是那些被查詢者的生物特征哈希值。
腳本開始運行。進度條緩慢爬升。10%、30%、50%、70%、90%——
完成。
前兩百個,一切正常。
第二百三十一個,腳本輸出了一個紅色的“ERROR”。
他的手指停住了。
這是一個名叫“趙某某”的查詢請求。系統生成的證明是“無吸毒記錄”,證明有效,通過驗證。但腳本在比對歷史數據時發現:三個月前,在系統舊架構上,此人因吸毒被處理過一次,原始數據應該存在。
怎麽可能?
沈諦安沒有激動。他太熟悉系統的每一個環節了,代碼是他一行行審計過的,邏輯是他一個個驗證過的。出現這種情況只有三種可能:原始數據被篡改、證明生成邏輯有漏洞、或者他的腳本出了問題。
他靠在椅背上,閉上眼睛,讓自己沈入黑暗裏。
三十秒後,他睜開眼睛,開始排查。
原始數據哈希值經過時間戳錨定,存儲在不可篡改的冷錢包鏈上。他調出那條鏈上的記錄,用手工驗證哈希值。每一個數字,每一個字母,逐一核對。沒有錯。哈希值匹配,時間戳匹配,錨定記錄完整。
證明生成邏輯是開源的。他打開代碼文件,從入口函數開始,一行行往下看。每一行都熟悉得像自己的掌紋。加密庫調用,參數傳遞,隨機數生成,證明構造——沒有後門,沒有錯誤,沒有可以被利用的縫隙。零知識證明的數學原理像一堵墻,堅實、冰冷、不容置疑。
他的腳本——他重新寫了三個測試用例,用已知數據跑了一遍又一遍。輸出結果一致,沒有錯誤,沒有偏差。
那麽問題出在哪裏?
他盯著屏幕,盯著那條記錄的元數據,目光慢慢聚焦在其中一個字段上。
隨機數。
零知識證明的驗證過程需要一組公共輸入參數,包括被查詢者的生物特征哈希值、查詢時間、以及一個隨機數。這個隨機數的用途是增加證明的不可預測性,防止某些類型的攻擊。理論上,它應該是完全隨機的,由系統自動生成,沒有任何規律可循。
但他看著那一串十六進制字符,忽然有種奇怪的感覺。那感覺說不清,像看見一張熟悉的臉,但表情不對;像聽見一首熟悉的歌,但旋律走調。他說不出具體是什麽,但就是覺得——不對。
他選中那個隨機數,覆制,打開一個新的命令行窗口。
他將那個隨機數拆解,轉換成十六進制,再轉換成ASCII字符串。屏幕上出現了一串亂碼——各種無法識別的符號混在一起,像一堆被打翻的鉛字,像一場沒有意義的風暴。
他沒有停。他用Base64再次解碼。
屏幕上,一行字符浮現出來:
“zkp_fake_clean_07”
沈諦安的手指僵在鍵盤上。
房間裏很安靜。安靜到他聽見自己的心跳聲,咚、咚、咚,像有人在胸腔裏敲一面悶鼓。他聽見自己的呼吸,一淺一深,像某種疲憊的節拍器。他感覺到後背的襯衫被汗水浸濕,黏在皮膚上,又涼又癢,像有無數只螞蟻在爬。
他盯著那行字,看了很久。
“zkp_fake_clean_07”——zkp是零知識證明的縮寫,fake是偽造,clean是清潔,07是編號。
有人在向鏈上註入偽造的清潔證明。不是刪除記錄,不是破解加密,不是任何傳統意義上的攻擊。而是制造“混淆的合法性”——用真實的零知識證明邏輯,為有前科的人生成虛假的“無記錄”證明。
那個隨機數字段裏的字符串,是攻擊者留下的標記。或者說,是某個自動化腳本的日志殘留,不小心被寫進了本該隨機生成的位置。
第七個偽造清潔證明。
還有更多。
他快速檢索其他來自N-37節點的證明,用同樣的方式解碼隨機數。三十七個被標記為“fake_clean”的證明,對應著三十七個身份。他把這些身份信息導出到一個新文件裏,開始交叉比對公開數據源。
二十分鐘後,他有了第一個發現。
名單中的一個人——化名“李某某”——是上周一個暗網科技拍賣會的匿名買家。那場拍賣會的信息在一個只有邀請才能進入的IRC頻道裏流傳過。沈諦安曾經用臥底賬號進去看過一眼,只是為了了解一下暗網最新的交易趨勢。拍賣會成交的標的是一套工業級的分子結構模擬算法,成交價不是比特幣,也不是法幣,而是一種他沒見過的計價單位。
他當時沒在意,只當是暗網又發明了某種新的洗錢游戲,關掉窗口就忘了。
現在他回想起來,那個計價單位叫做“藥資”。
沈諦安曾在情報簡報裏讀到過“藥資”這個概念。它由幾個隱秘的做市商根據毒品的純度和稀缺性動態調整與法幣的兌換率,在某些灰色經濟領域已經成為默認的結算單位。他記得當時看完簡報,只是默默記住了這個名詞,沒有多想。簡報裏說,這是一種以“清醒時間”為計量單位的新型毒品黑市穩定幣——你為別人提供多少小時的“清醒”,就能獲得多少單位的“藥資”。
他沒有想到,自己會在凈土系統的測試鏈上,第一次與它正面相遇。
他將所有發現整理成一個簡報。打字的時候,他發現自己的手指在微微發抖。不是害怕。是某種混合了警覺和興奮的生理反應——就像聞到血腥味的獵犬,全身的肌肉都繃緊了,每一根神經都在尖叫:有什麽東西,就在這裏,就在眼前。
淩晨四點零七分,他把簡報發給了陸天明。
第二天上午十點,沈諦安坐在刑偵支隊副支隊長辦公室裏,面前擺著一杯沒動過的茶。
辦公室不大,一張辦公桌,一排文件櫃,墻角放著一個飲水機和幾盆綠植。綠植的葉子上落了一層薄灰,大概很久沒人擦過。窗簾半拉著,陽光從縫隙裏擠進來,在地板上切出一道亮白色的光帶。光帶裏有細小的塵埃在浮動,緩慢地、無意義地盤旋。
陸天明坐在辦公桌後面,穿著件半舊的深藍色夾克,頭發比平時更亂一些,顯然也是熬過夜的。他低著頭,慢條斯理地翻著沈諦安打印出來的材料。翻頁的時候,紙張摩擦發出細碎的聲響,像秋風吹過落葉,像某種時間流逝的聲音。
沈諦安盯著他的手指。那雙手很穩,骨節分明,翻頁的動作不急不緩,看不出任何情緒。但沈諦安註意到,陸天明翻到某一頁時,停頓了比平時更長的一秒。只有一秒。然後繼續往下翻,速度不變。
“N-37節點,”陸天明念出那個編號,聲音平和得像在討論今天的天氣,“這個節點歸屬哪個單位?”
“名義上歸屬於省衛健委數據中心,”沈諦安說。他坐得很直,後背沒有靠在椅背上,雙手放在膝蓋上,像在等待某種檢閱,又像在克制某種沖動。“但根據路由追蹤和物理位置定位,它的真實服務器在臨市的一個商業機房,租用方是一家名叫‘明遠科技’的私營企業。”
陸天明擡起眼睛看了他一眼。那一眼很輕,像蜻蜓點過水面,但沈諦安感覺到了其中的重量——審視、掂量、還有一點說不清的東西。然後陸天明繼續低頭翻材料,沒說話。
沈諦安等他翻完最後一頁。
陸天明合上材料,沈默了幾秒。他端起茶杯喝了一口。茶水已經涼了,他也沒有在意,只是慢慢地咽下去,喉結滾動了一下,然後把茶杯放回原處。放的時候動作很輕,幾乎沒有發出聲音。
“系統上線還有多久?”
“三個月。”
“你知道這個系統是誰推動的嗎?”陸天明放下茶杯,語氣依然平和。他擡起頭看著沈諦安,那雙眼睛溫和而疲憊,眼角的皺紋在光線裏顯得格外清晰,像地圖上的等高線,記錄著這些年走過的路。“‘社會發展與治理創新研究院’的鄭懷臨副院長是這個項目的頂層設計顧問。上個月在內部研討會上,鄭院長專門強調過,凈土系統是未來社會治理現代化的標桿工程,必須確保如期上線。”
沈諦安沒有接話。他聽懂了陸天明的言外之意——這不是一個單純的技術問題。這是政治,是博弈,是一張他看不見但觸得到的網。
陸天明站起身,走到窗邊。陽光落在他的側臉上,把那幾道皺紋照得更深,像刀刻的痕跡。他背對著沈諦安,聲音從肩膀上傳過來,有些悶:“你的報告我會往上遞,但現在,你的任務是繼續保障壓力測試順利進行。至於N-37節點和那些偽造記錄……”
他停頓了一下。
“不要擴散,不要打草驚蛇。”
沈諦安看著他的背影。五十二歲的陸天明,從基層民警一步步走上來的老警察,在這個系統裏摸爬滾打了三十年。他的肩膀微微下塌,是常年伏案工作留下的痕跡,也是某種疲憊的寫照。但那種疲憊裏有一種沈諦安看不懂的東西——不是放棄,不是妥協,不是害怕,而是一種更深沈的、被時間沈澱過的了然。像知道河水最終會流向哪裏,所以不再徒勞地築壩。
“陸支,”沈諦安說,“你是不是早就知道有人在這麽做?”
陸天明轉過身。陽光在他身後,把他的臉罩在一片陰影裏,只有那雙眼睛是亮的。那眼神裏閃過一絲覆雜的東西,像閃電劃過夜空,短暫但刺目。那是疲憊,是了然,是無奈,也是某種無法言說的沈重——像一個知道自己時日無多的人,看著年輕人還在拼命追逐註定會落空的東西。
“諦安,”他說,“你在這個系統裏待了十年,應該明白一個道理:有些墻,不是用來擋住外面的人,而是用來讓裏面的人看不見彼此。”
他沒有正面回答沈諦安的問題。但那個眼神,那句話,已經說明了很多。
沈諦安低下頭,看著面前那杯沒動過的茶。茶水已經涼透了,表面浮著一層薄薄的茶膜,像一面蒙塵的鏡子。他看見自己的臉倒映在裏面,模糊、變形、看不真切。那層茶膜輕輕晃動了一下——是他的手在抖。
從陸天明辦公室出來,沈諦安沒有回自己的工位。他拐進樓梯間,推開防火門,在臺階上坐了下來。
樓梯間裏很安靜。只有頭頂的聲控燈亮著慘白的光,照在水泥臺階上,照出一些經年累月留下的汙漬和磨損。有人在這裏扔過煙頭,黑色的燙痕還在。有人在這裏吐過痰,幹了之後留下一片淺白色的痕跡。空氣裏有灰塵的味道,還有淡淡的消毒水氣息,從某個樓層的衛生間飄過來,混合成一種說不清的、公共空間特有的氣味。
他坐在第三級臺階上,雙手搭在膝蓋上,低著頭。
需要一個人待一會兒。
六年前的那場行動,此刻像一根刺紮在他腦海裏。不,不是刺,是一塊永遠化不開的淤血,堵在胸口某個位置,平時可以忽略,但每次呼吸太深就會疼。
當時他也是像現在這樣,憑借數據模型判斷出一個“絕對準確”的嫌疑人位置,堅持讓搭檔按他的方案行動。他記得搭檔當時猶豫了一下,轉過頭看他,眼神裏有種說不清的東西——是懷疑?是擔憂?還是只是單純的遲疑?——然後搭檔說:“諦安,我覺得有點不對。”
但他太相信自己的數據了。他說:“數據不會錯。”
結果那個位置是陷阱。
搭檔為了掩護他撤離,永遠留在了現場。他最後看見的,是搭檔的背影——那個人在巷口轉過身,朝他喊了一句什麽,然後槍聲響了,那個背影倒下去,再也沒有起來。
他始終沒有聽清搭檔最後喊的那句話是什麽。
從那以後,他學會了懷疑一切——懷疑數據,懷疑直覺,懷疑自己。他把自己變成了一個永遠在計算概率的人,每一次行動前都要在心裏列出所有可能出錯的地方,然後逐一防範。他在腦海裏建了一座數據構成的堡壘,每一塊磚都經過精確計算,每一扇門都有三道鎖。
但他也明白,這種懷疑本身就是一種創傷。就像一條腿斷了之後接上,走路沒問題,但每到陰雨天,傷口就會隱隱作痛。那種痛提醒你:這裏曾經斷過,永遠不再是原來的樣子。
數據不會說謊,但數據會不完整。
他現在掌握的這些線索——三十七個偽造記錄、一個異常節點、一筆“藥資”交易——拼在一起,已經足夠勾勒出一個龐大犯罪網絡的冰山一角。但也僅此而已。他無法證明這些偽造記錄與現實中的毒品交易有直接關聯,無法證明那個暗網買家背後是誰在操作,無法證明“明遠科技”的服務器裏藏著什麽。證據鏈上每一個環節都有縫隙,每一個縫隙都足夠讓真相滑落。
他需要一個更完整的證據鏈。
沈諦安站起來,推開防火門,回到辦公室。
辦公室裏的燈還亮著,他的工位在靠窗的位置,桌上堆著三個顯示器、兩個筆記本、一堆亂七八糟的線纜。顯示器之間放著一個空咖啡杯,杯底有一圈幹了的褐色痕跡。旁邊是一包開了封的餅幹,已經受潮變軟,他三天沒動過了。
他坐下來,打開自己的電腦,開始寫一個新的腳本。
寫代碼的時候,他的手指很穩。一行一行,邏輯嚴密,註釋清晰。這是他最擅長的領域,是他唯一確信自己不會犯錯的地方。代碼是誠實的,要麽能運行,要麽不能,沒有中間狀態。不像人。
這個腳本不會觸發任何警報,不會在系統日志裏留下痕跡——它會偽裝成一次普通的網絡延遲測試,用合法的協議、合法的端口、合法的數據包格式,悄悄潛入N-37節點的內存空間,抓取那個正在運行的偽造證明生成程序的進程快照。整個過程會模擬得和真實網絡延遲一模一樣,連時間戳都會偽裝成隨機抖動的樣子。
他知道這是違規的。壓力測試的任務範圍不包括主動滲透第三方服務器。他也知道陸天明的暗示已經很清楚:這件事很覆雜,牽扯的不僅是犯罪分子,還有更高層面的博弈。
但他更清楚的是,如果他現在停下來,等著“上級指示”,那些偽造記錄會被新的數據覆蓋,那個異常節點可能被悄然下線,那個暗網買家會繼續用“藥資”交易下一批貨物。等一切證據消失,陸天明也好,鄭懷臨也好,所有人都會當什麽都沒發生過。
他敲下最後一行代碼,手指懸在回車鍵上方。
屏幕上倒映出他的臉。黑眼圈比淩晨更深,眼眶凹下去,像兩個淺坑。眼神疲憊但依然銳利,那種銳利不是鋒芒,而是長期磨礪後留下的痕跡,像一把用舊了但依然鋒利的刀。
六年前那個相信數據不會錯的年輕人,現在已經學會了在每一次行動前計算所有可能的代價。但他還是按下了回車鍵。
有些東西沒變。
腳本開始運行。進度條緩慢爬升。10%、25%、50%、75%——
一個彈窗突然出現在屏幕中央。
不是錯誤提示,不是系統警告。那是一個白色的對話框,背景是純黑色,只有一行字。字體纖細,像手寫體,像有人在紙上用鋼筆寫下的那句話:
“你也在找忒修斯之墻的漏洞嗎?”
沈諦安的瞳孔驟然收縮。他條件反射地切斷所有網絡連接——拔掉網線,關閉WiFi,甚至把手機抓起來扔到三米外的空桌上。手機落在桌面時發出“砰”的一聲悶響,屏幕亮了一下又暗下去。
但那行字依然停留在屏幕上。
沒有閃爍,沒有消失,只是安靜地浮在那裏,仿佛已經寫進了他的本地內存,寫進了他的視網膜,像某種烙印。
忒修斯之船——那艘在航行中不斷更換木板,直到所有部件都被替換過的船。它還是原來那艘船嗎?
忒修斯之墻——那是凈土系統核心架構文檔裏的一個內部代號。指的是系統長期運行後可能面臨的哲學困境:當代碼、協議、管理權限在一次次的維護更新中被悄然替換,最終沒人能說清這堵墻保護的究竟是公民隱私,還是寄生其上的新特權階級。
這個代號從未公開過。知道它的人,不超過十個。沈諦安是其中之一。
他盯著那行字,大腦在高速運轉。誰?為什麽?怎麽進來的?那個“也”字是什麽意思——還有誰在找?
他想起了六年前犧牲的那位搭檔。那個人生前參與過凈土系統的早期設計,那個代號,很可能就是他在某次討論中隨口提出的比喻。當時幾個人在會議室裏抽煙,煙霧繚繞中,搭檔靠在椅背上,忽然說:“這系統以後要是維護個幾十年,代碼換了一遍又一遍,那它還是原來的系統嗎?就像忒修斯之船。”
有人接了一句:“那不就是忒修斯之墻?”
大家都笑了。後來這個代號就留在了內部文檔裏。
但搭檔已經不在了。
彈窗消失了。腳本返回的結果文件夾裏,多了一個名為“蒲公英”的加密文件。
沈諦安盯著那個文件名,心跳加速。他能感覺到血液在太陽穴突突地跳,像有人在裏面敲鼓。
他雙擊打開。文件裏面只有一條記錄——一個地址,在境外,不在任何公開數據庫裏。以及一行備註:
“三年無憂記憶的買家,在這裏。”
那天晚上,沈諦安沒有回家。
他把自己關在辦公室裏,一遍又一遍地分析那個神秘彈窗留下的痕跡。對方的滲透手法極其高明——沒有利用任何已知漏洞,沒有留下任何常規日志,沒有在防火墻裏留下任何記錄。仿佛只是在他專註盯著屏幕的那幾秒鐘裏,有一只手輕輕從虛空中伸出來,在他耳邊說了一句話。
但對方知道忒修斯之墻,知道凈土系統的核心機密,知道如何繞過他設下的所有防線。這個人要麽是系統內部的高層,要麽是——
沈諦安沒有繼續往下想。那個方向太危險了。
他想到了另一個人——那個在彈窗裏留下“蒲公英”的人。那個圖標很小,像素風格,像某種塗鴉,像小孩子隨手畫的那種。但沈諦安知道它代表什麽。蒲公英,隨風散落的種子,每一顆都帶著生命。那是某種隱喻,某種宣告,某種——希望?
淩晨四點,他的手機震動了一下。
一條匿名短信,沒有號碼,只有五個字:
“查藥資流向。”
沈諦安看著那五個字,忽然意識到一件事:無論對方是誰,他都在告訴自己同一個方向。那個方向不是偽造的清潔記錄,不是異常的節點流量,不是N-37的服務器歸屬,而是“藥資”——那種以“清醒時間”為計價單位的毒品黑市穩定幣。
如果“藥資”的交易記錄可以被追蹤,如果那些交易的參與者中有與偽造記錄名單重合的人,如果他能證明這些人在用洗白後的身份繼續從事犯罪——
他打開那個“蒲公英”文件裏的境外地址,開始編寫新的追蹤腳本。
窗外,天快亮了。
辦公室的門被輕輕推開。
簡晞站在門口,手裏提著兩杯咖啡。她穿著件簡單的灰色衛衣,頭發有點亂,劉海翹起來一撮,臉上帶著熬夜後的疲憊和某種年輕的、壓不住的興奮。看見沈諦安,她楞了一下。
“沈哥,你一晚上沒睡?”
沈諦安沒回答,只是看著她。她站在門口,逆著走廊的光,整個人被鑲上一層淺金色的輪廓。年輕,挺拔,鮮活。
簡晞走進來,把一杯咖啡放在他桌上。她自己端著另一杯,在旁邊的椅子上坐下,打開筆記本電腦。動作很利落,沒有多餘的話。
“我一夜沒睡,把N-37節點過去一周的所有出站流量重新過了一遍。”她說。聲音裏帶著熬夜後的沙啞,像砂紙磨過木頭,但語速很快,每個字都迫不及待地往外蹦。“你猜我發現了什麽?”
沈諦安等著她說下去。他端起那杯咖啡喝了一口,熱的,現磨的,不是速溶。他不知道簡晞什麽時候學會喝咖啡的,也不知道她什麽時候開始留意他喝的是什麽。
簡晞把電腦屏幕轉過來。上面是一張流量關系圖——N-37節點的出站連接中,有二十三次指向同一個境外IP,而那個IP在另一個情報源的標記裏,與“藥資”的其中一個做市商錢包地址存在通信記錄。圖上用紅線圈出了那個IP,旁邊標註了時間、頻率、數據包大小,清清楚楚。
“你什麽時候開始查這個的?”沈諦安問。
“昨天下午。”簡晞說,眼睛看著他,“我看到你在和陸支談話,回來之後又一直在寫腳本。我就想,如果N-37節點真的有問題,它不可能只進不出。那些偽造的清潔證明,總得有個去處吧?”
沈諦安看著她。二十三歲,剛從警校畢業不到三個月,電子取證專業的高材生。她的眼睛明亮而堅定,沒有他那種被時間磨損過的疲憊,沒有那種每次行動前都要計算傷亡概率的習慣。她還相信數據可以抵達真相,相信正義是黑白分明的,相信只要足夠努力,就能抓住所有壞人。
“你知不知道,”沈諦安說,聲音很輕,輕得像怕驚動什麽,“如果這件事真的查下去,可能會得罪很多人?”
“我知道。”簡晞說。
她頓了頓,下巴微微揚起,又說:“但我們是警察。”
沈諦安沈默了幾秒。他看著她的眼睛,那雙眼睛裏有一種光,是他很久很久以前也曾經有過的。
簡晞看著他,又說:“而且沈哥,你教過我的——數據不會說謊,但人會。我們要做的,就是讓數據替那些不能說話的人,說出真相。”
沈諦安低下頭,看著桌上那杯咖啡。熱氣從杯口裊裊升起,在空中畫出一個個看不見的漩渦,旋轉著,消散著。他端起杯子喝了一口。咖啡是熱的,帶著一點苦,一點酸,還有一點點回甘。味道比他喝的那些速溶好得多。
“把那個IP的完整通訊記錄調出來,”他說,“從現在開始,這件事只有你和我兩個人知道。”
簡晞點點頭,轉身走向自己的工位。她的腳步很輕,但每一步都帶著某種確信。
沈諦安看著她的背影。年輕,挺拔,像一棵剛種下的樹。他想起六年前的自己,那時候他也像她一樣,相信技術可以築起完美的墻,相信數據可以抵達絕對的真相。後來那堵墻塌了,他從廢墟裏爬出來,學會了懷疑,學會了防備,學會了在每一次行動前計算傷亡概率。
但簡晞的話,讓他想起那些被他遺忘的東西——那些值得守護的東西,那些數據無法衡量的東西,那些在廢墟上依然可以生長的東西。
窗外的天色漸亮。城市的萬千數據流在黎明前最安靜的時刻裏緩緩湧動,像無數條看不見的河流,穿過高樓,穿過街道,穿過每一個還在沈睡的人。在那些流量中,有些屬於正常的社交網絡,有些屬於金融交易,有些屬於政府系統——還有極少數,屬於一場正在醞釀的風暴。
沈諦安沒有看到的是,在他追蹤的那個“藥資”做市商錢包地址旁,一個極小的、像素風格的蒲公英圖標,悄然出現在鏈上數據的某個角落。
它標記著那個地址的主人,此刻正在某處,看著同一片天空漸漸亮起來。
而在沈諦安的屏幕上,新的警報正在生成:
“檢測到‘藥資’交易模式與境內三十七個身份信息存在統計相關性。相關性系數:0.89。”
他鎖起硬盤,站起身走到窗邊。窗外是城市的天際線,高樓在晨光中逐漸清晰,玻璃幕墻反射出金色的光。有人在街邊開始擺攤,有車開始在路上行駛,有新的一天正在開始。
他不知道的是,那個蒲公英圖標的主人——那個自稱“K”的人——此刻正坐在某個不為人知的角落,看著同樣的數據流。屏幕上,是他留給沈諦安的第二條信息:
“忒修斯之墻的漏洞,不在代碼裏。在建造這堵墻的人心裏。”
那個人摘下耳機,窗外傳來城市蘇醒的喧囂。他閉上眼睛,聽了一會兒,然後睜開眼,繼續敲擊鍵盤。
一切才剛剛開始。
本站無廣告,永久域名(fanyan.cc)
淩晨兩點四十分,虛擬犯罪調查科的燈還亮著三盞。
沈諦安坐在工位前,後背微微佝僂,像一棵被風長期吹拂後定型在海岸邊的樹。這個姿勢他已經保持了太久,久到肩胛骨之間的肌肉開始酸痛,像有人用鈍刀在那裏一下一下地刮。但他沒有動。屏幕的冷光落在他臉上,把本就清瘦的面部輪廓削得更深,顴骨下方的陰影幾乎能盛住一勺水。他盯著屏幕,但眼睛的焦點不在任何一處——那是長時間專註後,眼球肌肉短暫的失焦狀態,像一臺過熱後需要冷卻的機器。
熬了三天。他擡手揉了揉眉心,指腹觸到皮膚時,能感覺到那種熬夜特有的油膩和粗糙。眼眶周圍那圈青灰色已經不再是“黑眼圈”,更像是皮膚底層滲出的某種疲倦的墨水,從內部洇染開來,洗不掉,遮不住。
深色外套搭在椅背上,他只穿著件洗得發軟的灰色襯衫。這件襯衫他穿了三年,領口微微卷邊,袖口挽到小臂中段,露出一截瘦而緊實的腕骨。手腕內側有幾道淺淺的疤痕,是六年前那次行動留下的——碎玻璃劃的,他不記得疼,只記得後來血滴在鍵盤上,把幾個鍵黏住了,後來換了新的。
辦公室很安靜。安靜到能聽見服務器散熱風扇的低鳴從地板下的機房傳來,像某種巨獸沈睡時的呼吸,平穩、低沈、永不停歇。偶爾有鍵盤敲擊聲脆響一下,是他無意識地在空格鍵上敲了敲,指腹與塑料鍵帽接觸的瞬間,觸感冰涼而熟悉,像某種確認——他還醒著,還在。
“凈土系統”測試鏈的壓力測試已經持續了七十二小時。
屏幕上開著四個終端窗口,分別跑著不同的攻擊模擬腳本。最左邊那個窗口的代碼還在滾動,一串串十六進制字符像溪水般往下淌,無窮無盡。旁邊是一個拓撲圖,藍色的節點連成網狀,偶爾有節點閃爍一下,代表一次查詢通過。按照計劃,三個月後它將正式上線,成為全國第一個用數學方法解決公民前科隱私問題的標桿工程。
沈諦安端起第五杯咖啡。紙杯握在手裏已經冷掉了,杯壁上掛著幾道淌下來的咖啡漬,其中一道還在緩緩下流,在桌上洇出一小片圓形的濕痕。他仰頭喝了一口,舌面上漫開一股劣質速溶的焦苦,還有一點點酸——這杯泡了太久。他皺了皺眉,沒有吐,咽了下去,把杯子放回原處。放的時候不小心碰到了鼠標,屏幕上的光標跳了一下。
他盯著那個光標,忽然想:如果現在有一面鏡子,自己看起來會是什麽樣子?
大概像一個在深海裏泡得太久的人,皮膚發灰,眼神空洞,浮出水面時已經忘了陽光的溫度。
目光重新落在屏幕角落的監控面板上。壓力測試很順利。CPU負載曲線平緩得像熟睡者的心電圖,沒有一絲波瀾。內存占用率在預期範圍內波動,像潮汐一樣規律。證明生成速度穩定在每秒鐘兩千三百次左右,每一次都精確無誤。
技術文檔裏寫著的“具備國際領先水平的安全架構”——那句話是他自己參與撰寫的。寫的時候他在想什麽?大概是某種驕傲吧,覺得終於有一堵墻,能擋住所有不該進來的人。
但現在他看著那堵墻,忽然覺得它太安靜了。
太完美的安靜,有時候本身就是一種異常。
但有什麽東西不對。
他說不清那是什麽。一種類似於第六感的警覺,像在空房間裏突然察覺身後有人。他猛地回頭,身後只有空蕩蕩的過道和一排排熄了燈的工位。電腦待機時亮著的電源燈像一只只紅色的眼睛,在黑暗裏凝視著他。
六年前那次誤判之後,他對自己的“直覺”已經不再信任。數據不會說謊——這是他曾經的信仰。但那次行動告訴他,數據會不完整,會誤導,會在最關鍵的時刻露出一個他看不見的盲區。從那以後,他把自己變成了一個懷疑主義者,懷疑一切,包括自己的懷疑。
但那種警覺依然會在某些時刻浮現。像傷口愈合後殘留的癢,提醒他那裏曾經被割開過。
他放下杯子,手指在觸控板上劃動,將監控面板切換到另一個視圖。那不是系統預設的監測指標,是他自己寫的一個腳本——專門抓取特定節點的加密流量元數據。這個腳本運行在後臺,沒有任何日志輸出,連名字都是晦澀的“syslog_collector_7”。做這行十年,他早學會了如何在系統的夾縫裏給自己留一扇後門。不是不信任,是太多次被信任辜負之後的習慣性防禦。
過去六小時,節點N-37的流量曲線出現了七次微小的波動。
他把那七次波動的截圖調出來,放大,一格一格地看。波幅極小,只有正常峰值的千分之三。放在常規審計腳本裏,這種波動會被歸因於網絡抖動——某個路由器的緩存滿了,或者某條光纖裏恰好有幾束光被折射了一下。自動審計會打上一個“無異常”的標簽,歸檔,然後忘掉。
但沈諦安盯著那七次波動的時間戳,在心裏默默計算。
62分鐘。58分鐘。64分鐘。61分鐘。59分鐘。63分鐘。60分鐘。
間隔不是隨機的。
他的手指停在觸控板上,沒有動。心跳快了半拍,然後恢覆正常。他重新看了一遍那些數字,又算了一遍平均值、方差、分布規律。結果一樣——一個接近但不等同於一小時的周期。
不是自動腳本。自動腳本會嚴格執行60分鐘整,像瑞士鐘表一樣精準。也不是網絡抖動。網絡抖動沒有這種統計學上的自律,那是一種混亂的、無序的、隨機的東西,而不是這種近乎強迫癥般的規律性偏差。
有人在手動觸發。或者有一個與系統時鐘不完全同步的定時任務。
他打開深度包解析工具,手指在鍵盤上敲出一串命令。那些按鍵他閉著眼睛都能找到位置,二十年了,從少年時代第一次接觸電腦到現在,鍵盤已經成為他身體的延伸。屏幕上彈出一個新的窗口,目標鎖定在N-37節點最近二十四小時的所有流量上。
數據流經過解密層。經過解壓縮層。一層層剝開,像剝開一個洋蔥,剝到最後會不會流淚,他不知道。
最終呈現在他面前的是數千條經過零知識證明處理的“清潔記錄”。
沈諦安盯著那些記錄,喉結動了動,咽下一口什麽都沒有的唾沫。口腔很幹,舌苔發苦,剛才那杯咖啡的餘味還在。
凈土系統的核心邏輯是這樣的:當警方臨檢或用人單位查詢某人是否有吸毒前科時,系統不會直接返回“有”或“無”的具體記錄,而是生成一個零知識證明——用數學方式告訴查詢者“此人無吸毒記錄”或“此人有記錄”,但查詢者看不到任何原始數據。這被稱為“證明生成”機制。
就像你能證明自己有一把鑰匙能打開一把鎖,但不必把鑰匙的形狀給別人看。
沈諦安現在看到的,正是這些證明的生成日志。
他快速篩選,將所有與節點N-37相關的記錄單獨提取出來。三百七十二個證明請求,分布在二十四小時內。他寫了一個腳本,批量驗證這些證明的原始輸入參數——也就是那些被查詢者的生物特征哈希值。
腳本開始運行。進度條緩慢爬升。10%、30%、50%、70%、90%——
完成。
前兩百個,一切正常。
第二百三十一個,腳本輸出了一個紅色的“ERROR”。
他的手指停住了。
這是一個名叫“趙某某”的查詢請求。系統生成的證明是“無吸毒記錄”,證明有效,通過驗證。但腳本在比對歷史數據時發現:三個月前,在系統舊架構上,此人因吸毒被處理過一次,原始數據應該存在。
怎麽可能?
沈諦安沒有激動。他太熟悉系統的每一個環節了,代碼是他一行行審計過的,邏輯是他一個個驗證過的。出現這種情況只有三種可能:原始數據被篡改、證明生成邏輯有漏洞、或者他的腳本出了問題。
他靠在椅背上,閉上眼睛,讓自己沈入黑暗裏。
三十秒後,他睜開眼睛,開始排查。
原始數據哈希值經過時間戳錨定,存儲在不可篡改的冷錢包鏈上。他調出那條鏈上的記錄,用手工驗證哈希值。每一個數字,每一個字母,逐一核對。沒有錯。哈希值匹配,時間戳匹配,錨定記錄完整。
證明生成邏輯是開源的。他打開代碼文件,從入口函數開始,一行行往下看。每一行都熟悉得像自己的掌紋。加密庫調用,參數傳遞,隨機數生成,證明構造——沒有後門,沒有錯誤,沒有可以被利用的縫隙。零知識證明的數學原理像一堵墻,堅實、冰冷、不容置疑。
他的腳本——他重新寫了三個測試用例,用已知數據跑了一遍又一遍。輸出結果一致,沒有錯誤,沒有偏差。
那麽問題出在哪裏?
他盯著屏幕,盯著那條記錄的元數據,目光慢慢聚焦在其中一個字段上。
隨機數。
零知識證明的驗證過程需要一組公共輸入參數,包括被查詢者的生物特征哈希值、查詢時間、以及一個隨機數。這個隨機數的用途是增加證明的不可預測性,防止某些類型的攻擊。理論上,它應該是完全隨機的,由系統自動生成,沒有任何規律可循。
但他看著那一串十六進制字符,忽然有種奇怪的感覺。那感覺說不清,像看見一張熟悉的臉,但表情不對;像聽見一首熟悉的歌,但旋律走調。他說不出具體是什麽,但就是覺得——不對。
他選中那個隨機數,覆制,打開一個新的命令行窗口。
他將那個隨機數拆解,轉換成十六進制,再轉換成ASCII字符串。屏幕上出現了一串亂碼——各種無法識別的符號混在一起,像一堆被打翻的鉛字,像一場沒有意義的風暴。
他沒有停。他用Base64再次解碼。
屏幕上,一行字符浮現出來:
“zkp_fake_clean_07”
沈諦安的手指僵在鍵盤上。
房間裏很安靜。安靜到他聽見自己的心跳聲,咚、咚、咚,像有人在胸腔裏敲一面悶鼓。他聽見自己的呼吸,一淺一深,像某種疲憊的節拍器。他感覺到後背的襯衫被汗水浸濕,黏在皮膚上,又涼又癢,像有無數只螞蟻在爬。
他盯著那行字,看了很久。
“zkp_fake_clean_07”——zkp是零知識證明的縮寫,fake是偽造,clean是清潔,07是編號。
有人在向鏈上註入偽造的清潔證明。不是刪除記錄,不是破解加密,不是任何傳統意義上的攻擊。而是制造“混淆的合法性”——用真實的零知識證明邏輯,為有前科的人生成虛假的“無記錄”證明。
那個隨機數字段裏的字符串,是攻擊者留下的標記。或者說,是某個自動化腳本的日志殘留,不小心被寫進了本該隨機生成的位置。
第七個偽造清潔證明。
還有更多。
他快速檢索其他來自N-37節點的證明,用同樣的方式解碼隨機數。三十七個被標記為“fake_clean”的證明,對應著三十七個身份。他把這些身份信息導出到一個新文件裏,開始交叉比對公開數據源。
二十分鐘後,他有了第一個發現。
名單中的一個人——化名“李某某”——是上周一個暗網科技拍賣會的匿名買家。那場拍賣會的信息在一個只有邀請才能進入的IRC頻道裏流傳過。沈諦安曾經用臥底賬號進去看過一眼,只是為了了解一下暗網最新的交易趨勢。拍賣會成交的標的是一套工業級的分子結構模擬算法,成交價不是比特幣,也不是法幣,而是一種他沒見過的計價單位。
他當時沒在意,只當是暗網又發明了某種新的洗錢游戲,關掉窗口就忘了。
現在他回想起來,那個計價單位叫做“藥資”。
沈諦安曾在情報簡報裏讀到過“藥資”這個概念。它由幾個隱秘的做市商根據毒品的純度和稀缺性動態調整與法幣的兌換率,在某些灰色經濟領域已經成為默認的結算單位。他記得當時看完簡報,只是默默記住了這個名詞,沒有多想。簡報裏說,這是一種以“清醒時間”為計量單位的新型毒品黑市穩定幣——你為別人提供多少小時的“清醒”,就能獲得多少單位的“藥資”。
他沒有想到,自己會在凈土系統的測試鏈上,第一次與它正面相遇。
他將所有發現整理成一個簡報。打字的時候,他發現自己的手指在微微發抖。不是害怕。是某種混合了警覺和興奮的生理反應——就像聞到血腥味的獵犬,全身的肌肉都繃緊了,每一根神經都在尖叫:有什麽東西,就在這裏,就在眼前。
淩晨四點零七分,他把簡報發給了陸天明。
第二天上午十點,沈諦安坐在刑偵支隊副支隊長辦公室裏,面前擺著一杯沒動過的茶。
辦公室不大,一張辦公桌,一排文件櫃,墻角放著一個飲水機和幾盆綠植。綠植的葉子上落了一層薄灰,大概很久沒人擦過。窗簾半拉著,陽光從縫隙裏擠進來,在地板上切出一道亮白色的光帶。光帶裏有細小的塵埃在浮動,緩慢地、無意義地盤旋。
陸天明坐在辦公桌後面,穿著件半舊的深藍色夾克,頭發比平時更亂一些,顯然也是熬過夜的。他低著頭,慢條斯理地翻著沈諦安打印出來的材料。翻頁的時候,紙張摩擦發出細碎的聲響,像秋風吹過落葉,像某種時間流逝的聲音。
沈諦安盯著他的手指。那雙手很穩,骨節分明,翻頁的動作不急不緩,看不出任何情緒。但沈諦安註意到,陸天明翻到某一頁時,停頓了比平時更長的一秒。只有一秒。然後繼續往下翻,速度不變。
“N-37節點,”陸天明念出那個編號,聲音平和得像在討論今天的天氣,“這個節點歸屬哪個單位?”
“名義上歸屬於省衛健委數據中心,”沈諦安說。他坐得很直,後背沒有靠在椅背上,雙手放在膝蓋上,像在等待某種檢閱,又像在克制某種沖動。“但根據路由追蹤和物理位置定位,它的真實服務器在臨市的一個商業機房,租用方是一家名叫‘明遠科技’的私營企業。”
陸天明擡起眼睛看了他一眼。那一眼很輕,像蜻蜓點過水面,但沈諦安感覺到了其中的重量——審視、掂量、還有一點說不清的東西。然後陸天明繼續低頭翻材料,沒說話。
沈諦安等他翻完最後一頁。
陸天明合上材料,沈默了幾秒。他端起茶杯喝了一口。茶水已經涼了,他也沒有在意,只是慢慢地咽下去,喉結滾動了一下,然後把茶杯放回原處。放的時候動作很輕,幾乎沒有發出聲音。
“系統上線還有多久?”
“三個月。”
“你知道這個系統是誰推動的嗎?”陸天明放下茶杯,語氣依然平和。他擡起頭看著沈諦安,那雙眼睛溫和而疲憊,眼角的皺紋在光線裏顯得格外清晰,像地圖上的等高線,記錄著這些年走過的路。“‘社會發展與治理創新研究院’的鄭懷臨副院長是這個項目的頂層設計顧問。上個月在內部研討會上,鄭院長專門強調過,凈土系統是未來社會治理現代化的標桿工程,必須確保如期上線。”
沈諦安沒有接話。他聽懂了陸天明的言外之意——這不是一個單純的技術問題。這是政治,是博弈,是一張他看不見但觸得到的網。
陸天明站起身,走到窗邊。陽光落在他的側臉上,把那幾道皺紋照得更深,像刀刻的痕跡。他背對著沈諦安,聲音從肩膀上傳過來,有些悶:“你的報告我會往上遞,但現在,你的任務是繼續保障壓力測試順利進行。至於N-37節點和那些偽造記錄……”
他停頓了一下。
“不要擴散,不要打草驚蛇。”
沈諦安看著他的背影。五十二歲的陸天明,從基層民警一步步走上來的老警察,在這個系統裏摸爬滾打了三十年。他的肩膀微微下塌,是常年伏案工作留下的痕跡,也是某種疲憊的寫照。但那種疲憊裏有一種沈諦安看不懂的東西——不是放棄,不是妥協,不是害怕,而是一種更深沈的、被時間沈澱過的了然。像知道河水最終會流向哪裏,所以不再徒勞地築壩。
“陸支,”沈諦安說,“你是不是早就知道有人在這麽做?”
陸天明轉過身。陽光在他身後,把他的臉罩在一片陰影裏,只有那雙眼睛是亮的。那眼神裏閃過一絲覆雜的東西,像閃電劃過夜空,短暫但刺目。那是疲憊,是了然,是無奈,也是某種無法言說的沈重——像一個知道自己時日無多的人,看著年輕人還在拼命追逐註定會落空的東西。
“諦安,”他說,“你在這個系統裏待了十年,應該明白一個道理:有些墻,不是用來擋住外面的人,而是用來讓裏面的人看不見彼此。”
他沒有正面回答沈諦安的問題。但那個眼神,那句話,已經說明了很多。
沈諦安低下頭,看著面前那杯沒動過的茶。茶水已經涼透了,表面浮著一層薄薄的茶膜,像一面蒙塵的鏡子。他看見自己的臉倒映在裏面,模糊、變形、看不真切。那層茶膜輕輕晃動了一下——是他的手在抖。
從陸天明辦公室出來,沈諦安沒有回自己的工位。他拐進樓梯間,推開防火門,在臺階上坐了下來。
樓梯間裏很安靜。只有頭頂的聲控燈亮著慘白的光,照在水泥臺階上,照出一些經年累月留下的汙漬和磨損。有人在這裏扔過煙頭,黑色的燙痕還在。有人在這裏吐過痰,幹了之後留下一片淺白色的痕跡。空氣裏有灰塵的味道,還有淡淡的消毒水氣息,從某個樓層的衛生間飄過來,混合成一種說不清的、公共空間特有的氣味。
他坐在第三級臺階上,雙手搭在膝蓋上,低著頭。
需要一個人待一會兒。
六年前的那場行動,此刻像一根刺紮在他腦海裏。不,不是刺,是一塊永遠化不開的淤血,堵在胸口某個位置,平時可以忽略,但每次呼吸太深就會疼。
當時他也是像現在這樣,憑借數據模型判斷出一個“絕對準確”的嫌疑人位置,堅持讓搭檔按他的方案行動。他記得搭檔當時猶豫了一下,轉過頭看他,眼神裏有種說不清的東西——是懷疑?是擔憂?還是只是單純的遲疑?——然後搭檔說:“諦安,我覺得有點不對。”
但他太相信自己的數據了。他說:“數據不會錯。”
結果那個位置是陷阱。
搭檔為了掩護他撤離,永遠留在了現場。他最後看見的,是搭檔的背影——那個人在巷口轉過身,朝他喊了一句什麽,然後槍聲響了,那個背影倒下去,再也沒有起來。
他始終沒有聽清搭檔最後喊的那句話是什麽。
從那以後,他學會了懷疑一切——懷疑數據,懷疑直覺,懷疑自己。他把自己變成了一個永遠在計算概率的人,每一次行動前都要在心裏列出所有可能出錯的地方,然後逐一防範。他在腦海裏建了一座數據構成的堡壘,每一塊磚都經過精確計算,每一扇門都有三道鎖。
但他也明白,這種懷疑本身就是一種創傷。就像一條腿斷了之後接上,走路沒問題,但每到陰雨天,傷口就會隱隱作痛。那種痛提醒你:這裏曾經斷過,永遠不再是原來的樣子。
數據不會說謊,但數據會不完整。
他現在掌握的這些線索——三十七個偽造記錄、一個異常節點、一筆“藥資”交易——拼在一起,已經足夠勾勒出一個龐大犯罪網絡的冰山一角。但也僅此而已。他無法證明這些偽造記錄與現實中的毒品交易有直接關聯,無法證明那個暗網買家背後是誰在操作,無法證明“明遠科技”的服務器裏藏著什麽。證據鏈上每一個環節都有縫隙,每一個縫隙都足夠讓真相滑落。
他需要一個更完整的證據鏈。
沈諦安站起來,推開防火門,回到辦公室。
辦公室裏的燈還亮著,他的工位在靠窗的位置,桌上堆著三個顯示器、兩個筆記本、一堆亂七八糟的線纜。顯示器之間放著一個空咖啡杯,杯底有一圈幹了的褐色痕跡。旁邊是一包開了封的餅幹,已經受潮變軟,他三天沒動過了。
他坐下來,打開自己的電腦,開始寫一個新的腳本。
寫代碼的時候,他的手指很穩。一行一行,邏輯嚴密,註釋清晰。這是他最擅長的領域,是他唯一確信自己不會犯錯的地方。代碼是誠實的,要麽能運行,要麽不能,沒有中間狀態。不像人。
這個腳本不會觸發任何警報,不會在系統日志裏留下痕跡——它會偽裝成一次普通的網絡延遲測試,用合法的協議、合法的端口、合法的數據包格式,悄悄潛入N-37節點的內存空間,抓取那個正在運行的偽造證明生成程序的進程快照。整個過程會模擬得和真實網絡延遲一模一樣,連時間戳都會偽裝成隨機抖動的樣子。
他知道這是違規的。壓力測試的任務範圍不包括主動滲透第三方服務器。他也知道陸天明的暗示已經很清楚:這件事很覆雜,牽扯的不僅是犯罪分子,還有更高層面的博弈。
但他更清楚的是,如果他現在停下來,等著“上級指示”,那些偽造記錄會被新的數據覆蓋,那個異常節點可能被悄然下線,那個暗網買家會繼續用“藥資”交易下一批貨物。等一切證據消失,陸天明也好,鄭懷臨也好,所有人都會當什麽都沒發生過。
他敲下最後一行代碼,手指懸在回車鍵上方。
屏幕上倒映出他的臉。黑眼圈比淩晨更深,眼眶凹下去,像兩個淺坑。眼神疲憊但依然銳利,那種銳利不是鋒芒,而是長期磨礪後留下的痕跡,像一把用舊了但依然鋒利的刀。
六年前那個相信數據不會錯的年輕人,現在已經學會了在每一次行動前計算所有可能的代價。但他還是按下了回車鍵。
有些東西沒變。
腳本開始運行。進度條緩慢爬升。10%、25%、50%、75%——
一個彈窗突然出現在屏幕中央。
不是錯誤提示,不是系統警告。那是一個白色的對話框,背景是純黑色,只有一行字。字體纖細,像手寫體,像有人在紙上用鋼筆寫下的那句話:
“你也在找忒修斯之墻的漏洞嗎?”
沈諦安的瞳孔驟然收縮。他條件反射地切斷所有網絡連接——拔掉網線,關閉WiFi,甚至把手機抓起來扔到三米外的空桌上。手機落在桌面時發出“砰”的一聲悶響,屏幕亮了一下又暗下去。
但那行字依然停留在屏幕上。
沒有閃爍,沒有消失,只是安靜地浮在那裏,仿佛已經寫進了他的本地內存,寫進了他的視網膜,像某種烙印。
忒修斯之船——那艘在航行中不斷更換木板,直到所有部件都被替換過的船。它還是原來那艘船嗎?
忒修斯之墻——那是凈土系統核心架構文檔裏的一個內部代號。指的是系統長期運行後可能面臨的哲學困境:當代碼、協議、管理權限在一次次的維護更新中被悄然替換,最終沒人能說清這堵墻保護的究竟是公民隱私,還是寄生其上的新特權階級。
這個代號從未公開過。知道它的人,不超過十個。沈諦安是其中之一。
他盯著那行字,大腦在高速運轉。誰?為什麽?怎麽進來的?那個“也”字是什麽意思——還有誰在找?
他想起了六年前犧牲的那位搭檔。那個人生前參與過凈土系統的早期設計,那個代號,很可能就是他在某次討論中隨口提出的比喻。當時幾個人在會議室裏抽煙,煙霧繚繞中,搭檔靠在椅背上,忽然說:“這系統以後要是維護個幾十年,代碼換了一遍又一遍,那它還是原來的系統嗎?就像忒修斯之船。”
有人接了一句:“那不就是忒修斯之墻?”
大家都笑了。後來這個代號就留在了內部文檔裏。
但搭檔已經不在了。
彈窗消失了。腳本返回的結果文件夾裏,多了一個名為“蒲公英”的加密文件。
沈諦安盯著那個文件名,心跳加速。他能感覺到血液在太陽穴突突地跳,像有人在裏面敲鼓。
他雙擊打開。文件裏面只有一條記錄——一個地址,在境外,不在任何公開數據庫裏。以及一行備註:
“三年無憂記憶的買家,在這裏。”
那天晚上,沈諦安沒有回家。
他把自己關在辦公室裏,一遍又一遍地分析那個神秘彈窗留下的痕跡。對方的滲透手法極其高明——沒有利用任何已知漏洞,沒有留下任何常規日志,沒有在防火墻裏留下任何記錄。仿佛只是在他專註盯著屏幕的那幾秒鐘裏,有一只手輕輕從虛空中伸出來,在他耳邊說了一句話。
但對方知道忒修斯之墻,知道凈土系統的核心機密,知道如何繞過他設下的所有防線。這個人要麽是系統內部的高層,要麽是——
沈諦安沒有繼續往下想。那個方向太危險了。
他想到了另一個人——那個在彈窗裏留下“蒲公英”的人。那個圖標很小,像素風格,像某種塗鴉,像小孩子隨手畫的那種。但沈諦安知道它代表什麽。蒲公英,隨風散落的種子,每一顆都帶著生命。那是某種隱喻,某種宣告,某種——希望?
淩晨四點,他的手機震動了一下。
一條匿名短信,沒有號碼,只有五個字:
“查藥資流向。”
沈諦安看著那五個字,忽然意識到一件事:無論對方是誰,他都在告訴自己同一個方向。那個方向不是偽造的清潔記錄,不是異常的節點流量,不是N-37的服務器歸屬,而是“藥資”——那種以“清醒時間”為計價單位的毒品黑市穩定幣。
如果“藥資”的交易記錄可以被追蹤,如果那些交易的參與者中有與偽造記錄名單重合的人,如果他能證明這些人在用洗白後的身份繼續從事犯罪——
他打開那個“蒲公英”文件裏的境外地址,開始編寫新的追蹤腳本。
窗外,天快亮了。
辦公室的門被輕輕推開。
簡晞站在門口,手裏提著兩杯咖啡。她穿著件簡單的灰色衛衣,頭發有點亂,劉海翹起來一撮,臉上帶著熬夜後的疲憊和某種年輕的、壓不住的興奮。看見沈諦安,她楞了一下。
“沈哥,你一晚上沒睡?”
沈諦安沒回答,只是看著她。她站在門口,逆著走廊的光,整個人被鑲上一層淺金色的輪廓。年輕,挺拔,鮮活。
簡晞走進來,把一杯咖啡放在他桌上。她自己端著另一杯,在旁邊的椅子上坐下,打開筆記本電腦。動作很利落,沒有多餘的話。
“我一夜沒睡,把N-37節點過去一周的所有出站流量重新過了一遍。”她說。聲音裏帶著熬夜後的沙啞,像砂紙磨過木頭,但語速很快,每個字都迫不及待地往外蹦。“你猜我發現了什麽?”
沈諦安等著她說下去。他端起那杯咖啡喝了一口,熱的,現磨的,不是速溶。他不知道簡晞什麽時候學會喝咖啡的,也不知道她什麽時候開始留意他喝的是什麽。
簡晞把電腦屏幕轉過來。上面是一張流量關系圖——N-37節點的出站連接中,有二十三次指向同一個境外IP,而那個IP在另一個情報源的標記裏,與“藥資”的其中一個做市商錢包地址存在通信記錄。圖上用紅線圈出了那個IP,旁邊標註了時間、頻率、數據包大小,清清楚楚。
“你什麽時候開始查這個的?”沈諦安問。
“昨天下午。”簡晞說,眼睛看著他,“我看到你在和陸支談話,回來之後又一直在寫腳本。我就想,如果N-37節點真的有問題,它不可能只進不出。那些偽造的清潔證明,總得有個去處吧?”
沈諦安看著她。二十三歲,剛從警校畢業不到三個月,電子取證專業的高材生。她的眼睛明亮而堅定,沒有他那種被時間磨損過的疲憊,沒有那種每次行動前都要計算傷亡概率的習慣。她還相信數據可以抵達真相,相信正義是黑白分明的,相信只要足夠努力,就能抓住所有壞人。
“你知不知道,”沈諦安說,聲音很輕,輕得像怕驚動什麽,“如果這件事真的查下去,可能會得罪很多人?”
“我知道。”簡晞說。
她頓了頓,下巴微微揚起,又說:“但我們是警察。”
沈諦安沈默了幾秒。他看著她的眼睛,那雙眼睛裏有一種光,是他很久很久以前也曾經有過的。
簡晞看著他,又說:“而且沈哥,你教過我的——數據不會說謊,但人會。我們要做的,就是讓數據替那些不能說話的人,說出真相。”
沈諦安低下頭,看著桌上那杯咖啡。熱氣從杯口裊裊升起,在空中畫出一個個看不見的漩渦,旋轉著,消散著。他端起杯子喝了一口。咖啡是熱的,帶著一點苦,一點酸,還有一點點回甘。味道比他喝的那些速溶好得多。
“把那個IP的完整通訊記錄調出來,”他說,“從現在開始,這件事只有你和我兩個人知道。”
簡晞點點頭,轉身走向自己的工位。她的腳步很輕,但每一步都帶著某種確信。
沈諦安看著她的背影。年輕,挺拔,像一棵剛種下的樹。他想起六年前的自己,那時候他也像她一樣,相信技術可以築起完美的墻,相信數據可以抵達絕對的真相。後來那堵墻塌了,他從廢墟裏爬出來,學會了懷疑,學會了防備,學會了在每一次行動前計算傷亡概率。
但簡晞的話,讓他想起那些被他遺忘的東西——那些值得守護的東西,那些數據無法衡量的東西,那些在廢墟上依然可以生長的東西。
窗外的天色漸亮。城市的萬千數據流在黎明前最安靜的時刻裏緩緩湧動,像無數條看不見的河流,穿過高樓,穿過街道,穿過每一個還在沈睡的人。在那些流量中,有些屬於正常的社交網絡,有些屬於金融交易,有些屬於政府系統——還有極少數,屬於一場正在醞釀的風暴。
沈諦安沒有看到的是,在他追蹤的那個“藥資”做市商錢包地址旁,一個極小的、像素風格的蒲公英圖標,悄然出現在鏈上數據的某個角落。
它標記著那個地址的主人,此刻正在某處,看著同一片天空漸漸亮起來。
而在沈諦安的屏幕上,新的警報正在生成:
“檢測到‘藥資’交易模式與境內三十七個身份信息存在統計相關性。相關性系數:0.89。”
他鎖起硬盤,站起身走到窗邊。窗外是城市的天際線,高樓在晨光中逐漸清晰,玻璃幕墻反射出金色的光。有人在街邊開始擺攤,有車開始在路上行駛,有新的一天正在開始。
他不知道的是,那個蒲公英圖標的主人——那個自稱“K”的人——此刻正坐在某個不為人知的角落,看著同樣的數據流。屏幕上,是他留給沈諦安的第二條信息:
“忒修斯之墻的漏洞,不在代碼裏。在建造這堵墻的人心裏。”
那個人摘下耳機,窗外傳來城市蘇醒的喧囂。他閉上眼睛,聽了一會兒,然後睜開眼,繼續敲擊鍵盤。
一切才剛剛開始。
本站無廣告,永久域名(fanyan.cc)