本文へスキップ
Anon Wallet

鍵の管理

Anonは、機密の鍵情報を平文でディスクに保存せず、各操作で必要最小限の鍵権限だけを使うよう設計された、階層型の鍵アーキテクチャを使用します。

鍵の階層

Device authenticator (passkey / password)
        │
        ▼
    Root secret            ← PRF / Argon2id; session memory
        │
    HKDF derivation
       / \
      /   \
Railgun    IDB CryptoKey
  key      (AES-GCM)

PRF鍵(ルート)

パスキーで認証すると、認証器が疑似乱数関数(PRF)を提供し、パスキーの認証情報に紐づいた決定的な秘密値を出力します。保存や同期の方式は認証器によって異なります。このPRF出力が鍵の階層のルートになります。ディスクには書き込まれず、セッション中のメモリにのみ存在します。

パスワードで認証する場合、Argon2idがパスワードと保存済みのソルトから同じ役割を持つルート秘密値を導出します。

HKDFによる導出

Anonは、PRF鍵からHKDF(HMACベースの鍵導出関数)を使って2つの鍵を導出します。

  • Railgun鍵(anon:railgun:full:v1)— 残高の復号(閲覧)とzk-SNARK証明の生成(支出)の両方に使う単一の鍵です。認証時に読み込まれ、セッション中はメモリに保持されます。
  • IDB CryptoKey(anon:secrets:indexeddb:v1)— IndexedDB内の機密データ(ニーモニック、アカウント情報)を暗号化・復号するAES-256-GCM鍵です。認証時に読み込まれ、セッション中はメモリに保持されます。

KeyVault(メモリ内キャッシュ)

KeyVaultは、セッションで使用中の鍵を保持するメモリ内のシングルトンです。次の特性があります。

  • 認証に成功すると鍵が格納されます
  • ディスクに書き込まれません
  • ログアウトまたはウィンドウを閉じると自動的に削除されます
  • 支出鍵を必要としないバックグラウンドページのアクセスパターンから保護されます

データの保存先

データ 保存先 暗号化
暗号化されたニーモニック IndexedDB IDB CryptoKeyによるAES-GCM
IDB CryptoKey Chromeストレージ PRFから導出した鍵で暗号化
公開アドレス Chromeストレージ 平文(もともと公開情報)
Railgun鍵 メモリのみ 永続化しない
IDB CryptoKey(復号済み) メモリのみ 永続化しない
PRF鍵 メモリのみ 永続化しない

復元

デバイスにアクセスできなくなった場合は、12語のニーモニックフレーズでウォレットを復元できます。ニーモニックからすべての鍵を再生成します。オフラインの安全な場所で保管してください。

関連資料