OCC原生钱包采用了Keystore存储方案。Keystore是一种介于去中心化身份鉴别方案与中心化身份鉴别方案之间的解决方案。它不是中心化的,因此可以防止服务器滥用用户权力的问题。但同时,它只能是离线的,所以可能会遭受离线暴力攻击。
一个完整的Keystore存储方案必须包含以下几个模块或算法:随机数发生器模块、基于口令(或其他身份信息)的密钥生成算法、认证加密方案。
1. 随机数生成算法:Keystore是私钥存储的解决方案,需要一种产生私钥的方法。通常为了避免私钥之间冲突和避免被暴力破解,私钥的生成采用随机方式。软件系统不能产生真正的随机数,需要依赖底层操作系统或API中的随机数发生器。OCC钱包Keystore系统基于Go语言的随机数发生器接口。
2. 基于口令的密钥生成算法:OCC钱包采用了RFC5869标准中的HKDF算法(HMAC-based Extract-and-Expand Key Derivation Function)以便在恢复对称密钥时使用。如果使用其他身份信息来代替口令,如指纹、面部等身份信息,则可以得到基于其他身份信息的密钥生成算法,前提是需要具备相应的专业设备。
3. 认证加密方案:Keystore文件仅对用户的私钥进行加密存储是不够的。为了保证安全,OCC在项目源码层面不提供通过口令产生私钥的接口,并且要求第三方开发者坚决不使用这种方法。这样可以保护终端用户资产的安全。