Mysqlencryption和密钥pipe理

我正在PHP / MySQL中开发一个本地Intranet系统来pipe理我们的客户端数据。 看来最好的做法是在inputMYSQL服务器时encryption敏感数据。

但是,我不清楚,在保持数据可用的情况下,最好的办法是什么。

这似乎是一个棘手的问题来回答:密钥存储在哪里? 如何最好地保护钥匙? 如果密钥存储在每台用户的机器上,如果机器被利用,如何保护它? 如果密钥被利用,如何更改密钥?

如果关键是要存储在分贝,如何保护它呢? 用户将如何访问它?

如果有人能指出我正确的方向,或者给我一些提示,我会非常感激。

谢谢。

实际上没有任何内置的MySQLfunction可以处理复杂的encryption密钥设置。 您需要在您自己的PHP和/或浏览器端(JavaScript?)代码中实现大部分encryption逻辑。

但是你所expression的担忧有点奇怪:看起来你唯一真正关心的是来自远程客户端台式机/笔记本电脑工作站的SQL注入或暴力破解(我猜是猜测)。 这让我怀疑你已经有一些其他未提及的安全措施了,而且你已经分析了可能的妥协途径。

  • 首先,我假设你有防火墙规则保护MySQL / PHP主机免受来自未经批准的远程客户端IP的任何访问。 如果我是正确的,那么你只是担心受害用户的工作站的攻击是有道理的。

  • 此外,我假设您了解,如果远程客户端主机上的攻击者可以升级到root / Admin privs,或者直接危害真实用户自己的帐户,那么无论encryption或其他安全措施如何,该客户端的数据都不会受到任何保护。 (攻击者可以从保存在磁盘上的任何位置读取密钥,也可以在真实用户login时input这些密钥,密钥导致数据。

从这两个假设开始,我们有理由得出结论,唯一的两个相关的威胁是:A)暴力密码猜测; B)SQL注入尝试:

  • 如果攻击者没有获取真实用户的密钥,或者他想访问的不仅仅是真实用户的数据,他可以尝试为真实用户或其他帐户强行login信用卡。 (理论上,您可以将每个帐户locking到特定的远程客户端IP,这也有助于划分风险。)
  • 如果攻击者确实得到了真实用户的有效密钥,他就有了一个通过login屏幕的途径(这可能足够简单,以确保安全),可能会出现错误的应用程序代码的软肋。 来自真实用户的上下文的成功的SQL注入也可以让他访问其他客户端的数据。

现在,让我们来谈谈服务器端encryption如何应用于这些情况:

  • 服务器端encryption绝对有助于抵御SQL注入威胁。 如果行值在数据库表中被encryption,则攻击者只能看到属于其他帐户的数据的乱码密文。 威胁包含在内,分隔。
  • 暴力强制密码猜测,但是,面对服务器端encryption的攻击者并没有真正的困难。 无论用户的密钥是存储在服务器上还是从密码中现场生成,唯一重要的是您是否拥有正确的密码。 服务器决定让你使用有效的存储密钥,因为它检查你的密码是正确的,或者它为你计算有效密钥,因为你的密码是生成密钥的正确input。

另一方面,客户端encryption实际上使暴力密码攻击无关紧要。 你不能蛮力强制build造一把钥匙。 客户端encryption与服务器端encryption保持基本相同的防SQL注入级别。 客户端可以在login时将密钥传递给服务器,并在内存中保留一个副本,直到会话结束,这将encryption服务器上的CPU负担。 或者,客户端可以在浏览器中自行处理encryption/解密。 这两种技术都有起伏:

  • 将密钥传递给服务器的代码和pipe理要容易得多,而且由于更优化的encryption代码(可能编译为C),通常要快得多。
  • 纯粹的客户端方法提供了额外的安全性,因为即使攻击者在服务器上获取root权限,他仍然无法读取encryption的数据,并且他永远不会读取它。 唯一可能的攻击媒介是危害远程客户端工作站。

最后,我要指出的是,在数据库中encryption数据有一些巨大的操作缺点。 由于encryption数据表示本质上是随机模式,因此索引,连接等基本数据库function不起作用。 客户承担了巨大的逻辑负担,并可能失去数据库function通常带来的许多好处。

您可能需要查看ezNcrypt ,它使用ecryptfs,访问控制和密钥pipe理为MySQL数据库和其他进程的Linuxencryption提供高安全性和性能。 不,我不为他们工作。

你可以使用Scytale。 它是现代DBMS和Web应用程序的NoSQLencryption代理。 支持多收件人和群组encryption。 加载了强大的RSA / AES密码系统。 它也是100%免费和开源的。

https://bitbucket.org/maximelabelle/scytale