我有一个用户向其提交敏感数据的网站然后php脚本使用rijndael 256加密这些敏感数据并将其存储在mysql数据库中
问题是我想将密钥存储在一个安全的地方,只能通过php脚本访问,而不被任何其他人看到
答案 0 :(得分:2)
取决于您需要多大的数据安全性。您可以考虑为每个用户设置不同的安全密钥,方法是加密标识该特定客户的数据并将其附加到256位加密密钥上。但更好的方法是将密钥拆分并在整个密钥中插入加密数据。使解密变得更复杂。这意味着如果程序员可以访问密钥,程序员就无法简单地解密每个人的数据而无需访问客户的加密数据,这对每个用户都是不同的。
是的,程序员仍然可以将密钥回显到屏幕上,但他们还需要客户加密的数据,以便他们想要解密数据的每个客户。
如果适用,您也可以考虑使用公钥和私钥加密。客户/用户可以生成他们自己的密钥。客户将公钥放在网站上的表格中,该表格存储在数据库中,然后客户/用户将拥有私钥来解密数据。您使用公钥来加密数据。这意味着每个用户/客户都有自己的一组密钥。私钥甚至可以放在钥匙卡上并挂钩到计算机以验证访问。
答案 1 :(得分:0)
一种替代方法是让PHP脚本调用外部脚本(不一定必须是另一个PHP脚本;它可以是任何东西)来访问密钥。只要没有人对外部脚本具有写访问权限,或者如果您将密钥硬编码到其中,则读取对它的访问权限,那么它应该是相对安全的。如果将密钥存储在单独的文件中,则该文件只能由外部脚本的所有者读/写。
答案 2 :(得分:0)
您可以使用证书加密/解密,并让服务器在启动时请求证书的密码。
好处是你的密钥只在内存中,并且每个安装/服务器都可能不同。
但是,这种方法非常麻烦,通常仅在您拥有自己的系统管理员/不依赖于第三方托管服务提供商时才有效。
在数据库中为每个部分/用户/客户端生成加密密钥的中间解决方案,并使用每个客户端密钥加密敏感数据。这些每个客户端密钥使用主密钥加密并存储在数据库中,而主密钥存储在磁盘上的某个位置,具有最小的权限。
当您的服务器完全受到攻击时,这将无法保证您的安全,但在例如数据泄漏/部分泄露的情况下确实会限制风险。
如果问题是你不信任a)程序员或b)系统管理员,那你就不走运了。