Skip to content

密钥管理 ​

源码: src/services/wallet/


助记词规范 ​

BIP39 标准 ​

约束级别要求
MUST遵循 BIP39 标准生成助记词
MUST支持 12 词 (128 bits) 和 24 词 (256 bits)
MUST使用标准英文词库
MAY支持其他语言词库

词数与安全性 ​

词数熵 (bits)安全级别
12128标准
15160高
18192很高
24256最高

助记词验证 ​

约束级别要求
MUST验证单词是否在标准词库中
MUST验证校验和是否正确
MUST验证词数是否符合标准
SHOULD提示相似但错误的单词

多链地址派生 ​

派生架构 ​

助记词
   │
   ▼
种子 (Seed)
   │
   ├──────────────────────────────────────┐
   │                                      │
   ▼                                      ▼
BIP32/BIP44                          Ed25519
(外部链)                             (BioForest 链)
   │                                      │
   ├── Ethereum (m/44'/60'/0'/0/x)       ├── BFMeta
   ├── Bitcoin (m/44'/0'/0'/0/x)         ├── PMChain
   ├── Tron (m/44'/195'/0'/0/x)          └── CCChain
   └── BSC (m/44'/60'/0'/0/x)

BIP44 派生规范 ​

链类型Coin Type派生路径
Ethereum60m/44'/60'/0'/0/x
Bitcoin0m/44'/0'/0'/0/x
Tron195m/44'/195'/0'/0/x
BSC60m/44'/60'/0'/0/x

BioForest 派生 ​

约束级别要求
MUST从种子派生 Ed25519 私钥
MUST支持链前缀区分不同网络
SHOULD使用 SHA256(seed + index) 作为私钥种子

加密存储规范 ​

存储数据结构 ​

字段类型加密说明
idstring否钱包唯一标识
namestring否钱包名称
encryptedMnemonicEncryptedData是加密的助记词
chainAddressesChainAddress[]否各链地址
createdAtnumber否创建时间
isBackedUpboolean否是否已备份

加密数据结构 ​

typescript
interface EncryptedData {
  ciphertext: string   // Base64 编码的密文
  iv: string           // Base64 编码的初始向量
  salt: string         // Base64 编码的盐
  iterations: number   // 密钥派生迭代次数
}

加密算法规范 ​

用途算法参数
对称加密AES-256-GCM256-bit key, 96-bit IV
密钥派生PBKDF2SHA-256, 100,000+ iterations

加密要求 ​

约束级别要求
MUST使用 AES-GCM 模式(提供认证加密)
MUST使用随机生成的 IV(每次加密不同)
MUST使用随机生成的 Salt(每个钱包不同)
MUST使用高迭代次数的 PBKDF2(≥100,000)
MUST NOT存储明文助记词或私钥

密钥使用流程 ​

创建钱包流程 ​

用户绘制图案
      │
      ▼
验证图案复杂度(至少4点)
      │
      ▼
生成助记词 (BIP39)
      │
      ▼
显示助记词让用户备份
      │
      ▼
验证用户备份(随机选词确认)
      │
      ▼
加密助记词 (AES-GCM)
      │
      ▼
从助记词派生各链地址
      │
      ▼
存储加密数据到安全存储

签名交易流程 ​

用户确认交易
      │
      ▼
绘制图案 / 生物识别验证
      │
      ▼
解密助记词
      │
      ▼
派生对应链的私钥
      │
      ▼
签名交易
      │
      ▼
清除内存中的私钥 ← 关键安全步骤
      │
      ▼
广播交易

图案锁规范 ​

图案复杂度要求 ​

规则要求约束级别
最少连接点4 个MUST
最多连接点9 个3x3 网格

图案验证规范 ​

约束级别要求
MUST在客户端验证图案复杂度
MUST NOT将图案明文发送到服务器
SHOULD提供连接点数实时显示
MAY支持图案可见性切换

内存安全 ​

清除敏感数据 ​

约束级别要求
MUST使用后立即清除敏感数据
MUST用随机数覆盖内存(不只是置零)
SHOULD限制私钥在内存中的存在时间
SHOULD使用安全的内存分配(如可用)
typescript
function clearSensitiveData(data: Uint8Array): void {
  // 用随机数覆盖
  crypto.getRandomValues(data);
  // 再次覆盖为零
  data.fill(0);
}

防暴力破解 ​

错误次数响应
1-3正常提示
4-5增加 30s 延迟
6-9增加 5min 延迟
10+锁定 24 小时

备份与恢复 ​

备份验证规范 ​

约束级别要求
MUST创建钱包时强制显示助记词
MUST随机选择 2-3 个词位置让用户确认
SHOULD标记钱包是否已完成备份
SHOULD未备份钱包显示提醒

恢复流程 ​

用户输入助记词
      │
      ▼
验证助记词格式和校验和
      │
      ▼
用户设置新密码
      │
      ▼
加密助记词
      │
      ▼
重新派生所有链地址
      │
      ▼
创建钱包记录

相关文档 ​

Released under the MIT License.