第 12 篇,共 12 篇阅读约 3 分钟

小巧而原生:C++,没有 JavaScript 运行时,从工作站到 Raspberry Pi

钱包是一个安全程序。它应该小到足以审计,快到让你感觉不到它的存在,而且不带任何不属于它自己的活动部件。

一枚 C++ 芯片,下方是一台显示器、一台笔记本电脑和一台单板计算机
每个平台一个原生二进制文件。
本页内容

C++ 与 Qt

AirNox Wallet 使用 C++ 和 Qt 工具包编写。密码学、各链代码、交易构建器和筛查逻辑,全都位于一个原生核心中,针对每个平台分别编译。界面也是原生的。没有内嵌浏览器来渲染钱包,也没有脚本引擎来运行它。

带来的好处有三个,你都能切身感受到。钱包瞬间启动。它空闲时安安静静,占用很少,让机器可以去忙别的。而且它底下没有任何会自行更新、加载软件包,或者执行从别处拉来的代码的运行时。

里面没有什么

没有 JavaScript 运行时:很大一部分钱包入侵,是通过软件包生态和脚本注入实现的。一个没有脚本引擎的钱包,不是它们的目标。

没有 WebView:界面由工具包绘制,而不是由浏览器组件绘制。没有可供注入的页面。

没有遥测、没有统计分析、没有跟踪器:钱包与区块链节点,以及你选择使用的兑换和跨链桥服务商通信。它不和我们通信。没有任何东西会向我们回传数据,也不需要注册账户。

Windows、Linux、macOS 和 Raspberry Pi 四个平台图块,以及三个被划掉的项目:没有 JavaScript 运行时、没有 WebView、没有遥测
它运行在哪里,以及它舍弃了什么。

平台

桌面应用可在 Windows、Linux 和 macOS 上运行,每个平台都是原生构建。同一套代码也能在 Raspberry Pi(树莓派)级别的硬件上运行,这让 AirNox 适合嵌入式部署:兑换点的终端、自助机、后台签名工作站。一块带屏幕的小板子、一个 USB NFC 读卡器,再加上钱包,就是一个完整的、可直接用于气隙(air gap)签名的操作点,密钥则在一部碰一下读卡器的手机上。

一个签名核心

手机应用与桌面端共享同一个核心。派生密钥、构建交易、为屏幕显示解码交易的代码,在两台设备上是同一套,分别为各自编译。每条链只有一套需要审计的实现,而不是两套必须保持一致的实现;一边修复了,两边就都修复了。

为什么这很重要

小巧和原生,不是风格偏好。每一个依赖,都是别人的错误可能变成你的错误的地方。每一个运行时,都是一层攻击面。每一次并非绝对必要的网络调用,都会泄露点什么。一个单一的原生程序,只与你指定的节点通信,这样的钱包才是你能想得明白的钱包。这就是我们对整个产品的要求,从手机上的签名设备(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

加入候补名单

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