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

3
在一些项目中,我们有非常重要的数据,即使是我们的员工也不应该访问。理论上,我们有政策来确保他们不会访问。实际上,我们在非洲,无论你如何强制执行,政策都没有多大意义。
我想知道是否有一种方法可以加密数据库中的数据,以便:
每个用户密码只能加密和解密自己的数据,而且只能是自己的数据;
尽可能晚地解密数据,以确保对用户的最大安全性。理想情况下,这应该在客户端完成,但我很想知道是否有可能在服务器端做出一些我不知道的疯狂的事情。
数据仍然可以搜索。这真的可能吗?
我的第一个想法是:“如果客户需要那种级别的保护,那么给他自己的虚拟机托管并加密硬盘,然后必须经过他的允许才能进行所有维护”。

这完全取决于数据的类型。如果是像用户配置文件这样的东西,并且所有搜索都仅通过用户名完成 - 那么这很简单。否则 - 就要看情况而定。 - Radomir Dopieralski
不,这里涉及到数字、微积分等。 - Bite code
也许我们可以为每个用户生成一个加密的内存中加载的小型数据库,并在第一次请求时进行设置,然后在会话过期时关闭。 - Bite code
我们使用MySQL,但我们也可以使用其他任何东西。 - Bite code
3个回答

3
我无法提供花哨的策略,只能告诉你我是如何实现的:
请记住,当用户更改密码时,您必须重新加密所有内容。我一直使用相同的加密密钥,但该密钥是使用用户的明文密码进行加密的。因此,我只需重新加密密钥即可。用户的密码存储为盐哈希,因此即使他看到哈希值,也无法解密密钥和数据。
它的工作原理如下:
1. 用户输入明文密码 2. 创建盐哈希 3. 检查生成的哈希是否与数据库中的哈希匹配(身份验证) 4. 如果是,则使用他的明文密码解密数据的密钥 5. 使用密钥解密存储的数据
这不会给您100%的安全保障,但可以提高安全性。

4
如果用户进行密码重置,那么他将无法使用新密码解密密钥,这会导致他无法解密自己的数据。我有所遗漏吗?您如何解决这个附加情况? - andres.riancho

0

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

在存储数据时,应该加密存储,并在读取时进行解密。使用集成在RDBMS层而不是数据层的解决方案。

对于应用程序中的数据传输,使用HTTPS Web服务。

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

如果是Web应用程序,请确保应用程序也是HTTPS。

安全性肯定会使应用程序比使用普通数据慢一些,但这是您需要付出的代价。


0

这真的取决于你在客户端或服务器上对数据进行什么样的操作。

例如,您的应用程序在验证期间不需要知道密码本身。对于此用例的最佳实践是仅存储密码的加密哈希(例如sha1)和随机盐。这足以验证它,但只给出哈希和盐,将需要几乎无限的时间才能找出明文密码。

如果必须通过不安全的通道交换数据,则加密可以是一种解决方案。但请记住,为了处理数据,您必须对其进行解密。因此,如果加密和解密在同一台机器上完成,则相当无意义。如果需要解密,则无论何时进行解密都无关紧要,因为必须提供密钥。

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

你绝对无法通过密码学解决的问题是,当你在服务器上有数据时,服务器应该能够读取这些数据以便处理,但是普通用户没有权限访问这个服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接