KeyFrame內部研究專用

Battle of the Languages

DeFi Security Summit - DSS·12月21日週六·41 min英文

三句話摘要

編程語言在區塊鏈智能合約安全中的角色:Move、Solidity、Rust 的設計哲學與取捨。 安全並無銀彈——語言設計必在開發者直觀性與執行效能間平衡,編譯器安全靠工程紀律與持續模糊測試,區塊鏈真正風險在邏輯缺陷而非語言特性,開發者自我修養與對抗性思維才是根本。 Move 的後發優勢與設計目標:Move 在 Facebook(現 Meta)於 2018 年創建時,汲取了既有語言經驗,特別針對安全性設計。其虛擬機基於高層級字節碼,在加載和執行時能完全驗證類型安全和參考安全,字節碼無資訊損失可反編譯回源碼,這使得形式化驗證和程序分析工具更易應用。Move V2 編譯器統一了驗證架構與編譯器架構,加速語言迭代,但新編譯器本身被視為業界高風險因素。

重點整理

重點
  • 1

    Move 的後發優勢與設計目標:Move 在 Facebook(現 Meta)於 2018 年創建時,汲取了既有語言經驗,特別針對安全性設計。其虛擬機基於高層級字節碼,在加載和執行時能完全驗證類型安全和參考安全,字節碼無資訊損失可反編譯回源碼,這使得形式化驗證和程序分析工具更易應用。Move V2 編譯器統一了驗證架構與編譯器架構,加速語言迭代,但新編譯器本身被視為業界高風險因素。

  • 2

    Solidity 的實用主義設計與安全現實:Solidity 刻意選擇極度簡潔設計,使非計算機科學背景的開發者也能學習。其安全漏洞並非來自語言缺陷,而是應用邏輯問題和區塊鏈獨特的對抗性環境。記憶體管理等傳統系統語言安全問題在區塊鏈不適用(交易後記憶體即棄),真正威脅來自舍入誤差、重入等邏輯漏洞。Solidity 編譯器透過自制實現、最少外部依賴、多代碼生成管道、模糊測試等手段,在主網歷史上零編譯器漏洞。

  • 3

    Rust 的編程習慣強制與安全提升:Rust 本質上是 ML 系語言,源於解決 C++ 中的記憶體管理和安全問題。其借用檢查器強制單一可變參考、默認不可變變量等習慣,消除了由來已久的安全漏洞整類。Firefox URL 解析器改用 Rust 後安全漏洞從「源源不絕」降至零。但完全理解 Rust 需先經歷 C/C++ 的「段錯誤羞辱」,新手難以直觀把握其設計意圖。

  • 4

    編譯器錯誤防止的多層策略與限制:針對 Sway 編譯器漏洞導致資金被凍結的案例,業界採用對比測試(新舊編譯器跑同一交易)、模糊測試(語法生成隨機程序檢查斷言)、雙代碼生成管道(編譯兩份、對比狀態差異)等方法。Rust 層級風險較低(LLVM 後端更高風險),長期需要如 Google 無頭瀏覽器模糊測試的持續驗證,版本切換需數年謹慎推進。無單一銀彈,只能依靠工程紀律和持續模糊。

實用技巧與重點

乾貨
  • Move 相關
  • 創建時間:2018年(Facebook時期)
  • 字節碼特性:高層級、完全可驗證、可反編譯
  • 新版本:Move V2(統一驗證與編譯器架構)
  • 支持工具:形式化驗證、程序分析
  • Solidity 相關
  • 編譯器漏洞歷史:主網零編譯器漏洞記錄
  • 設計策略:自制編譯器、最少外部依賴、多代碼生成管道、密集模糊測試
  • 實際案例:Firefox URL解析器重寫前「源源不絕」的漏洞→重寫後零漏洞
  • 版本管理:Solidity V3.0 時代(6-7年前)→ 現在(含Custom Errors、Traits等功能)
  • Rust 相關
  • 設計源頭:Mozilla 為解決 Firefox C++ DLL+JavaScript 組合的漏洞
  • 核心機制:借用檢查器、默認不可變、RAII 機制
  • 編譯時靜態分析深度、C ABI 相容性(允許漸進式替換舊代碼)
  • Cargo 管理缺陷:版本管理僅用哈希,缺乏依賴變更深度分析(不檢測密碼學算法改動、類型變更)
  • 編譯器安全測試方法
  • 對比測試:同一交易用新舊編譯器執行、對比結果
  • 模糊測試:用語法生成隨機源碼、執行編譯檢查斷言觸發
  • 雙管道驗證:同份代碼兩套代碼生成路徑、對比最終狀態
  • 版本切換周期:Google GCC→Clang 耗時 2-3年;Aptos Move V2 啟動半年後仍未默認激活
  • 開發者教育資源
  • Solidity:競賽、Wargames(近年資源豐富)
  • Move:工具和模式仍在構建(含 LLM 輔助工具)
  • Rust:大量官方資源,需先學 C/C++ 以真正理解
  • Move 多鏈分裂
  • Aptos Move(儲存模型)
  • Sui Move(對象模型,基於對象而非儲存)
  • 原 Libra/Diem Move(Zola 模型,前置聲明輸入)
  • 當前策略:獨立演進、選擇性同步(如最近同步 Enum Types)

結論

結論

安全並無銀彈——語言設計必在開發者直觀性與執行效能間平衡,編譯器安全靠工程紀律與持續模糊測試,區塊鏈真正風險在邏輯缺陷而非語言特性,開發者自我修養與對抗性思維才是根本。

完整解析

詳細

本場面板聚焦四位頂級編程語言設計者與區塊鏈安全專家,圍繞三種主要智能合約語言的設計哲學展開討論。

Move 的後發設計:Wolfgang 開場介紹 Move 於 2018 年在 Facebook 孵化時,團隊在採用既有語言與創造新語言間抉擇,最終因安全考量決定自創語言。Move 核心優勢在於虛擬機基於高級字節碼(不同於 EVM 的低層級架構),支持加載時和執行時的完整類型與參考安全驗證,字節碼可無損反編譯回源碼。這設計使得形式化驗證與程序分析工具易於應用。新推出的 Move V2 編譯器統一了長期獨立發展的驗證架構與編譯器架構,加快迭代速度,但新編譯器在業界視為高風險因素。為此,Aptos 與安全公司 Trail of Bits 合作,採用對比測試策略——所有歷史交易跑過新舊編譯器,確保產出一致。即便如此,新編譯器從啟動至今已半年,仍未默認激活,體現谹慎態度。

Solidity 的實用主義與邏輯風險:Harry 強調 Solidity 的成功在於極度簡潔——使首次編程語言就是 Solidity 的開發者大量存在。他並列舉 Solidity 看似「漏洞叢生」的原因:並非語言缺陷,而是區塊鏈環境特有的對抗性。傳統系統語言關切的記憶體管理、指標濫用等問題在區塊鏈不存在(交易後記憶體即棄),真正威脅來自舍入誤差、重入、邏輯缺陷等應用層問題。為此,Solidity 編譯器採用了自制實現(避免 LLVM 等為非 EVM 設計的外部依賴引入不必要複雜性)、最小化依賴、多代碼生成管道雙驗、密集模糊測試等硬件工程。結果是主網歷史上零編譯器漏洞記錄。Harry 坦陳團隊曾面臨「直觀但低效」與「最優但易困惑開發者」的設計兩難(如 Traits 特性),最終倾向 EVM 最適化。

Rust 的強制習慣與陡峭學習:Dave 揭示 Rust 解決了 Mozilla Firefox 中 C++ DLL 與 JavaScript 混編帶來的安全痛點。Rust 之所以流行,根本在於三點:其為 C++ 的原地替換(暴露 C ABI)支持漸進遷移;借用檢查器強制單一可變參考、默認不可變等習慣,擊碎了由來已久的安全漏洞種類;編譯器願意為深度靜態分析犧牲編譯速度。Firefox URL 解析器從無盡漏洞一躍至零漏洞的案例証實了這點。但 Dave 亦坦言 Rust 的暗面:Cargo 依賴管理工具未有編譯器那般「偏執」,版本升級僅按雜湊跟蹤,缺乏變更深度分析(未檢測密碼學算法改動、固定陣列大小變更等),無法承載編譯器靜態分析的最佳實踐。此外,Rust 本質是 ML 系語言而非外觀暗示的 Algol 族,新手需先經歷 C/C++ 記憶體管理的「羞辱」方能真正領悟。

編譯器錯誤防止無銀彈:針對 Sway 編譯器漏洞凍結資金的事件,業界採用多層防禦:(1)對比測試——所有歷史交易用新舊編譯器執行、對比結果;(2)模糊測試——用語法生成隨機源碼、執行編譯檢查斷言;(3)雙管道驗證——同份代碼編譯兩條不同路徑、對比最終狀態。Rust 層級風險較低(僅涉及前端糖衣語法),高風險在 LLVM 後端。Google 從 GCC 遷至 Clang 耗時 2-3 年,Aptos Move V2 已啟動半年仍未默認激活。Dave 借鑑 Google Chrome 模糊測試的做法——數百萬無頭瀏覽器實例加載網頁、監控記憶體與執行上下文——建議 LLVM 亦採持續模糊與版本管控。結論是無銀彈,只能以工程紀律、長期測試與謹慎推進應對。

最後,針對 Move 多鏈方言問題(Aptos、Sui、原 Diem 各有差異),Wolfgang 解釋不同區塊鏈的程式模型差異(物件模型 vs. 儲存模型)導致語言設計差異,完全同步既不可行也無必要,當前策略為獨立演進加選擇性同步(如近期同步 Enum Types),期待長期自然收斂。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web3 安全」的內容

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️
8 min
Web3 安全英文8月14日

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️

Zach Humphries

  • 機構支撐的積極意義:價格操縱常被視為負面,但Ripple掌握大量XRP供應與escrow,在熊市期間提高價格下限,實際上替零售投資者鎖定了低風險的積累區間,這不是剝削而是市場穩定機制。
  • 歷史模式驗證:2024年7月至11月XRP在50美分附近橫盤整理,低點觸及42美分(wick),高點65美分;隨後11月5日至12月5日單月上漲456%,年底到2025年初累計漲幅534%,這個歷史周期正在1美元價位重演。
  • 比特幣聯動邏輯:講者在4-5月就預測「如果比特幣跌至60k以下,XRP會跌至1美元或更低」,此預測精準應驗,反映出熊市中兩者的明確連動關係。
Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady
72 min
Web3 安全英文PODCAST8月5日

Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady

Zero Knowledge

  • 反向 Linux 架構:Commonware 刻意暴露棧各層級控制,讓開發者自訂執行環境、共識機制、密碼學實現,而非像 Cosmos SDK 只允許應用層以上定制。2-3 個月能組裝一條定製鏈,代價是額外深度但回報是長期維護成本降低及效能優化彈性。
  • 容錯假設的典範轉移:Alpine Glow(Solana 2025)實現單輪投票定終的關鍵是將容錯預算分離為獨立的 Byzantine 和 Crash 容限。傳統系統把 33% 當一個整體預算;新模型允許 20% 惡意加 20% 崩潰,打破了 PBFT 理論界線,釋放單輪設計空間。
  • Minimet 與 Multimet 的遞進:Minimet 是 5F+1 設定下的乾淨構造,實現更短視圖延遲;Multimet(剛發布)進一步允許並行 mini-commits 且驗證者可推翻領導者審查,使用者交易在全球分布式網路達到 200-300 毫秒端到端定終。
Private Information Retrieval (PIR) with Alex Hoover
64 min
Web3 安全英文PODCAST7月29日

Private Information Retrieval (PIR) with Alex Hoover

Zero Knowledge

  • PIR 保護的是訪問模式,不是資料本身
  • PIR 與加密不同,它關注的是隱藏「客戶端查詢了什麼」,而非「資料是否加密」。在公開資料庫(如區塊鏈)上,客戶端可以在不洩露查詢對象給伺服器的情況下檢索特定條目,解決了輕量級客戶端的隱私和防審查問題。
  • 客戶端預處理方案是突破瓶頸的關鍵