Cryptography 如何存储加密密钥?

Cryptography 如何存储加密密钥?,cryptography,password-encryption,password-manager,Cryptography,Password Encryption,Password Manager,我查看了许多密码管理器,如keeper、1password、secret in,我正在跟随secret in password manager创建我自己的项目,并尝试添加相同的功能,但在以加密形式存储用户的数据(如他/她的机密、支付机密)时遇到了困难。我读了keeper的加密模型,但还是不明白服务器端加密密钥的存储位置? 我的数据库中有一些数据是用一个密钥对称加密的。我正在寻找一种更安全的方法来存储加密密钥,而不是将其硬编码到我的代码中。在哪里可以安全地存储它?这里的方法非常简单 您只能将加密数

我查看了许多密码管理器,如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-这就是设备级加密。使用设备时的客户端加密。