您将如何处理数据库中的敏感数据?

时间:2010-09-13 16:17:16

标签: database encryption

在某些项目中,即使我们的工作人员也无法访问。理论上,我们有政策确保他们不这样做。在实践中,我们在非洲并且政策并不意味着很多,无论你强制执行多么强大。

我想知道有没有办法加密数据库中的数据,所以:

  • 每个用户密码加密和解密自己的数据,并且只有自己的数据;
  • 在此过程中尽可能晚地解密数据,以确保用户的最大安全性。理想情况下,我认为它会在客户端,但我很想听到在服务器端做一些我不知道的疯狂事情。
  • 数据仍然是可搜索的。这甚至可能吗?

我的第一个想法是:“如果客户想要这种级别的保护,那么在虚拟机上给他自己的托管并加密硬盘,那么所有的维护都必须用它的余量来完成。”

3 个答案:

答案 0 :(得分:3)

我无法想出一个奇特的策略,就是我如何实现这个:

请记住,当用户更改密码时,您必须重新加密所有内容。我总是使用相同的加密密钥,但密钥是使用用户的明文密码加密的。所以我只需要重新加密密钥。用户的密码存储为salted哈希,因此即使他看到哈希值,也无法解密密钥和数据。

它的工作原理如下:

  1. 用户输入明文密码

  2. 创建盐渍哈希

  3. 检查生成的哈希值是否与数据库中的哈希值匹配(身份验证)

  4. 如果是,则使用他的明文密码解密数据密钥

  5. 使用密钥

  6. 解密存储的数据

    这不会给你100%的安全性,但会改善它。

答案 1 :(得分:0)

以下是我能想到的一些事情:

您应该加密存储在存储的数据和读取时的数据。使用集成在RDBMS级别而不是数据层的解决方案。

要与应用程序之间传输数据,请使用HTTPS Web服务。

如果您有桌面应用程序,请不要在本地存储任何数据和日志文件等。

如果是网络应用,也可以将应用设为HTTPS。

安全性必然会使应用程序比使用普通数据慢一点,但这是您要支付的价格。

答案 2 :(得分:0)

这实际上取决于您使用数据做什么和在哪里(在客户端或服务器上)。

例如,您的应用程序无需知道密码本身即可在验证期间对其进行验证。此用例的最佳实践是仅存储密码的加密哈希(例如sha1)和随机盐。这足以验证它,但只给出哈希和盐,它需要几乎无限的时间来计算普通密码。

如果您必须通过不安全的渠道交换数据,加密可能是一种灵魂。但请记住,为了处理数据,您必须解密它们。因此,如果在同一台机器上进行解除加密和加密,那就毫无意义了。如果需要解密,那么你要做多晚并不重要,因为无论如何必须给出密钥。

例如,您可以使用加密来保护服务器和客户端之间的通信。您甚至可以使用异步加密在服务器上生成只有客户端能够读取的消息,反之亦然。因此,一旦在服务器上生成消息并使用客户端的公钥加密,即使服务器也不能再读取消息,因为只有客户知道的私钥才能解密。

当您在服务器上有数据时,密码学无法解决的问题是,服务器应该能够读取这些数据以便处理它们,但不受限制的人类用户不应该使用该服务器的priveleages。