本文へスキップ
Anon Wallet

暗号化

Anon は各所で現代的な監査済みの暗号プリミティブを使います。このページでは対象、方法、保存場所を説明します。

保存時の暗号化(IndexedDB)

ニーモニックと機密性の高いアカウントデータは、AES-256-GCM で暗号化してブラウザーの IndexedDB に保存します。

  • AES-256-GCM は機密性と完全性を備えた認証付き暗号で、改ざんを検出します
  • 暗号化鍵は CryptoKey で、chrome.storage.local に抽出不可の形で保存され、パスキーやパスワードから導出した鍵で暗号化されます
  • IV(初期化ベクトル)は暗号化のたびにランダム生成します

保存時の暗号化フロー

Passkey PRF output
        │
    HKDF (SHA-256)
        │
  Storage wrap key
        │
   Encrypts CryptoKey  ──→  chrome.storage.local
        │
   CryptoKey (AES-256-GCM)
        │
   Encrypts mnemonic  ──→  IndexedDB

メモリ内の鍵

次の鍵はメモリだけに存在し、永続化されません。

鍵 用途 保持期間
PRF 鍵 ルート導出の入力 認証中のみ、数秒程度
Railgun 鍵 残高の復号、zk-SNARK 証明、取引署名 ロックまでのセッション
IDB CryptoKey(復号済み) IndexedDB の暗号化と復号 セッション

Anon のロック時にメモリから消去します。

HKDF による鍵導出

HKDF(HMAC ベースの鍵導出関数、RFC 5869)は、単一のルートシークレットから独立した複数の鍵を生成します。

PRF output (32 bytes)
    │
    ├── HKDF("anon:railgun:full:v1") ──→ Railgun key (viewing + spending)
    └── HKDF("anon:secrets:indexeddb:v1") ──→ IDB CryptoKey (AES-GCM wrap key)

各導出では永続的なマスターソルトと固有の info ラベルでドメインを分離します。HKDF により、一つの導出鍵が漏れても他の導出鍵は漏れません。

Railgun ノートの暗号化

Railgun では、支出可能な残高のコミットメントである各ノートを受信者の公開鍵でハイブリッド暗号化します。

  • ECDH 鍵合意で共有シークレットを導出
  • AES-256-GCM でノート内容を暗号化

Anon は Railgun 鍵を使い、ローカルでノートを復号します。

暗号化しないデータ

次の情報は本来公開されるため、平文で保存します。

  • 公開 Ethereum アドレス
  • ネットワークの RPC URL
  • 接続済み DApp の一覧(ホスト名のみ)
  • 拡張機能の設定(テーマ、タイムアウトなど)