Closed Gaubee closed 3 weeks ago
- /(create|delete)?for=(*:reason) 创建密钥,提供某一个原因。会基于 root-key+ipc.mmid+reason 来创建出一个密钥,这个 reason 也是用户在这个密钥时,辅助理解这个密钥的内容
可以Android使用KeyStore,iOS使用Keychain先实现这部分来使用吗?还是需要一个key.sys.dweb的模块,来做这部分内容
sequenceDiagram
participant desk as desk.browser.dweb
participant biometrics as biometrics.sys.dweb
participant keySys as key.sys.dweb
participant keyStd as key.std.dweb
participant file as file.std.dweb
participant app as example.app.dweb
desk->>desk: 1.1 设置主密码
desk->>biometrics: 1.2 使用生物认证技术对主密码进行加密
alt is success
biometrics->>biometrics: 2.1 生物认证
biometrics->>keySys: 2.2 执行进行加密
Note over keySys: Android: Keystore存储PrivateKey, 加密算法: RSA, 使用PrivateKey对数据进行加密,并存储在SharedPreferences中<br/> iOS: Keychain存储PrivateKey, 加密算法: ECC,使用PrivateKey对数据进行加密,并存储在Keychain的GenericPassword中
keySys->>desk: 3.1 主密码数据:ByteArray
desk->>keyStd: 4.1 /setRoot?key=root-key
keyStd->>file: 5.1 使用主密码自加密后存储在MicroModuleStore中
Note over keyStd: 分发管理密钥
app-->>keyStd: /create?paremts
else is failed
biometrics->>desk: 2.2 生物识别失败
end
iOS
硬件级别的加密主要由 Secure Enclave
来提供,而想要使用 kSecAttrTokenIDSecureEnclave
创建密钥,当前只支持 kSecAttrKeyTypeECSECPrimeRandom
椭圆曲线密钥,因此iOS
改用椭圆曲线算法进行密钥生成,支持Face ID
来获取密钥。之后的加解密数据采用kSecKeyAlgorithmECIESEncryptionCofactorX963SHA256AESGCM
算法进行加解密;Android
改用RSA
进行加解密,Keystore
更方便存储 PrivateKey
。Android
由于KeyStore
无法存储ByteArray加密数据,只能存储密钥,因此存储密钥的两种方式:
1.1 使用生物识别方式:先使用KeyStore
生成RSA
密钥对,使用PrivateKey
对主密码进行加密,之后存储在SharedPreferences
中;
1.2 使用密码方式:使用MicroModuleStore
对主密码进行自加密后存储;
最终将会保存两份密码,一份在SharedPreferences
,一份在MicroModuleStore
中。
(1) 当用户使用生物识别解锁DwebBrowser
时,从KeyStore
中读取PrivateKey
和从SharedPreferences
中读取加密数据后,使用PrivateKey
解密加密数据来获取主密码,之后从MicroModuleStore
中获取自加密数据进行校验并恢复主密码到内存中;
(2)如果是使用主密码来解锁DwebBrowser
,则从MicroModuleStore
中读取自加密主密码校验,并恢复到内存中。
iOS
2.1 使用生物识别方式:先使用Keychain
生成ECC
密钥对,使用PrivateKey
对主密码进行加密,之后存储在Keychain
中的GenericPassword
中;
2.2 使用密码方式:使用MicroModuleStore
对主密码进行自加密后存储;
最终将会保存两份密码,一份在Keychain
中,一份在MicroModuleStore
中。
(1)当用户使用生物识别解锁DwebBrowser
时,从Keychain
中读取PrivateKey
和GenericPassword
中的加密数据,使用PrivateKey
对加密数据解密校验并恢复主密码到内存中;
(2)如果是使用主密码来解锁DwebBrowser
,则从MicroModuleStore
中读取自加密主密码校验,并恢复到内存中。
/{(create|delete)}/?for=:reason
创建密钥,提供某一个原因。会基于 root-key+ipc.mmid+reason 来创建出一个密钥,这个 reason 也是用户在这个密钥时,辅助理解这个密钥的内容