什么是盲签(Blind Signing):为什么硬件钱包还是会让你签你看不懂的东西
硬件钱包的设计逻辑是让你在签署之前真正看清楚自己在做什么,准确签署什么,同时把最重要的私钥保存在离线设备里。当你准备签署代币授权时,设备应该显示:允许哪个地址、动用哪种代币、上限是多少。这种明确披露信息的签署方式叫做明签(Clear Signing),硬件钱包将合约内容解码成人类可以理解的语言,让你在按下确认之前有机会真正搞清楚自己在授权什么。
盲签发生的原因,是设备的固件(firmware)无法解码某些智能合约的交互代码。当你使用某些 DeFi 协议、NFT 交易平台或较新的应用程序时,合约结构可能超出了硬件钱包目前支持的范围。设备收到了交易请求,但没有办法把这个请求翻译成你能理解的语言。它能做的只是把原始合约数据的哈希值显示在屏幕上,然后问你:确认吗?
你在设备上看到的,通常只是一条警告说明这笔交易需要盲签 Blind Signing,以及一串以 0x 开头的字符。有些设备还会强制要求你先在设置里手动开启这个功能才能继续。大多数人会选择确认,因为他们使用的应用程序要求这样做,没有其他办法继续操作。问题在于你当时准备确认的是一份你完全看不懂的东西。那串哈希值里可以是任何内容,一个有合理上限的授权,或者一条允许某个合约无限动用你特定资产的指令。这些在设备屏幕上是看不出差别的,因为两者对你来说都只是一串字符。
2022 年 OpenSea 相关钓鱼事件中的攻击方式之一,就是引导用户在看似普通的页面上签署一笔交易,而那笔交易实际上是一份平台挂单合约,用户会授权将资产以接近零的价格出售。用户当时看到的提示是「验证你的身份」,但他们签署的却是一份出售合约。那次事件揭示了盲签的核心问题:当你看不见自己在签什么,你的确认键本身就失去了保护你的功能。
硬件钱包是整个流程的最后一个确认步骤,但交易请求在更早之前就已经存在了。当 dApp 发起一笔交易时,数据会先经过你的软件钱包,比如 MetaMask,然后才传送到硬件设备等待确认。在 MetaMask 的交易确认页面,有一个 Hex 或 Data 的选项卡,显示这笔交易的原始 calldata。你可以在那里复制合约地址,粘贴到 Etherscan 进行解码,查看这笔交易实际上在调用什么功能。这个步骤需要一定的技术基础,并不是每个人都会这样做,但这个选项在你拿起硬件钱包之前就已经存在了。
更根本的判断,发生在你决定是否继续之前。当盲签提示跳出来,有一个问题值得停下来问自己:你对这个协议的了解有多深?一个运行多年、有公开审计记录、被广泛使用的协议要求盲签,和一个你刚从某个链接进去、从未听说过的页面要求你盲签,这两种情况的风险结构完全不同。前者你虽然看不见这笔交易的具体内容,但你对这个协议有足够的背景做出初步判断。后者你对它毫无了解,而且你连交易内容都看不见。当你看不见自己在签什么,你对这个协议本身的了解程度,就变成你唯一能依赖的判断基础。目前这个问题在整个行业已经受到重视,越来越多的硬件钱包固件更新和协议整合,正在尝试将原本需要盲签的交互改为支持明签。
盲签的存在不是因为有人想让你在不知情的情况下签署东西。它是一个技术落差,设备的解码能力跟不上合约的复杂程度。但这个技术落差,恰好落在你和你资产之间最关键的那个确认动作上。下次设备屏幕上出现那个提示时,至少你已经知道自己当下可能面临的风险,也知道在真正必要时,该如何进一步核查。
延伸阅读: