2011-10-07 94 views
8

我需要在每个用户的基础上加密我的web应用程序中的内容。如何加密我网站上的用户内容,以至于我甚至无法访问内容?

我,root用户,不想访问用户的内容,句点。

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

是否有一种加密方法可以提供此功能,而不必在密码更改时重新加密其内容?可能是类似于Linux上的ecryptfs?研究ecryptfs是一个很好的开始?

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

+0

我不知道hushmail.com如何做到这一点。 – SQLMason

+0

以下是他们的加密白皮书:http://www.hushmail.com/public_documents/Hush%20Encryption%20Engine%20White%20Paper.pdf –

+0

从Hushmail的电子邮件回复:我们的系统的设计方式是:用您的密码可以将 加密的电子邮件在您的帐户中解密。密码本身是 存储在一个加密哈希,所以即使我们的工作人员看不到它。这意味着如果您的邮件被加密,我们无法阅读它,这意味着 。 –

回答

11

过程:

  1. 生成一个随机的秘密的内容进行加密。
  2. 使用他们提供的密码加密#1中的随机密码。
  3. 将他们的密码存储为单向散列(带盐,也许是多散列)。

当密码改变:

  1. 重新生成从步骤#2的值。
  2. 重新生成步骤3中的散列高速缓存。

一旦登录:

  1. 哈希密码和核对在步骤#3中生成哈希值。
  2. 如果密码匹配 - 使用实际提供的密码解密来自#2的随机密码。
  3. 使用来自#2的随机秘密来解锁在#1中加密的数据。

注:

  • 没有人可以在不知道随机秘密数据进行解码(#1)。随机密码只能用用户的实际密码解锁(#2)(缺少暴力)。用户的实际密码仅以单向散列形式(#3)已知,因此您可以确认它是相同的,但无法对其进行解码并恢复#2。
  • 忘记了密码的过程是不可能的(你可以重新#3,但在#2随机密钥,现在失去了作为一切锁在地窖内)。
  • 每次更改密码时,您都不必在步骤1中重新加密所有内容,只需要从#2中获取(简单/快速)随机密码。
  • 如果您在任何可能导致数据泄露的地方缓存提供的密码或步骤1中生成的随机密码或其解密内容。
+1

你生成了它,但只要你不存储它 - 没有。解决这个问题的唯一方法就是让他们的密码解码来自#2的加密表单。或者通过蛮力;)你可以在这一步使用他们的密码散列,但你*不能*使用你存储的散列表单(否则是的 - 你可以解密它,而不知道他们的密码) – Rudu

+0

对不起,我删除了我的评论,因为如果我更仔细地阅读了你的帖子,我问了一个我可以回答的问题。我喜欢你的想法。 –

+0

难道不可能产生随机的秘密客户端吗?通过这种方式,您确实不会看到秘密 –

-1

你明白你需要使用他们的密码作为关键。

我不会与ecryptfs猴子,因为加密的文件系统不是最好的解决方案。您不希望用另一个用户使用的相同密钥来加密一个用户的数据。

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

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

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

+1

使用eCryptfs,每个用户的数据都可以使用自己的密钥进行加密。 –

相关问题