我不确定是否使用MySQL构建加密将是解决您的问题的最佳解决方案。
PHP的M_CRYPT包被认为是相当不错的,它使您能够灵活地选择最适合您需求的算法。
将您的密钥存储在某些其他服务器上有一大优点:密钥与加密数据不在同一台机器上*)。所以只要攻击者没有足够的权限控制被盗用的机器,他们就无法进入密钥。
如果攻击者完全控制数据存储在机器上,他们很可能会向Web服务查询密钥。
但是,将密钥从一台机器传输到另一台机器打开了一个需要保护的整个新区域。可能涉及更多密钥和更多加密层,从而增加犯错的机会。
*)另一种方法是在网络服务器启动时输入密码并且只保存在内存中。
可能的解决方法
如果看到采用的解决方案,使用下面的方法用于与网络接入用户的加密文件(我不知道你的环境,但它可能会有所帮助):
- 在创建用户后,一个长的随机密钥被分配给新用户。
- 该随机密钥存储在用户记录的加密列中。
(仅此列被加密,以不影响记录的其余部分的性能!)
- 随机键列加密与1个主密码完成的,存储在文件中或在内存中。
(更好的选择是在盯着你的Web服务器上输入密码,只有将其存储在内存中。)
(另一种方法是让用户输入密码,并用它来加密/解密的随机但我不确定这是否会增加或减少安全性)
- 每个需要加密的文档都使用该用户的随机密钥加密,然后存储在磁盘上。
- 文件在文件系统中以最小权限存储。
这种方法的优点是:
1.随机密钥在数据库被加密。因此,您仍然拥有数据库服务器的附加安全性,并结合加密列。 2.文档存储在不同的密钥中,如果攻击者获得密钥,则只有部分文档被泄露。
但是:
如果攻击者得到主密码的保持和已经阅读访问用户表,整个系统,再次,破损。
加密列的目的是什么?当然,聪明的做法是通过应用程序加密行中的敏感数据,并将盐与行一起存储,以便解密更加困难。 – Aupajo 2008-10-24 02:22:51