安全地将用户生成的文本存储在数据库中(Ruby / Rails)

时间:2010-12-10 01:45:35

标签: ruby-on-rails ruby security encryption

我正试图想出一种方法将用户生成的文本安全地存储在数据库中(这样只有用户才能访问他/她存储的文本)。我可以使用用户的密码作为密钥来加密和解密用户的文本条目,但是如果用户忘记了密码,就无法解密他们以前的内容/文本(因为Rails应用程序使用BCrypt只存储密码的哈希值。)

有谁知道如何做到这一点? Dropbox看起来像这样:“存储在Dropbox服务器上的所有文件都是加密的(AES-256),没有您的帐户密码就无法访问。” (http://www.dropbox.com/help/27)然而,他们允许您重置密码,我假设他们不会在任何地方存储您的纯文本密码。

我错过了什么?任何建议将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

逻辑规定只有两个选项:

  1. 使用服务器已知的密钥(用户的密钥哈希或其他标识符)进行加密。入侵者可能会读取所有加密数据,但用户永远不会丢失加密令牌,因为它位于您的服务器上。
  2. 您只使用用户已知的密钥(例如他的密码)加密数据。然后入侵者将无法读取加密数据,但如果用户丢失了密钥,则数据与一堆随机位一样好。
  3. 很明显Dropbox选择了(1)他们允许重置密码的事实。

答案 1 :(得分:-1)

以Gintautas的选项1为基础,采用双重加密计划:

  1. 使用服务器已知的密钥和
  2. 应用选项1
  3. 使用只有服务器知道的密钥以加密格式将数据库存储在磁盘上。例如,在加密卷中。当服务器启动时,必须手动输入密钥才能访问数据库。
  4. 第2部分提供的“静态安全性”可防止系统中的入侵者获得对数据库文件的访问权限。也许不是100%你所追求的确切安全性,而是越来越近了。