Cryptography 如何存储加密密钥?
我查看了许多密码管理器,如keeper、1password、secret in,我正在跟随secret in password manager创建我自己的项目,并尝试添加相同的功能,但在以加密形式存储用户的数据(如他/她的机密、支付机密)时遇到了困难。我读了keeper的加密模型,但还是不明白服务器端加密密钥的存储位置?Cryptography 如何存储加密密钥?,cryptography,password-encryption,password-manager,Cryptography,Password Encryption,Password Manager,我查看了许多密码管理器,如keeper、1password、secret in,我正在跟随secret in password manager创建我自己的项目,并尝试添加相同的功能,但在以加密形式存储用户的数据(如他/她的机密、支付机密)时遇到了困难。我读了keeper的加密模型,但还是不明白服务器端加密密钥的存储位置? 我的数据库中有一些数据是用一个密钥对称加密的。我正在寻找一种更安全的方法来存储加密密钥,而不是将其硬编码到我的代码中。在哪里可以安全地存储它?这里的方法非常简单 您只能将加密数
我的数据库中有一些数据是用一个密钥对称加密的。我正在寻找一种更安全的方法来存储加密密钥,而不是将其硬编码到我的代码中。在哪里可以安全地存储它?这里的方法非常简单 您只能将加密数据发送到服务器进行存储/备份。 收到的加密数据没有密钥 您需要确保所有加密和解密都在用户设备上本地进行。因此,用户需要提供密钥 用户不擅长提供高质量的密钥材料,因此,相反,要求用户提供密码,获取该密码并通过基于散列的密钥派生函数传递,该函数的参数会使函数变慢(高ops、高mem要求)。像
pbkdf2
这样的算法和像HMAC-SHA-2
这样的强PRF应该足够了
更新:
要回答您的特定问题,您需要执行以下步骤,您将需要使用一个加密库,该库支持从密码和对称加密派生密钥,如libnaid
这里的方法非常简单 您只能将加密数据发送到服务器进行存储/备份。 收到的加密数据没有密钥 您需要确保所有加密和解密都在用户设备上本地进行。因此,用户需要提供密钥 用户不擅长提供高质量的密钥材料,因此,相反,要求用户提供密码,获取该密码并通过基于散列的密钥派生函数传递,该函数的参数会使函数变慢(高ops、高mem要求)。像
pbkdf2
这样的算法和像HMAC-SHA-2
这样的强PRF应该足够了
更新:
要回答您的特定问题,您需要执行以下步骤,您将需要使用一个加密库,该库支持从密码和对称加密派生密钥,如libnaid
你能告诉我加密和解密是如何在用户设备上本地进行的吗?如果可能的话,请提供一些与设备级加密相关的研究资料。谢谢。@MayurKoli添加到回答中谢谢你的支持,先生请澄清我的一个疑问,我是否在客户端使用libnaid库(javascript)加密/解密用户的数据,然后将数据发送到服务器。是的,就是@MayurKoli-这就是设备级加密。客户端加密在使用设备上。您能告诉我加密和解密是如何在用户设备上本地进行的吗?如果可能,请提供一些与设备级加密相关的研究资料谢谢。@MayurKoli补充到回答中谢谢您的支持,先生请澄清我的一个疑问,我是否使用客户端的libnaudi库(javascript)加密/解密用户的数据,然后将数据发送到服务器。是的,就是@MayurKoli-这就是设备级加密。使用设备时的客户端加密。