gpt4 book ai didi

ruby-on-rails - 在 ruby​​ 中存储可解密密码的安全方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:15 26 4
gpt4 key购买 nike

我想以安全的方式在数据库中以加密形式存储一些 key 。同时,我需要在我的代码中的某处使用非加密(原始)形式的 key 。我计划使用 PBKDF2 进行密码哈希处理 PBKDF2 .是否可以使用 PBKDF2 以加密形式解密存储在数据库中的 key 。或者是否有任何简单和安全的程序可用?

最佳答案

密码和 key 通常以散列形式存储。这意味着它们在保存到数据库之前通过哈希函数进行处理。一个好的散列函数,如 bcrypt,具有以下特性:

  • 相同的输入产生相同的输出
  • 它针对不同的输入产生非常不同的输出
  • 它的输出与随机输出没有区别
  • 不可逆

最后一个属性具有非常重要的安全隐患:当有人访问数据库时,他们无法恢复原始 key ,因为哈希函数是不可逆的,特别是当哈希被加盐以防止攻击者使用彩虹表时。

这意味着如果您想稍后恢复 key ,您必须以加密(不是散列)形式保存它们。加密函数具有与散列函数类似的属性,关键区别在于它实际上是可逆的。对于此解密步骤,您需要一个 key ,该 key 需要存储在某处。

您可以将 key 存储在您的应用程序配置中,但这意味着如果有人可以访问您的服务器,他们将能够检索加密 key 并解密所有存储的 key 。

我建议另一种方法,允许用户只检索他们自己存储的 key 。它基于这样一种想法,即使用只有用户知道的用户特定密码对 key 进行加密。每当您需要执行需要存储或检索 key 的操作时,系统都会提示用户输入密码。这样,您自己和攻击者都无法检索它们,但如果用户通过输入密码允许,您的程序可以访问它们。

  • 在数据库中存储一个传统的散列用户密码,例如使用 bcrypt
  • 允许用户使用以下程序存储额外的密码:
    • 提示输入用户密码和要存储的 key
    • 散列密码并与数据库进行比较以进行身份​​验证
    • 为每个输入的 key 生成盐
    • 使用用户输入的密码和盐来加密 key 以存储例如使用 AES 加密
    • 在数据库中存储盐和加密 key
  • 在需要纯文本形式的操作中检索存储的 key :
    • 提示输入用户密码
    • 散列密码并与数据库进行比较以进行身份​​验证
    • 从数据库中检索加密 key 和盐
    • 使用用户密码和盐解密存储的 key

注意从应用程序日志中删除用户提交的密码 ;-)

关于ruby-on-rails - 在 ruby​​ 中存储可解密密码的安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27855089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com