11

我计划使用 MySQL,它的内置加密功能可以加密/解密某些表中的某些列。我担心的是我需要将密钥存储在某个地方。我当然可以将密钥存储在一个文件中并控制该文件的权限以及访问它的应用程序的权限,但这是否足够?我还可以创建一个 Web 服务来获取密钥或其他东西。

我在一家小商店里,我将是唯一一个(可能是另一个人)可以访问应用程序所在机器的人。 编辑:我应该补充一点,除非我添加了一个层,否则该应用程序有一个面向 Web 的部分需要解密数据。

我看起来很恶心,但似乎没有人有一个万无一失的答案。

这是您必须解决的问题之一吗?鉴于我正在使用 MySQL 和 PHP(可能是 Python),有没有更好的方法来解决这个问题?

4

3 回答 3

8

我不确定使用 MySQL 内置加密是否是解决您问题的最佳方法。

PHP 的M_CRYPT包被认为非常好,它使您可以灵活地选择最适合您需要的算法。

将您的密钥存储在其他服务器上有一个很大的优势:密钥与加密数据不在同一台机器上*)。因此,只要攻击者对受感染的机器没有足够的控制权,他们就无法获得密钥。
如果攻击者完全控制了存储数据的机器,他们很可能能够向 Web 服务查询密钥。

但是,将密钥从一台机器传输到另一台机器会打开一个需要保护的全新区域。可能涉及更多的密钥和更多的加密层,从而增加了出错的机会。

*)另一种选择是在网络服务器启动时输入密码并仅将其保存在内存中。

可能
的解决方案如果看到使用以下方法为具有 Web 访问权限的用户加密文件的解决方案(我不确定您的环境,但它可能会有所帮助):

  • 在创建用户时,会为新用户分配一个长随机密钥。
  • 此随机密钥存储在用户记录的加密列中。
    仅此列被加密,不影响其余记录的性能!
  • 随机密钥列的加密是使用 1 个主密码完成的,存储在文件或内存中。
    更好的选择是在启动您的网络服务器时输入密码并将其仅存储在内存中。
    另一种方法是让用户输入密码并使用它来加密/解密随机密钥列,但我不确定这是否会增加或降低安全性
  • 每个需要加密的文档都使用该用户的随机密钥加密,然后存储在磁盘上。
  • 文档以最小权限存储在文件系统中。

The advantages of this approach are:
1. The random-key is encrypted in the database. So you still have the added security of the database-server, in combination with the encrypted column. 2. Documents are stored with different keys, if the attacker gets hold of a key, only part of the documents is compromised.

However:
If the attacker gets hold of the master password and has read access to the user-table, the entire system is, once more, broken.

于 2009-05-02T10:35:31.760 回答
4

我可能会将它存储在一个不可通过网络访问的目录中的文件中,并尽可能地使用文件系统权限锁定。

您的面向 Web 的脚本不应使用变量打开任何文件系统文件,尤其是用户提供的文件。甚至不要让他们选择通过输入过滤器传递某些内容(您正在过滤用户提供的数据,对吗?)并可能放弃密钥文件的内容。只保留硬编码字符串的文件路径和define()。由于您的大部分数据都存储在 MySQL 中,因此这应该不是问题。

在进行解密时,将密钥读入一个干净初始化的变量,进行解密,然后覆盖密钥变量(比如用 x 的字符串)并取消设置变量。这可能听起来有点偏执,但是如果您将密钥在内存中的清除时间减至最少,并将其与 PHP 脚本周围的所有其他变量隔离开来,它就不会降低您安全性。

如果您和另一个人是唯一可以物理访问机器的人,那么这可能很好。如果有人闯入并偷走了盒子,那么无论如何,他们已经掌握了您的所有数据,所以游戏结束了。

于 2008-10-24T08:56:25.913 回答
1

您似乎正在考虑使用“列特定”密钥与“AES_ENCRYPT”和“AES_DECRYPT”一起使用。正如评论者所说,这是一个坏主意,因为任何入侵都可以访问所有数据。

如果您使用“用户提供的”密码,无论是否加盐,您都会更加安全。

也就是说,如果加密密钥只能由使用它的应用程序读取,那么您可能“足够好”。如果机器被闯入,他们将用一个键更快地获取您的数据。

于 2008-10-24T03:02:21.183 回答