什麼是盲簽(Blind Signing):為什麼硬體錢包還是會讓你簽你看不懂的東西
硬體錢包的設計邏輯是讓你在簽署之前真正看到你準備做什麼動作,準確簽署什麼,也把你最重要的秘鑰放在線下錢包裡面。當你準備簽署代幣授權時,該裝置照理會顯示:允許哪個地址、動用哪種代幣、上限是多少,這種明確披露資訊的簽署方式叫做明簽(Clear Signing)。透過硬體錢包把合約內容解碼成人類能讀懂的語言,讓你在按下確認之前有機會真正理解自己在授權什麼。
但是盲簽發生的原因,是裝置的韌體(firmware)無法解碼某些智能合約的互動代碼。當你使用某些 DeFi 協議、NFT 市集或較新的應用程式時,合約的結構可能超出了硬體錢包裝置目前支援的範圍。當硬體錢包收到了交易請求,它沒有辦法把這個請求翻譯成你能理解的語言。它能做的只是把原始合約資料的哈希值顯示在螢幕上,然後問你:確認嗎?
當時你在裝置上看到的,通常只是一個警告說明這筆交易需要盲簽 Blind Signing,以及一串以 0x 開頭的字元。有些裝置還會強制要求你先在設定裡手動開啟這個功能才能繼續。大多數人的選擇是確認,因為他們使用的應用程式強制要求這樣做。問題在於你當時準備確認的是一份你完全無法看懂的東西。那串哈希值裡可以是任何內容,一個有合理上限的授權,或者允許某個合約無限動用你特定資產的指令。這些你在裝置螢幕上是看不出差別,因為兩者對你來說都只是一串字元。
2022 年 OpenSea 相關釣魚事件中的攻擊方式之一,就是引導用戶在看似普通的頁面上簽署一筆交易,而那筆交易實際上是一份市集掛單合約,用戶會授權將資產以接近零的價格出售。用戶在當時看到的提示是「驗證你的身份」,但是他們簽署的卻是一份出售合約。那次事件揭示了盲簽 Blind Signing 的核心問題:當你看不見你在簽什麼的時候,你的確認鈕本身就失去了保護你的功能。
硬體錢包是整個流程的最後一個確認步驟,其實交易請求在更早之前就已經存在了。當 dApp 發起一筆交易時,資料會先流經你的軟體錢包,例如 MetaMask,然後才傳送到硬體裝置等待確認。在 MetaMask 的交易確認頁面,有一個 Hex 或 Data 的分頁,顯示這筆交易的原始 calldata。你可以在那裡複製合約地址,把它貼到官方 Etherscan 來解碼,看看這筆交易實際上在呼叫什麼功能。這個步驟需要一定的技術熟悉度,並不是每個人都會這樣做,但這個選項在你拿起硬體錢包之前就已經存在了。
更根本的判斷是,當你決定是否要簽署之前,當你看到盲簽提示 Blind Signing 跳出來,有一個問題值得停下來問自己:你對這個協議的了解有多深?是否它是一個運行多年、有公開審計記錄、廣泛使用的協議發起要求的盲簽,還是一個你剛從某個連結點進去、第一次聽說的頁面要求你盲簽。這兩種情況的風險結構完全不同,前者你雖然看不見這筆交易的細節,但你對這個協議有足夠的背景可以做出初步判斷。但後者你對它什麼背景都不了解,而且你連交易內容都看不見。當你看不見你在簽什麼,你對這個協議本身的了解程度,就變成你唯一能依賴的判斷基礎。目前這個問題在整個行業裡已經變成一個不可被忽略的問題。越來越多的硬體錢包韌體開始更新,也嘗試和協議進行整合,試著把原本需要盲簽的互動改為支援明簽。
盲簽的存在不是因為有人想讓你在不知情的情況下簽署東西。它目前是一個技術落差,裝置的解碼能力追不上合約的複雜度。但這個技術落差,落在你和你資產之間最關鍵的那個確認動作上。當下次裝置螢幕上出現那個提示時,至少你已經知道在當下可能面臨的風險,也知道在真的必要時,該如何進一步核查。
延伸閱讀: