加密
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 列表,仅主机名
- 扩展设置,例如主题和超时偏好