Skip to content

SIMKey集成

版本: v0.39.0 | 平台: Android 9+ / iOS 16+(eSIM) | 12大安全增强: iOS eSIM、5G优化、NFC离线签名、多SIM卡切换、健康监控、量子抗性、OTA远程配置、TEE深度集成、跨运营商漫游、零知识证明、卫星通信SIM、HSM联合认证

SIMKey利用SIM卡内置的安全芯片,为移动端提供硬件级安全保护。v0.39.0新增eSIM OTA远程配置、TEE可信执行环境深度集成、跨运营商SIMKey漫游协议、基于SIMKey的零知识证明、天通一号卫星通信SIM支持和HSM联合认证。

核心特性

  • 📱 SIM 卡硬件安全: 利用 SIM 卡安全芯片存储密钥,私钥不可导出
  • 🔐 OMAPI 标准接口: 通过 Android OMAPI / iOS eSIM API 与安全芯片通信
  • 👆 生物识别集成: 支持指纹、面容 ID 替代 PIN 码,便捷又安全
  • 📞 三大运营商全覆盖: 中国移动/联通/电信 USIM 和 5G 超级 SIM 卡支持
  • 🔄 多端备份恢复: 助记词 / 云端加密备份 / 跨设备二维码同步
  • 🛡️ 12 大安全增强: eSIM、NFC 离线签名、量子抗性、TEE 集成等

系统架构

┌───────────────────────────────────────────┐
│          ChainlessChain 应用层             │
│  登录 / 签名 / 加密 / DID / 交易          │
└──────────────────┬────────────────────────┘
                   │ SIMKey API

┌───────────────────────────────────────────┐
│          SIMKey 管理层                     │
│  PIN 管理 / 生物识别 / 备份恢复 / 远程锁定 │
└──────────┬──────────┬─────────────────────┘
           │          │
           ▼          ▼
┌──────────────┐  ┌──────────────────┐
│ Android      │  │ iOS              │
│ OMAPI +      │  │ eSIM API +       │
│ SIM Applet   │  │ Secure Enclave   │
└──────┬───────┘  └───────┬──────────┘
       │                  │
       ▼                  ▼
┌───────────────────────────────────────────┐
│        SIM 卡安全芯片 (硬件层)             │
│   密钥生成 / 签名 / 加密 / 不可导出        │
└───────────────────────────────────────────┘

关键文件

文件职责
src/main/security/simkey-manager.jsSIMKey 核心管理器
src/main/security/simkey-applet.jsSIM Applet 通信接口
src/main/security/simkey-backup.js助记词与云端备份恢复
src/main/security/simkey-biometric.js生物识别集成
src/renderer/pages/security/SIMKeyPage.vueSIMKey 设置页面
src/renderer/stores/simkey.tsPinia 状态管理

什么是SIMKey?

SIMKey是集成在SIM卡中的安全应用程序(Applet),利用SIM卡的安全芯片存储密钥和执行加密操作。

SIMKey的优势

  • 📱 始终在线: 手机随身携带,SIM卡始终在手机中
  • 🔐 硬件安全: 利用SIM卡的安全芯片,私钥无法导出
  • 📞 运营商背书: 实名制SIM卡提供额外身份保证
  • 🚫 防复制: SIM卡丢失后可挂失,防止冒用
  • 💰 无需额外硬件: 人人都有SIM卡,无需购买U盾

与U盾的对比

特性U盾SIMKey
安全等级⭐⭐⭐⭐⭐⭐⭐⭐⭐
便携性⭐⭐⭐⭐⭐⭐⭐⭐
成本¥50-300免费或低成本
兼容性PC端优秀移动端优秀
丢失风险容易丢失随手机,不易丢失

支持的SIM卡

技术要求

需要支持以下技术之一:

  • USIM卡: 带安全芯片的SIM卡
  • Java Card: 支持Java Applet的SIM卡
  • SIMalliance标准: 支持OMAPI的SIM卡

运营商支持

运营商Android支持iOS支持(eSIM)备注
中国移动✅ eSIM模式USIM卡 / 5G超级SIM卡
中国联通✅ eSIM模式USIM卡 / 5G USIM
中国电信✅ eSIM模式Android支持USIM,iOS仅eSIM

TIP

iOS用户现已支持通过eSIM模式使用SIMKey(v0.38.0),需要iPhone 12+和iOS 16+

检查SIM卡兼容性

Android

java
// 检查OMAPI支持
import android.se.omapi.SEService

SEService seService = new SEService(context, executor, new SEService.OnConnectedListener() {
    @Override
    public void onConnected() {
        Reader[] readers = seService.getReaders();
        for (Reader reader : readers) {
            if (reader.getName().contains("SIM")) {
                // 支持OMAPI
                Log.d("SIMKey", "SIM card supports OMAPI");
            }
        }
    }
})

或使用ChainlessChain内置检测

设置 → 安全 → SIMKey → 检测兼容性

结果:
✓ 检测到SIM卡
✓ 支持OMAPI
✓ 已安装安全Applet

❌ SIM卡不支持OMAPI
建议: 联系运营商更换USIM卡

初次设置

Android

1. 检测SIM卡

1. 打开ChainlessChain移动应用
2. 进入"设置 → 安全"
3. 选择"启用SIMKey"
4. 应用自动检测SIM卡

2. 安装Applet(如需要)

某些SIM卡需要安装ChainlessChain Applet:

1. 系统提示需要安装Applet
2. 点击"安装"
3. 下载Applet安装包
4. 应用通过OMAPI安装到SIM卡
5. 等待安装完成(约30秒)
6. 重启应用

3. 初始化

1. 设置SIMKey PIN码:
   - 独立于SIM卡PIN
   - 6-8位数字
   - 记住:忘记无法找回
2. 确认PIN码
3. 生成密钥对(约1-2分钟)
4. 完成

安全建议

SIMKey PIN码 ≠ SIM卡PIN码

建议:
✓ 使用不同的PIN码
✓ SIMKey PIN更复杂(6-8位)
✓ 定期更换

日常使用

登录

1. 打开ChainlessChain
2. 系统检测到SIMKey
3. 提示输入PIN码
   (可选择指纹/面容ID代替)
4. 验证成功,进入系统

生物识别集成

指纹解锁

设置 → 安全 → SIMKey → 生物识别

1. 开启"允许指纹解锁"
2. 验证当前PIN码
3. 扫描指纹
4. 完成

下次登录:
- 直接使用指纹
- 自动解锁SIMKey
- 无需输入PIN码

面容ID(部分设备)

支持设备:
- 华为 Mate/P系列
- 小米部分旗舰机
- OPPO Find系列
- vivo X系列

PIN码管理

修改PIN码

设置 → 安全 → SIMKey → 修改PIN码

1. 输入当前PIN码
2. 输入新PIN码(6-8位)
3. 确认新PIN码
4. 完成

PIN码错误限制

允许错误次数: 5次
剩余次数显示:
✓✓✓✓✓ (5次)
✓✓✓ (3次)
✓ (1次) ⚠️ 最后一次机会
✗ (0次) 🔒 已锁定

解锁锁定的SIMKey

方式一: PUK码解锁
1. 联系运营商获取PUK码
2. 设置 → SIMKey → 解锁
3. 输入PUK码
4. 重置PIN码

方式二: 使用助记词恢复
1. 准备新SIM卡
2. 使用助记词恢复密钥
3. 写入新SIM卡

备份与恢复

备份方式

助记词备份(推荐)

设置 → 安全 → SIMKey → 生成助记词

1. 生成12个助记词(移动端简化版)
2. 手写记录
3. 验证
4. 妥善保存

示例:
apple book cat dog egg fish
girl hat ice joy key lion

云端加密备份

设置 → 安全 → SIMKey → 云端备份

1. 选择云服务(iCloud/Google Drive)
2. 设置备份密码(强密码)
3. 加密密钥
4. 上传到云端
5. 完成

安全性:
✓ 密钥使用备份密码加密
✓ 云服务商无法解密
✓ 丢失手机可快速恢复

跨设备备份

PC ← → 手机

设置:
1. 在PC上生成恢复二维码
2. 手机扫描二维码
3. 输入PIN码
4. 密钥通过加密通道同步
5. 写入SIM卡

恢复密钥

从助记词恢复

1. 安装新SIM卡或更换手机
2. 打开ChainlessChain
3. 选择"从助记词恢复"
4. 输入12个助记词
5. 设置新PIN码
6. 密钥写入SIM卡
7. 完成

从云端恢复

1. 新设备登录云账号
2. 打开ChainlessChain
3. 选择"从云端恢复"
4. 输入备份密码
5. 下载并解密密钥
6. 写入SIM卡
7. 完成

高级功能

双因素认证

SIMKey + 生物识别 = 双因素认证

配置:
设置 → 安全 → 双因素认证

选项:
○ 仅SIMKey PIN
● SIMKey PIN + 指纹(推荐)
○ SIMKey PIN + 面容ID

自动锁定

设置 → 安全 → 自动锁定

锁定时机:
□ 应用退到后台
□ 屏幕关闭
□ 闲置5分钟
□ 闲置15分钟
■ 闲置30分钟

远程锁定

场景: 手机丢失

操作:
1. 在PC端登录ChainlessChain
2. 设置 → 设备管理
3. 选择丢失的手机
4. 点击"远程锁定SIMKey"
5. 该手机的SIMKey立即锁定
6. 需要助记词才能解锁

API使用

Kotlin示例

kotlin
import com.chainlesschain.simkey.SIMKey

// 初始化
val simkey = SIMKey(context)

// 检查可用性
if (simkey.isAvailable()) {
    // 验证PIN
    simkey.verifyPIN("123456")

    // 签名
    val data = "Hello World".toByteArray()
    val signature = simkey.sign(data)

    // 加密
    val encrypted = simkey.encrypt(data)

    // 解密
    val decrypted = simkey.decrypt(encrypted)
}

React Native示例

typescript
import { SIMKey } from "@chainlesschain/simkey";

const simkey = new SIMKey();

// 检查兼容性
const isSupported = await simkey.isSupported();

if (isSupported) {
  // 初始化
  await simkey.initialize("123456");

  // 获取公钥
  const publicKey = await simkey.getPublicKey();

  // 签名
  const signature = await simkey.sign(data);
}

使用示例

移动端完整签名流程

kotlin
import com.chainlesschain.simkey.SIMKey

// 1. 初始化 SIMKey
val simkey = SIMKey(context)

// 2. 检查 SIM 卡兼容性
if (!simkey.isAvailable()) {
    println("当前 SIM 卡不支持 SIMKey,请联系运营商更换 USIM 卡")
    return
}

// 3. 验证 PIN 码(或使用生物识别)
simkey.verifyPIN("123456")

// 4. 获取公钥用于 DID 注册
val publicKey = simkey.getPublicKey()
println("SIMKey 公钥: $publicKey")

// 5. 对交易数据签名
val txData = "转账请求: 100 USDT".toByteArray()
val signature = simkey.sign(txData)

// 6. 验证签名结果
val isValid = simkey.verify(txData, signature, publicKey)
println("签名验证: ${if (isValid) "通过" else "失败"}")

跨设备密钥同步

场景: 从旧手机迁移 SIMKey 到新手机

1. 旧手机:设置 → 安全 → SIMKey → 生成助记词
2. 手写记录 12 个助记词并妥善保管
3. 新手机安装 ChainlessChain 应用
4. 选择「从助记词恢复」→ 输入 12 个助记词
5. 设置新 PIN 码,等待密钥写入新 SIM 卡
6. 验证新手机上的签名和加密功能正常
7. 确认恢复成功后再擦除旧手机数据

安全考虑

  1. PIN 码独立: SIMKey PIN 应与 SIM 卡 PIN 和手机锁屏密码完全不同
  2. 生物识别推荐: 日常使用建议启用指纹/面容 ID 替代频繁输入 PIN 码
  3. 远程锁定: 手机丢失后应立即通过 PC 端远程锁定 SIMKey
  4. 助记词安全: 助记词必须手写保管,禁止存入手机或云笔记
  5. 云备份加密: 若启用云端备份,务必设置强备份密码,云服务商无法解密
  6. SIM 卡保护: 开启 SIM 卡 PIN 锁,防止他人将 SIM 卡移至其他设备使用
  7. 定期备份: 每更换手机或运营商前先导出助记词或云端备份
  8. 异常监控: 定期查看 SIMKey 登录日志,发现异常操作及时处理

故障排查

SIM卡无法识别

检查步骤:

1. 确认SIM卡已插入
2. 重启手机
3. 检查SIM卡状态:
   设置 → SIM卡管理
4. 尝试重新插入SIM卡
5. 联系运营商确认SIM卡类型

OMAPI访问失败

可能原因:

  • ❌ SIM卡不支持OMAPI
  • ❌ 应用未获得权限
  • ❌ 系统版本过低(需Android 9+)

解决方法:

1. 检查Android版本(设置 → 关于手机)
2. 授予应用权限:
   设置 → 应用 → ChainlessChain → 权限
3. 联系运营商更换USIM卡

PIN码验证失败

常见问题:

1. 输入法干扰
   解决: 使用系统数字键盘

2. PIN码记错
   解决: 仔细回忆或使用PUK码重置

3. SIMKey已锁定
   解决: 使用PUK码或助记词恢复

性能慢

优化建议:

1. 清理缓存:
   设置 → SIMKey → 清理缓存

2. 重启Applet:
   设置 → SIMKey → 重启Applet

3. 减少密钥操作频率:
   - 启用会话缓存
   - 延长自动锁定时间

安全建议

保护SIMKey

  1. 强PIN码: 不使用生日、电话等弱密码
  2. 启用生物识别: 更方便更安全
  3. 定期备份: 防止SIM卡损坏
  4. 远程锁定: 手机丢失立即锁定
  5. 监控异常: 定期查看登录日志

防止丢失

  1. 云备份: 开启云端加密备份
  2. 助记词: 妥善保管助记词
  3. 多设备: 至少有PC端或另一部手机
  4. 定期验证: 定期测试恢复流程

SIM卡更换

场景: 换手机或换运营商

步骤:
1. 在旧手机导出助记词
2. (可选)云端备份
3. 插入新SIM卡到新手机
4. 安装ChainlessChain
5. 使用助记词恢复
6. 完成

常见问题

换手机需要重新设置吗?

不需要:
✓ 使用助记词恢复
✓ 使用云端备份恢复
✓ 使用跨设备同步

但建议:
✓ 换手机前先备份
✓ 验证恢复成功后再擦除旧手机

SIM卡损坏怎么办?

如果有备份:
✓ 使用助记词恢复到新SIM卡
✓ 使用云端备份恢复
✓ 使用PC端的U盾登录后重新初始化

如果没有备份:
❌ 无法恢复SIMKey
❌ 无法访问加密数据

可以在多个SIM卡使用吗?

可以:
✓ 主SIM卡(日常使用)
✓ 备用SIM卡(备份)
✓ 不同手机的SIM卡

方法:
1. 使用相同的助记词
2. 在多个SIM卡上恢复密钥
3. 共享相同的DID和密钥

iOS支持情况?

v0.38.0已支持:
✅ eSIM模式 - 通过eSIM API + Secure Enclave
✅ 支持iPhone 12及以上,iOS 16+
✅ Face ID / Touch ID生物识别集成
✅ 与Android SIMKey完全互通

详细信息请参阅上方"iOS eSIM支持"章节

性能对比

操作速度

操作U盾SIMKey软件模拟
初始化30-120秒60-180秒<1秒
签名50-200ms200-500ms1-10ms
加密50-200ms200-500ms1-10ms
解密50-200ms200-500ms1-10ms

电池消耗

典型使用(每天100次操作):
- SIMKey: 额外耗电 < 1%
- 蓝牙U盾: 额外耗电 2-3%
- 软件模拟: 几乎无影响

SIMKey耗电极低,可忽略不计

本文档为 SIMKey 基础使用指南。更多高级功能请参阅:


相关文档

基于 MIT 许可发布