第 6 篇,共 12 篇阅读约 5 分钟

手机让你看到什么:在签名设备上分析交易

大多数钱包被盗,都是在主人同意的情况下发生的。页面显示的是一回事,钱包签的是另一回事,而主人点了 Confirm(确认)。手机的任务,就是确保你看到的就是你签的。

一部手机解码出一笔给未知授权对象的无限授权,两个风险项以标注形式单独列出,旁边一张小卡片显示页面上只写着 Swap(兑换)
请求的真实面目,而不是页面描述的样子。
本页内容

一面之词与真相

网页请你签名时,也会告诉你签的是什么。“用 1 ETH 兑换 USDC。”“领取你的奖励。”“验证你的钱包。”这些描述只是页面的一面之词,恶意页面想怎么说就怎么说。它交给钱包的字节是另一回事,而区块链只会看到这些字节。

AirNox Vault 不理会这些说法。它在手机上用自己的解析器,从将要签名的确切字节中解码请求,并把结果展示给你。桌面端对请求的描述是一面之词,手机上显示的才是真相。

左侧:页面显示 Swap 1 ETH to USDC;右侧:手机解码出一笔给未知授权对象的无限授权
同一个请求,两种描述。只有一种来自字节本身。

标准方法,一眼认出

你签的大多数东西都很普通:一笔转账,一次代币授权(allowance),一次通过知名路由的兑换,一笔存入合约的资金。手机能识别它所支持的每一类链的标准操作,并用通俗的话展示出来:什么操作、哪种代币、多少数量、给谁、在哪个网络上,以及手续费上限是多少。转账看起来就是转账。授权看起来就是授权,授权对象(spender)和金额都写得清清楚楚。

仿冒项,逐一标出

危险的请求,是那些看起来普通、实则不然的请求。一个名字像标准方法、参数却对不上的方法。一次把控制权委托给另一个合约、却不会在标题里显示出来的调用。一个并非页面所说的那个合约的目标地址。一个冒充知名代币符号的代币。一个首尾字符与你某个地址相同的收款地址。

以上每一种都会被检测出来,并列为一个风险项。手机不会拒绝签名,因为决定权在你。它只确保你不可能看漏。

六种风险项:无限授权、未知授权对象、仿冒方法、冒充代币、仿冒收款地址、隐藏委托
在允许你接受之前,手机会提出的风险项。

风险项

无限授权是盗币程序(drainer)的经典手法:授权(approve)一次,此后这种代币就会被全部卷走。手机会用红色标出“无限”,并将其列为风险项。

未知授权对象,是指授权给了一个没有任何人担保过的地址。如果一次兑换的报价来自某个特定路由,授权的目标却是别的东西,这种不匹配就是一个风险项。

仿冒方法、冒充的代币符号、仿冒收款地址和隐藏委托,都会被点名指出。对于收款地址,桌面端和手机都会显示一个由地址确定性生成的图案,所以一个在十六进制字符上骗得过眼睛的仿冒地址,在图案上骗不过去。

先确认,再 Accept

风险项不是随手一关的弹窗。在每个风险项都被勾选之前,Accept(接受)按钮一直是禁用的。你随时可以拒绝。只有在确认了手机发现的问题之后,你才能接受。这一个设计选择,把“我随手点过去了”变成了“我看过了,并选择继续”,这正是钱包被掏空与一个自主决定之间的区别。

桌面端先筛查一遍

同样的分析会在请求离开桌面端之前先运行一遍,所以大多数有问题的请求,在到达手机之前就已经在钱包窗口里被标记出来了。手机之所以再分析一遍,是因为桌面端正是我们假定已被攻破的那台机器。两台设备,两轮独立分析,最终拍板的是保管密钥的那一台。

阅读仍然是你的事

一台向你展示真相的签名设备(signer),拦不住你同意它。它能做的,是让真相不可能被忽略:从字节中解码,用通俗的话写出来,危险的部分标成红色,还有一道你必须有意识地通过的关卡。剩下的就看你了,而现在,你已经掌握了做决定所需的一切。

系列全部文章

  1. 假设电脑已被攻破
  2. Mass Adoption Security(大众化安全):签名设备就是你手里现成的手机
  3. 跨越气隙的三种方式:QR 码、Bluetooth LE 与 NFC
  4. 无线隐身:谁也扫描不到的签名设备
  5. 从不信任传输通道
  6. 手机让你看到什么:在签名设备上分析交易
  7. 手机自己留一份记录
  8. 桌面上的保险库:Argon2id 与抵御密码猜测的档案
  9. 不用浏览器钱包,照样用 dApp
  10. 有规则的 MCP 服务器:让 AI 智能体在限额内行事
  11. 一个受保护的钱包,包揽一切
  12. 小巧而原生:C++,没有 JavaScript 运行时,从工作站到 Raspberry Pi

加入候补名单

留下你的邮箱,我们会把产品发布消息发给你。除此之外,什么都不发。