測試的極限與數學的保證
Anthropic 與 Theorem 發表研究,展示利用 Claude 對 123 個開源軟體庫進行形式化驗證(Formal Verification),即透過數學證明代碼在特定條件下不會崩潰。這批驗證針對的是編譯後的 RISC-V 匯編指令,而非高層語言源碼。在數週時間內,Claude 成功證明了 239 個入口點(entry points)在輸入小於 64 MB 時,無論 Linux 系統如何回應,都不會觸發記憶體安全錯誤或斷言失敗。這意味著,對於這些特定的入口點,傳統上依賴大量隨機輸入的模糊測試(Fuzzing)已無必要,因為數學證明已覆蓋了所有可能的路徑。
從「人年」到「數週」的成本斷裂
形式化驗證長期以來是軟體工程的「聖杯」,但也是昂貴的奢侈品。以 seL4 作業系統核心為例,實現它需要 2 人年,但驗證它需要 20 人年。這種成本結構使得該技術僅適用於空中客車航電等極端關鍵領域。然而,這次實驗顯示,Claude 生成的證明代碼總量約 1.8 億行 Rocq 語言代碼,平均每份證明約 60 萬行,對應的中位數二進位檔案長度為 1.8 萬條 RISC-V 指令。這種規模的代碼生成與邏輯推導,若是人工完成,時間成本將是天文數字。LLM 不僅降低了門檻,更將驗證從「專案級」任務轉變為「持續性」流程。
驗證過程成為漏洞挖掘器
更值得注意的是,Claude 在嘗試證明這些屬性時,不僅是「通過」了測試,還主動發現了多年來未被檢測到的 bug。這些漏洞即使經過數兆次的測試運行也未曾暴露。Claude 不僅識別出這些導致證明失敗的缺陷,還自動修復了它們,隨後重新進行證明並成功通過。這揭示了一種新的軟體開發範式:LLM 不再只是輔助寫代碼,而是作為一個嚴格的審計者,透過「證明失敗」來精確定位邏輯錯誤。這種「以證為測」的方法,比傳統測試更能深入代碼邏輯的核心。
限制與未來的擴展路徑
目前的證明基於特定假設:程式以單執行緒靜態二進位運行,且在 RISC-V CPU 與 Linux 系統上具有固定記憶體預算。這限制了其通用性,但研究團隊指出,擴展至其他架構與作業系統是標準化語義的過程,技術上完全可行。Theorem 已公開部分證明與 RISC-V 語義模型,並提供 Claude Skill 讓開發者自行驗證代碼。這標誌著形式化驗證正從學術領域走向生產環境,成為標準軟體開發流程的一部分。
主筆觀點
我認為這不僅是技術進步,更是軟體安全範式的根本轉移。過去,我們依賴「測試」來確保軟體沒問題,但測試只能證明「有 bug」,無法證明「沒 bug」。形式化驗證提供了數學上的保證,而 LLM 讓這種保證變得經濟可行。這將徹底改變開源軟體的信任模型:未來,一個庫的安全性不再取決於維護者的勤奮程度,而是取決於是否存在一份可驗證的數學證明。
反過來看,這也對現有安全產業構成挑戰。依賴模糊測試與滲透測試的服務商,其價值主張將被削弱。如果開發者能低成本地獲得「無崩潰證明」,那麼針對記憶體安全漏洞的攻擊面將大幅縮小。對於企業而言,現在是建立「驗證優先」文化的好時機。接下來該關注的訊號是:主要雲端服務商是否會將「形式化驗證」列為開源依賴項的強制要求,以及 Theorem 的商業模式是否能支撐起大規模的驗證需求。如果驗證成為標準,軟體供應鏈的安全性將從「希望它沒問題」變成「證明它沒問題」。
以上為魔法報紙編輯部觀點,不代表原報導立場。