第 9 篇,共 12 篇阅读约 4 分钟

不用浏览器钱包,照样用 dApp

网站期望浏览器里有一个钱包。而浏览器是电脑上暴露面最大的程序。AirNox 的解决办法是:一个在网页看来就是钱包、自身却什么都不保存的插件。

浏览器中的一个兑换页面,角落里有不含密钥的插件图标,一条通往桌面钱包的本地连接,气隙(air gap),以及手机
插件负责转发,桌面端负责决定,手机负责签名。
本页内容

一个不是钱包的插件

AirNox 浏览器插件(browser extension)会注入去中心化应用所寻找的标准接口:EVM 网络的 EIP-1193 和 EIP-6963、TON Connect,以及 Solana 和 Sui 的钱包标准。对网页来说,它就是一个钱包。它以通常的方式回应“有哪些账户”“当前是哪条链”“请签这个”。

实际上,它只是个信使。它不持有密钥,不存储助记词(seed),也无法签署任何东西。网页发出的每个请求,都会通过一条仅限本地的通道转发给桌面端的 AirNox Wallet,回复也原路返回。就算明天这个插件被换成了恶意副本,它也没有任何东西可偷,也没有任何东西可用来签名。

传统插件钱包的问题在哪里

传统 Web3 钱包整个都活在浏览器里,密钥也不例外。这就把密钥放进了电脑上暴露面最大的程序。注入网页的代码可以触及插件的接口。存储的机密数据所用的加密方式,现代显卡可以大规模暴力破解(brute force)。很多插件钱包自带跟踪器和广告。几乎没有哪个能防范收款地址被替换。而为了这些“待遇”,它们还整天占用内存和处理器时间。AirNox 只在浏览器里留一个信使,把所有重要的东西都移出浏览器,放进原生桌面程序;在 AirGap 模式下,更是放到一部从不联网的手机上。

仅限本地

插件与桌面端之间的通道从不离开你的电脑。没有中继服务器,没有云端会话,也没有账户。两端互相认证,所以冒充钱包的程序什么也拿不到,冒充插件的网页同样什么也拿不到。

权限由桌面端掌管

权限存放在 AirNox Wallet 里,而不是浏览器里。权限按站点(origin)、按链逐项授予,一次一项,没有任何隐含的权限。一个获准查看你 Ethereum 账户的网站,并没有因此获准查看你的 Polygon 账户。在一个钱包上获准的网站,在另一个钱包上并未获准。

站点与链交叉的网格,标有已授予和未授予的标记,还有一行“钱包已锁定”,其中所有请求都被拒绝
按站点,按链,失败即拒绝。

站点身份以浏览器验证过的为准,而不是网页自己附带的一个字符串。网页无法冒称自己是另一个网站。整个系统遵循失败即拒绝(fail-closed)的原则:任何没有被明确授予的都会被拒绝,钱包看不懂的请求也会被拒绝。

锁定即拒绝

钱包锁定期间,无论请求怎么措辞,插件都一概不回应。网页无法唤醒钱包,无法枚举账户,也无法把签名请求排进队列、等你解锁后再执行。你得亲自在钱包里解锁,浏览器这时才能得到回应。

签名

交易、消息和结构化数据(typed data)都走同一条路径。桌面端先解码并筛查请求,识别标准操作,标记仿冒项、无限授权(unlimited allowance)和未知授权对象(unknown spender)。在 AirGap 模式下,未签名的请求随后传到手机,在手机上再次从字节解码、展示给你,只有在你按下 Accept(接受)后才会签名。签名传回来,桌面端将其广播出去,网页收到一个交易哈希。切换链也按同样的方式处理,由钱包决定是否允许切换。

对于助记词存放在桌面端的钱包,桌面端会在同样的筛查之后签名,签名在钱包窗口里完成,而不是在手机上。

被攻破的网页能做什么,不能做什么

被攻破的网页,或者浏览器里被投毒的脚本,可以对你撒谎。它可以给你看一笔交易,请求的却是另一笔。它可以把一次领取伪装成一次验证。它做不到的,是签名。决定是在密钥所在的地方做出的,而且是在你读过手机解码后的请求之后。盗币程序(drainer)发起的授权,在浏览器弹窗里畅通无阻,到了手机上就会现出原形:一笔授权,给这个授权对象,这个金额。如果是无限授权,手机会明说。

这正是我们想要的取舍:网页享有浏览器钱包的便利,而你不必承担它的任何暴露风险。

系列全部文章

  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

加入候补名单

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