如何存储加密密钥?
How to store encryption key?
我查看了许多密码管理器,例如 keeper、1password、secret-in,我正在关注 secret-in 密码管理器来创建我自己的项目并尝试添加相同的功能,但在存储用户数据时遇到了困难,例如his/her 秘密,加密形式的支付秘密。我看了 keeper here 的加密模型,但还是没看懂。 在哪里存储服务器端加密密钥?
我的数据库中有一些使用单个密钥对称加密的数据。我正在寻找一种更安全的方法来存储加密密钥,而不是将其硬编码到我的代码中。我可以在哪里安全地存放它?
这里的方法很简单。
您只向 storage/backup 的服务器发送加密数据。
收到的加密数据没有密钥。
您需要确保所有加密和解密都在用户设备本地进行。因此用户需要提供密钥。
用户不擅长提供高质量的密钥 material,因此,相反,要求用户提供密码,获取该密码并通过基于散列的密钥派生函数传递它,其参数使得功能慢(高操作,高内存要求)。像 pbkdf2
这样的算法和像 HMAC-SHA-2
这样的强 PRF 应该就足够了。
更新:
要回答您的具体问题,您需要执行以下步骤,您将需要使用支持从密码和对称加密中导出密钥的加密库,例如 libsodium。
- 首次使用时要求用户提供密码
- 运行这个密码通过密钥推导从中推导出一个密钥:https://libsodium.gitbook.io/doc/key_derivation
- 使用密钥执行用户数据加密:https://libsodium.gitbook.io/doc/secret-key_cryptography
- 销毁密钥并将数据发送到服务器进行备份
我查看了许多密码管理器,例如 keeper、1password、secret-in,我正在关注 secret-in 密码管理器来创建我自己的项目并尝试添加相同的功能,但在存储用户数据时遇到了困难,例如his/her 秘密,加密形式的支付秘密。我看了 keeper here 的加密模型,但还是没看懂。 在哪里存储服务器端加密密钥? 我的数据库中有一些使用单个密钥对称加密的数据。我正在寻找一种更安全的方法来存储加密密钥,而不是将其硬编码到我的代码中。我可以在哪里安全地存放它?
这里的方法很简单。
您只向 storage/backup 的服务器发送加密数据。 收到的加密数据没有密钥。
您需要确保所有加密和解密都在用户设备本地进行。因此用户需要提供密钥。
用户不擅长提供高质量的密钥 material,因此,相反,要求用户提供密码,获取该密码并通过基于散列的密钥派生函数传递它,其参数使得功能慢(高操作,高内存要求)。像 pbkdf2
这样的算法和像 HMAC-SHA-2
这样的强 PRF 应该就足够了。
更新: 要回答您的具体问题,您需要执行以下步骤,您将需要使用支持从密码和对称加密中导出密钥的加密库,例如 libsodium。
- 首次使用时要求用户提供密码
- 运行这个密码通过密钥推导从中推导出一个密钥:https://libsodium.gitbook.io/doc/key_derivation
- 使用密钥执行用户数据加密:https://libsodium.gitbook.io/doc/secret-key_cryptography
- 销毁密钥并将数据发送到服务器进行备份