我计划使用 MySQL 及其内置加密功能来加密/解密某些表中的某些列。我担心的是我需要将密钥存储在某个地方。我当然可以将密钥存储在文件中并控制该文件的权限以及访问它的应用程序的权限,但这足够了吗?我还可以创建一个网络服务来获取密钥或其他东西。
我在一家小商店里,我是唯一一个(可能还有其他人)可以访问应用程序所在机器的人。编辑:我应该补充一点,该应用程序有一个面向 Web 的部分,除非我添加了一层,否则需要解密数据。
我看起来很恶心,但似乎没有人能给出一个万无一失的答案。
这是您必须满足于足够好的问题之一吗?鉴于我正在使用 MySQL 和 PHP(可能是 Python),是否有更好的方法来解决这个问题?
我不确定使用 MySQL 内置加密是否是解决您问题的最佳方案。
PHP's M_CRYPT软件包被认为非常好,它使您可以灵活地选择最适合您需求的算法。
Storing your key on some other server has one big advantage: the key is not on the same machine as the encrypted data*). So as long as the attacker does not have enough control over the compromised machine, they cannot get to the key.
If the attacker gains full control of the machine the data is stored on, they most likely will be able to query the web-service for the key.
然而,将密钥从一台机器传输到另一台机器开辟了一个需要保护的全新区域。可能涉及更多密钥和更多加密层,从而增加了出错的机会。
*) The other option is to enter the password upon webserver start up and only keep it in memory.
可能的解决方案
如果看到采用的解决方案使用以下方法为具有 Web 访问权限的用户加密文件(我不确定您的环境,但它可能会有所帮助):
- 创建用户后,将为新用户分配一个长随机密钥。
- 该随机密钥存储在用户记录的加密列中。
(仅此列被加密,以免影响其余记录的性能!)
- 随机密钥列的加密是使用 1 个主密码完成的,存储在文件或内存中。
(更好的选择是在启动网络服务器时输入密码,并将其仅存储在内存中。)
(另一种方法是让用户输入密码并使用它来加密/解密随机密钥列,但我不确定这是否会增加或降低安全性)
- 每个需要加密的文档都使用该用户的随机密钥进行加密,然后存储在磁盘上。
- 文档以最小权限存储在文件系统中。
这种方法的优点是:
1. 随机密钥在数据库中被加密。因此,您仍然可以获得数据库服务器与加密列相结合的额外安全性。
2. 文档使用不同的密钥存储,如果攻击者掌握了密钥,则仅部分文档被泄露。
However:
如果攻击者掌握了主密码并具有对用户表的读取权限,则整个系统将再次被破坏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)