密码保护流程
一个密码管理软件的核心就是:
1、用户只记住一个密码:主密码。
2、用户所有的信息都需要用此密码去加密保存。
所以 主密码很重要,如果泄露了,那就没有任何安全性。
但如果让一个普通用户去记住一个很复杂的 主密码是不现实的,怎么办呢?
参照1password的解决方案是:
1、软件生成一个复杂的key(25个随机字符)和用户的主密码拼在一起生成一个新密码,可以叫根密码。
2、通过hash算法对根密码加密,生成一个唯一的hash值 (使用SHA-256 算法)
3、用上面生成 的hash值作为密钥去对用户信息去加密。
这样做的目的是
1、提升了主密码的复杂性,用户只用记住一个简单的密码即可。
2、即便黑客通过加密后的数据推测出加密所使用的密钥,也无法推导出主密码(鉴于 hash 算法具有不可逆性)
信息加密流程
加密信息,采用目前通用的高安全性的 AES-256 算法
AES-256 算法特点:
- 安全性高:使用 256 位密钥,提供了强大的加密保护。
- 高效性:加密和解密的速度相对较快,适合处理大量数据。
- 灵活性:支持多种不同的工作模式,如 ECB、CBC、CFB 等。
为了安全,我采用cbc模式
CBC 模式:
特点:
- 引入了初始化向量(IV),每个分组的加密依赖于前一个分组的密文。
- 避免了 ECB 模式中相同明文分组产生相同密文分组的问题。
缺点:
- 加密过程不能并行处理,因为每个分组的加密依赖于前一个分组。
流程
每次保存数据到本地数据库时,都将需要加密的字段加密后保存。
软件读取数据时,再使用用户提供的主密码进行解密。
这样就保证了,明文只出现在程序的内存中。硬盘中保存的始终是密文。
数据存储方案
为了保证数据安全,数据需要存储在自己的电脑上。
所以需要使用一个本地的数据库,目前流行的是sqlite(微信和svn等软件都使用)
当需要同步到其它设备时,软件可以将数据同步到用户的网盘。
再从网盘拉取。
全文完