如何加密我网站上的用户内容,以便我甚至无法访问该内容?

时间:2011-10-07 16:47:52

标签: encryption

我需要基于每个用户加密我的Web应用程序中的内容。

我是root用户,不想访问用户的内容,期限。

如何制作,以便用户是唯一可以访问其内容的用户?也许我可以这样做,因此他们的登录密码的哈希充当加密和解密密钥(然后他们的密码在我的数据库中存储单向散列,并且加密/解密散列是在登录时从他们的原始密码生成并存储在一个本地的cookie)?但如果他们更改密码怎么办?然后我必须更新所有可能需要大量处理能力的内容。

是否有一种加密方法可以提供此功能,而无需在密码更改时重新加密内容?或许类似于Linux上的ecryptfs?研究ecryptfs是一个很好的起点吗?

这样做只有用户可以访问我的服务器上的内容(甚至不是我),甚至可行吗?

2 个答案:

答案 0 :(得分:11)

<强>过程:

  1. 生成随机密码以加密其内容。
  2. 使用提供的密码加密来自#1的随机密码。
  3. 将他们的密码存储为单向哈希(使用salt,可能是多哈希)。
  4. 密码更改时:

    1. 重新生成步骤#2中的值。
    2. 从步骤3重新生成哈希缓存。
    3. 登录后:

      1. 哈希密码并检查步骤3中生成的哈希值。
      2. 如果密码匹配 - 请使用实际提供的密码解密来自#2的随机密码。
      3. 使用#2中的随机密码来解锁在#1中加密的数据。
      4. 备注:

        • 在不知道随机秘密的情况下,没有人可以解码数据(#1)。随机密钥只能使用用户的实际密码(#2)解锁(缺乏暴力)。用户的实际密码仅以单向散列形式(#3)知道,因此您可以确认它是相同的,但无法对其进行解码并恢复#2。
        • 无法忘记密码处理(您可以重新生成#3,但#2中的随机密钥现在已丢失,因为锁定在其保管库中的所有内容都已丢失。)
        • 每次更改密码时,您都不必重新加密步骤#1中的所有内容,只需来自#2的(简单/快速)随机密码。
        • 如果您缓存了他们提供的密码,或者步骤1中生成的随机密码,或者他们(解密的)内容,可能会导致数据泄露。

答案 1 :(得分:-1)

您需要将密码用作密钥。

我不会嘲笑ecryptfs因为加密文件系统不是最佳解决方案。您不希望使用与其他用户相同的密钥加密一个用户的数据。

加密数据时,应生成一个随机字符串以用作salt。这可以防止有人使用预先生成的哈希列表来解密您的数据。它还会更改可能使用相同密码的两个人的哈希值。

当用户更改密码时,您必须重新加密数据并生成新的salt值。这是我期望作为客户的安全级别,因为我知道当我更改密码时,我会重新加密所有数据,以防止有人试图暴力破解我的密钥。

您可以在未加密的数据库中存储salt值。