我查看了许多密码管理器,例如 keeper、1password、secret-in,我正在关注 secret-in 密码管理器来创建我自己的项目并尝试添加相同的功能,但被困在存储用户的数据,比如他/她的秘密,加密形式的支付秘密。我在这里阅读了keeper的加密模型,但仍然不明白。在哪里存储服务器端加密密钥?我的数据库中有一些使用单个密钥对称加密的数据。我没有将其硬编码到我的代码中,而是寻找一种更安全的方式来存储加密密钥。我可以在哪里安全地存放它?
问问题
242 次
1 回答
0
这里的方法很简单。
您只将加密数据发送到服务器进行存储/备份。收到的加密数据不附带密钥。
您需要确保所有加密和解密都在用户设备上本地进行。因此用户需要提供密钥。
用户不擅长提供高质量的密钥材料,因此要求用户提供密码,获取该密码并将其传递给基于散列的密钥派生函数,该函数带有使函数变慢的参数(高操作,高内存要求)。pbkdf2
具有强 PRF的算法HMAC-SHA-2
应该就足够了。
更新:要回答您的具体问题,您需要执行以下步骤,您将需要使用支持从密码和对称加密派生密钥的加密库,如 libsodium。
- 首次使用时向用户请求密码
- 通过密钥派生运行此密码以从中派生密钥:https ://libsodium.gitbook.io/doc/key_derivation
- 使用密钥执行用户数据加密:https ://libsodium.gitbook.io/doc/secret-key_cryptography
- 销毁密钥并将数据发送到服务器进行备份
于 2020-12-14T20:03:56.877 回答