我在一个小商店,我将是唯一一个(可能是另一个人),可以访问应用程序所在的机器.编辑:我应该补充说,面向Web应用程序的Web部分将需要解密数据,除非我添加了一个层次.
我看起来很恶心,但没有人似乎有一个防弹的答案.
PHP的M_CRYPT软件包被认为是非常好的,它可以灵活地选择最适合您需求的算法.
将密钥存储在其他服务器上有一个很大的优点:密钥与加密数据不在同一台机器上).所以只要攻击者对受攻击的机器没有足够的控制权,就无法得到钥匙.
如果攻击者对数据进行完全控制,那么他们很有可能会查询该Web服务的密钥.
然而,将密钥从一台机器传输到另一台机器打开了需要保护的整个新区域.可能涉及更多密钥和更多加密层,从而增加错误的机会.
*)另一个选项是在网络服务器启动时输入密码,并将其保存在内存中.
可能的解决方案
如果看到使用的解决方案使用以下方法来加密具有Web访问权限的用户的文件(我不确定您的环境,但可能会有所帮助):
>在用户创建时,为新用户分配一个长随机密钥.
>该随机密钥存储在用户记录中的加密列中.
(只有这个列被加密才能影响其他记录的性能!)
>随机密钥列的加密使用1个主密码,存储在文件或内存中.
(更好的选择是在盯着您的网络服务器时输入密码,并将其存储在内存中.)
(另一种方法是让用户输入密码并将其用于加密/解密随机密钥列,但是我不知道这是否会增加或减少安全性)
>需要加密的每个文档都使用该用户的随机密钥进行加密,然后存储在磁盘上.
>文件以文件系统中的最小权限存储.
这种方法的优点是:
随机密钥在数据库中加密.因此,您还可以与加密列结合使用数据库服务器的附加安全性.
2.文件存储有不同的密钥,如果攻击者持有密钥,则只有部分文档被泄露.
然而:如果攻击者掌握了主密码并对用户表进行了读取访问,则整个系统再次被破坏.