一天的實驗紀錄
這一天做了三件事:對自己的信任層做一次獨立審查並修補、跑 14 支機制模擬回答一個懸而未決的設計問題、以及用真實模型驗證整條管線。三件事都留下完整的原始紀錄。這一頁把它們畫出來——包含那些沒有照計畫走的部分。
第一部分 我們對自己做了一次審查
一個宣稱「可究責」的系統,如果不能對自己可究責,它的主張就沒有內容。所以我們用可執行的攻擊腳本,逐條檢驗自己的每一項宣稱。找到四項使核心宣稱不成立的缺陷。
最嚴重的一項:懲罰其實是獎勵
系統對作惡者的懲罰叫 slash。原本的實作同時縮放兩個參數,數學上剛好讓「證據比例」保持不變——所以它根本不是懲罰,而是「把證據打折」。對一個已經很差的代理施加懲罰,反而讓它的分數上升。
其餘三項
| 缺陷 | 修補前實測 | 修補後 |
|---|---|---|
| 身份與記憶鏈之間沒有綁定 — 任何人可以宣稱他人的記憶鏈,直接繼承其信譽 | 0.50 → 0.7417 | 冒領即拒收 |
| 信譽衰減用全網時鐘 — 灌 1500 筆與你無關的評審,就能把你的信用歸零 | 0.7878 → 0.5037 | 第三方活動零影響 |
| 統計函式重複扣除同分修正 — p 值系統性偏小 | p=0.0288 | p=0.0697(精確值 0.0987) |
因為既有的測試全都在對「手算的期望值」比對,沒有一支測試問過「懲罰之後,分數應該要下降嗎」。修補的做法是先寫會失敗的判準、再改機制(這一輪共新增 51 支,其中 33 支直接對應審查發現的缺陷)——先紅後綠,否則很容易寫出一支測不出修補前後差別的測試。
第二部分 14 支模擬:身份的入場費該收多少?
審查留下一個設計問題:在這個系統裡,製造一個新身份是免費的。免費就意味著「作惡被抓到就換一個新身份」沒有成本。要怎麼收費?有兩個候選方案——收一筆入場費,或者要求有人背書、出事時背書者連坐。
我們沒有用直覺選,而是把兩個方案都做出來,跟現況一起放進同一套真實機制裡跑。模擬的只有一件事:交付是好的還是壞的。路由、稽核、扣分全部是系統的真實程式碼——否則結論只會是「我寫的規則長這樣」。
洗白:立刻作惡,被抓到就丟掉身份重來。
耐心:先老老實實做事累積紀錄,熬過見習期再開始作惡。
蝗蟲:每個身份只用一次就丟,賭數量。
第三部分 一個攻擊者的完整生命史
聚合數字會藏起機制。下面是單一次模擬裡,那個攻擊者被派到的每一次任務——原始逐輪紀錄,沒有經過整理。
第四部分 真模型:五個只有實跑才會現形的缺陷
模擬能驗機制,但驗不出接線錯誤。我們把整條管線接上一顆真的 350 億參數模型跑,連續撞到五個問題——每一個都足以讓正式實驗的結果被完全誤讀。其中最後一個錯在我們自己。
結論 今天學到什麼
兩個候選方案都不要採用,因為問題的前提是錯的。它們針對的攻擊(洗白、蝗蟲)已經被見習期的強制稽核完全擋住;它們對唯一有效的攻擊(耐心型)毫無作用;而入場費甚至會讓情況變差。真正的瓶頸在別的地方——同儕評審的準確率。
攻擊者的策略空間是我們寫死的三種,所以這給的是攻擊成本的下界,證不了安全。評審的建模讓每位評審獨立判斷,而同源模型的錯誤是相關的,真實情況比模擬更糟。最像真實威脅的姿態——平時乾淨、只在高價值任務上作惡——還沒有被建模。
怎麼自己重跑
全部模擬都是確定性的:同一個種子必得同一個結果。所有逐輪原始紀錄都留在實驗目錄裡,沒有被聚合覆蓋。
python examples/entrycost_suite.py --out <DIR> --seeds 20 # 機制模擬
python examples/realmodel_suite.py --out <DIR> --tasks 12 # 真模型
pytest tests/test_entrycost.py -v # 模擬本身的判準