跳至正文
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 加密票据内容

票据使用您的 Railgun 密钥在 Anon 本地解密。

不加密的数据

以下数据本质上公开,因此以明文存储:

  • 公开以太坊地址
  • 网络 RPC URL
  • 已连接 DApp 列表,仅主机名
  • 扩展设置,例如主题和超时偏好