跳到正文

治理委託簽名安全嗎?

了解治理委託簽名授權的內容、EIP-712 網域分離、Nonce 與到期時間如何降低重放風險,以及簽名前需要核驗的事項。

更新於

僅供教育用途,不構成投資建議。數位資產交易和簽名可能造成不可逆的損失。

直接答案

只有在解碼後的訊息與您預定的委託完全一致,且治理合約實施了充分的重放保護時,治理委託簽名才是安全的。在典型的投票代幣設計中,委託改變的是誰可以行使簽名者的投票權;它不會轉移代幣餘額,也不會授予代幣支出權限。不過,簽名究竟會產生什麼效果,最終以已部署的合約為準。

離線簽名可以由中繼者提交,因此簽名者即使不支付 Gas,也仍然授權了鏈上狀態變更。應將簽名視為一條可執行指令,而不是登入操作或無害的錢包連線請求。

運作方式

常見的 delegateBySig 流程分為四個步驟:

  1. 應用程式準備 EIP-712 型別化資料,其中包含受託人地址、Nonce 和到期時間。
  2. 錢包對綁定了型別化訊息和 EIP-712 網域的摘要進行簽名。
  3. 任何帳戶都可以將該簽名中繼到代幣或治理合約。
  4. 合約恢復或驗證簽名者身分,檢查 Nonce 和到期時間,並記錄新的受託人。

EIP-712 網域可以包含 nameversionchainIdverifyingContract。這些欄位可將應用程式、版本、網路或合約不同但內容相同的訊息彼此隔離。EIP-712 本身明確提供重放保護;合約必須消耗 Nonce 或以其他方式確保每次授權只能使用一次,而到期時間只有在合約實際檢查它時才能限制可執行的時間窗口。

簽名前,請對照官方治理介面、文件或獨立核驗過的合約資料,檢查以下所有事項:

  • primaryType 和欄位名稱描述的是委託,而不是 Permit、代幣轉帳、訂單或帳戶管理授權。
  • verifyingContract 是目前 chainId 上預期的代幣或治理合約。
  • delegatee 是您選擇的代表地址;應核對完整地址,而不是顯示名稱。
  • nonce 與合約為簽名者記錄的目前 Nonce 一致,且 expiry 對預定流程而言足夠短。
  • 錢包顯示完整的型別化資料。若提示盲簽,或只顯示您無法獨立還原其含義的原始雜湊,請拒絕簽名。

不同實作有所差異。例如,Compound 的 COMP 合約會對受託人、Nonce 和到期時間進行雜湊,要求 Nonce 等於簽名者儲存的 Nonce,隨後遞增該 Nonce,並拒絕已過期的簽名。OpenZeppelin 的 Votes 介面也公開了 delegateBySig、Nonce 處理和到期時間檢查。不要假設另一個合約中名稱相似的函式具備相同保護。

範例

Mira 打算把 10,000 票委託給地址 0xAB...1234。她的錢包顯示 primaryType: Delegation、已經核驗的投票代幣合約、目前鏈 ID、delegatee: 0xAB...1234、目前 Nonce,以及 20 分鐘後到期的期限。她透過第二個可信來源核對地址後簽名;中繼者提交訊息,合約發出委託事件。她的代幣餘額仍在自己的錢包中,而代表則按照該協議的規則取得相關投票權。

現在更改一個細節:頁面請求的是 primaryType: Permit 並指定了代幣支出者,或者 verifyingContract 是一個無關合約。這就不是同一條委託指令。即使頁面將按鈕標為「委託」,且簽名者不需支付 Gas,它也可能授權代幣支出。Mira 應當拒絕簽名。

風險與控制措施

  • 受託人錯誤:地址投毒、私訊和複製的顯示名稱可能會將 delegatee 替換為攻擊者控制的地址。請透過官方提案或代表資料核驗完整地址。
  • 操作錯誤:惡意介面可能請求另一種 EIP-712 型別,例如 Permit。應閱讀 primaryType、每個欄位和驗證合約;按鈕標籤沒有任何安全意義。
  • 重放:Nonce 檢查薄弱或缺失可能使簽名被重複使用。網域如果沒有綁定預期的鏈或合約,也可能使簽名在非預期情境中被使用。請核驗實際驗證程式碼,因為僅靠 EIP-712 並不能防止重放。
  • 長期有效的簽名:未使用的已簽名訊息在到期或 Nonce 失效前可能一直可執行。優先選擇較短的到期時間,不要公開簽名;如需取消,只使用協議記錄在文件中的失效方法。
  • 誤導性的錢包顯示:欄位被截斷、網域未知或盲簽都會妨礙有效知情同意。請取消操作,並使用能顯示完整訊息的錢包或解碼器檢查型別化資料請求。
  • 合約帳戶差異:智慧合約錢包可能透過 ERC-1271 驗證簽名,此時簽名有效性可能取決於錢包狀態和授權政策。應確認錢包和治理合約均提供支援,不要想當然地套用 EOA 式恢復。
  • 治理後果:委託可能集中投票權,也可能讓不可信的受託人作出違背您利益的投票。請審查其身分、投票歷史、利益衝突以及協議的重新委託流程。

提交後,請在正確的鏈上核驗交易:檢查目標合約、解碼後的函式、事件恢復或報告的簽名者、新受託人以及 Nonce。中繼交易成功只能證明合約接受了呼叫,並不能證明簽名意圖是安全的。

如果您已簽名但尚未看到提交,請停止分享該簽名,並查閱協議記錄在文件中的取消或 Nonce 失效途徑。如果不需要的委託已經執行,請透過官方合約重新委託,並核驗新狀態。單純的委託通常不會建立代幣額度,因此不要把重新委託與撤銷授權混為一談。如果您還簽署了 Permit,或洩漏了助記詞或私鑰,應將其視為另一起嚴重程度更高的錢包安全事件。

常見誤解

  • 「不付 Gas 就沒有授權。」 中繼者可以支付 Gas,而簽名則提供簽名者的授權。
  • 「EIP-712 能讓每個簽名都安全。」 它規範了型別化資料雜湊和網域分離,但該標準不包含重放保護,也無法驗證使用者是否確實打算執行所顯示的操作。
  • 「委託會轉移我的代幣。」 常規投票委託轉移或分配的是投票權,而不是代幣所有權;但實際效果只能由已部署的合約和解碼後的訊息確定。
  • 「我隨時都能撤銷離線簽名。」 不存在通用的簽名撤銷交易。到期時間、Nonce 的消耗或失效,以及重新委託,都是因合約而異的機制。
  • 「更換受託人會抹去之前的投票。」 重新委託會按照協議規則改變未來或目前的投票權,但不一定能撤銷已經投出的票或改變歷史快照。

相關主題

來源

導覽

搜尋知識庫...