身份认证
认证类型区分
本应用涉及两种不同的认证概念,MUST 明确区分:
钱包锁 (Wallet Lock)
| 属性 | 说明 |
|---|---|
| 作用域 | 本地应用层面 |
| 用途 | 加密存储在设备上的助记词/私钥 |
| 实现形式 | 九宫格图案锁 (3x3 Pattern Lock) |
| 存储位置 | 不存储,仅用于派生加密密钥 |
| 是否必需 | 是(Web 适配器要求) |
交易密码 / 二次签名 (Pay Password)
| 属性 | 说明 |
|---|---|
| 作用域 | 链上层面(仅 BioForest 链) |
| 用途 | 交易的二次签名,防止私钥泄露后资产被盗 |
| 存储位置 | 链上存储 secondPublicKey |
| 是否可修改 | 否(链上不可变) |
关系图
┌─────────────────────────────────────────────────────────────────┐
│ 用户视角 │
├─────────────────────────────────────────────────────────────────┤
│ 创建钱包 ──► 设置【钱包锁图案】──► 加密助记词存储到设备 │
│ │
│ 设置二次签名 ──► 设置【安全密码】──► 链上记录 secondPublicKey │
│ │
│ 转账时: │
│ 1. 绘制【钱包锁图案】解锁助记词 │
│ 2. 如有二次签名,还需输入【安全密码】 │
└─────────────────────────────────────────────────────────────────┘开发注意事项
| 约束级别 | 要求 |
|---|---|
| MUST | 在 UI 中使用不同的术语区分两者 |
| MUST NOT | 混淆 walletLock/patternKey 和 twoStepSecret 变量命名 |
| SHOULD | 钱包锁使用图案锁组件,安全密码使用密码输入框 |
| SHOULD | 检查 secondPublicKey 存在时才请求安全密码 |
认证方式对比
| 方式 | 场景 | 安全级别 | 便捷性 |
|---|---|---|---|
| 图案锁 | 首次解锁、敏感操作 | 高 | 中 |
| 生物识别 | 日常解锁、快捷支付 | 高 | 高 |
应用锁规范
锁定状态
typescript
interface LockState {
isLocked: boolean // 当前锁定状态
isWalletLockEnabled: boolean // 是否启用钱包锁
isBiometricEnabled: boolean // 是否启用生物识别
lastUnlockTime: number // 上次解锁时间
autoLockTimeout: number // 自动锁定时间(分钟)
}解锁流程
用户打开应用
│
▼
检查是否启用锁定
│
├── 未启用 ──► 直接进入
│
└── 已启用
│
▼
检查生物识别是否可用
│
├── 可用 ──► 提示指纹/面容解锁
│ │
│ ├── 成功 ──► 解锁
│ │
│ └── 失败 ──► 回退图案锁
│
└── 不可用 ──► 显示图案锁
│
├── 正确 ──► 解锁
│
└── 错误 ──► 显示错误 + 重试自动锁定规范
触发条件
| 条件 | 说明 | 可配置 |
|---|---|---|
| 超时无操作 | 设定时间内无用户活动 | 是 |
| 应用切后台 | 应用进入后台 | 是 |
| 屏幕锁定 | 设备屏幕锁定 | 否 |
超时选项
| 选项 | 默认 |
|---|---|
| 1 分钟 | |
| 5 分钟 | ✓ |
| 15 分钟 | |
| 30 分钟 | |
| 从不 |
活动监听
以下用户活动 SHOULD 重置超时计时器:
- 触摸/点击事件
- 滚动事件
- 键盘输入
- 导航操作
生物识别认证
支持类型
| 类型 | 平台 |
|---|---|
| Touch ID | iOS |
| Face ID | iOS |
| Fingerprint | Android |
启用流程
用户进入安全设置
│
▼
开启"生物识别解锁"
│
▼
验证钱包锁图案 ← 确保用户是钱包所有者
│
├── 图案错误 ──► 显示错误
│
└── 图案正确
│
▼
检查设备生物识别可用性
│
├── 不可用 ──► 显示提示
│
└── 可用
│
▼
验证生物识别
│
├── 成功 ──► 启用功能
│
└── 失败 ──► 显示错误认证要求
| 约束级别 | 要求 |
|---|---|
| MUST | 启用前验证钱包锁图案 |
| MUST | 检查设备是否支持生物识别 |
| MUST | 提供回退到图案锁的选项 |
| SHOULD | 显示生物识别类型名称 |
| SHOULD | 记录启用状态到安全存储 |
转账确认规范
确认层级
| 操作 | 认证要求 |
|---|---|
| 查看余额 | 无需认证 |
| 查看地址 | 无需认证 |
| 小额转账 | 生物识别 |
| 大额转账 | 图案锁 |
| 查看助记词 | 图案锁 |
| 删除钱包 | 图案锁 |
确认流程
用户发起转账
│
▼
判断金额级别
│
├── 大额(>阈值)──► 强制图案锁验证
│
└── 小额
│
▼
检查生物识别是否启用
│
├── 已启用 ──► 生物识别验证
│ │
│ ├── 成功 ──► 执行转账
│ │
│ └── 失败 ──► 回退图案锁
│
└── 未启用 ──► 图案锁验证钱包锁验证 UI 模式
页面级别验证 (Full Page)
适用场景:
- 验证是主要流程的一部分
- 验证后有后续操作需要在同一页面完成
- 需要更多上下文信息展示
| 页面 | 说明 |
|---|---|
| 修改钱包锁 | 验证当前图案 → 设置新图案 |
| 查看助记词 | 验证后在页面内展示助记词 |
底部抽屉验证 (Bottom Sheet)
适用场景:
- 验证是即时确认
- 验证后立即执行操作并关闭
- 需要保持上下文
| 场景 | 说明 |
|---|---|
| 转账确认 | 弹出验证后执行转账 |
| 删除钱包 | 确认删除操作 |
选择决策树
需要钱包锁验证?
│
▼
验证后是否有后续操作?
│
├── 是 ──► 需要停留在页面操作?
│ │
│ ├── 是 ──► 使用【页面级别验证】
│ │
│ └── 否 ──► 使用【底部抽屉验证】
│
└── 否(即时确认)──► 使用【底部抽屉验证】错误处理规范
认证错误
| 错误类型 | 处理方式 |
|---|---|
| 图案错误 | 显示错误动画 + 清空输入 |
| 生物识别取消 | 显示图案锁 |
| 生物识别失败 | 提示重试或使用图案锁 |
| 生物识别锁定 | 强制使用图案锁 |
错误次数限制
| 约束级别 | 要求 |
|---|---|
| SHOULD | 连续错误后增加延迟 |
| SHOULD | 错误次数过多时临时锁定 |
| MAY | 支持错误通知(邮件/推送) |
