什么是在MySQL中使用/存储加密密钥的最佳方法

Chr*_*anz 11 php mysql security encryption key

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

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

我看起来很恶心,但似乎没有人有一个防弹的答案.

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

Jac*_*cco 7

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

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

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

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

*)另一个选项是在webserver启动时输入密码,只保留在内存中.

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

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

这种方法的优点是:
1.随机密钥在数据库中加密.因此,您仍然可以将数据库服务器的安全性与加密列结合使用.2.文档存储有不同的密钥,如果攻击者获得密钥,则只有部分文档被泄露.

但是:
如果攻击者获得主密码并具有对用户表的读访问权限,则整个系统将再次被破坏.