小さく、ネイティブに:C++、JavaScript ランタイムなし、ワークステーションから Raspberry Pi まで
ウォレットはセキュリティのためのプログラムです。監査できるほど小さく、存在を忘れるほど速く、自分のものではない可動部品を持たないものであるべきです。

目次
C++ と Qt
AirNox Wallet は C++ で、Qt ツールキットを使って書かれています。暗号処理、チェーンのコード、トランザクションの組み立て、チェックはすべて1つのネイティブコアにあり、プラットフォームごとにコンパイルされます。インターフェースもネイティブです。ウォレットを描画する組み込みブラウザも、ウォレットを動かすスクリプトエンジンもありません。
その結果、体感できる違いが3つ生まれます。ウォレットは一瞬で起動します。アイドル中は静かで、マシンがほかの作業に使えるだけの余裕を残します。そして、自分で自分を更新したり、パッケージを読み込んだり、どこかから取得したコードを実行したりするランタイムが、その下にありません。
入っていないもの
JavaScript ランタイムなし。ウォレットの侵害のかなりの部分は、パッケージのエコシステムとスクリプト注入を経由しています。スクリプトエンジンを持たないウォレットは、その標的になりません。
WebView なし。インターフェースはブラウザのコンポーネントではなく、ツールキットが描画します。注入先になるページはありません。
テレメトリー、アナリティクス、トラッカーなし。ウォレットが通信するのは、ブロックチェーンのノードと、あなたが使うことにしたスワップやブリッジのプロバイダーだけです。私たちとは通信しません。勝手に外部へ通信することはなく、作成するアカウントもありません。

プラットフォーム
デスクトップアプリケーションは、Windows、Linux、macOS で、それぞれのネイティブビルドとして動きます。同じコードが Raspberry Pi クラスのハードウェアでも動くので、AirNox は組み込み用途にも向いています。両替所の端末、キオスク端末、バックオフィスの署名ステーション。画面付きの小さなボード、USB NFC リーダー、そしてウォレットがあれば、エアギャップ(air gap)に対応した、それだけで完結する業務端末になります。鍵は、リーダーにタップするスマホの中です。
1つの署名コア
スマホのアプリとデスクトップは、同じコアを共有しています。鍵を導出し、トランザクションを組み立て、画面表示のためにデコードするコードは、両方のデバイスで同じもので、それぞれ向けにコンパイルされています。チェーンごとに監査すべき実装は1つだけで、一致させなければならない実装が2つあるわけではありません。片方の修正は、もう片方の修正でもあります。
なぜ大事なのか
小さくネイティブであることは、好みのスタイルの話ではありません。依存関係の一つひとつが、他人のミスが自分のミスになる場所です。ランタイムの一つひとつが、攻撃対象領域です。厳密には必要のないネットワーク呼び出しの一つひとつが、何かを外に漏らします。単一のネイティブプログラムで、あなたが指定したノードとだけ通信するウォレットなら、その挙動を筋道立てて理解できます。それが、スマホ上の署名端末(signer)から机の上のウィンドウまで、製品全体に課している基準です。
シリーズ記事一覧
- パソコンは侵害されていると想定する
- Mass Adoption Security:署名するのは、すでに持っているスマホ
- ギャップを越える3つの方法:QR コード、Bluetooth LE、NFC
- 電波上で姿を見せない:スキャンしても見つからない署名端末
- 通信経路は決して信頼しない
- スマホが見せるもの:署名端末上でのトランザクション解析
- スマホは自分の記録を残す
- デスクトップの金庫:Argon2id と、推測に強いプロファイル
- ブラウザウォレットなしで dApp を使う
- ルールのある MCP サーバー:上限の範囲で動く AI エージェント
- すべてを、1つの守られたウォレットで
- 小さく、ネイティブに:C++、JavaScript ランタイムなし、ワークステーションから Raspberry Pi まで