【发布时间】:2015-10-08 00:40:10
【问题描述】:
想象一个非常标准的网站,用户使用电子邮件/密码对进行身份验证。对于密码,它已经使用随机盐进行了哈希处理,但其余数据保持未加密。
我们又向前迈了一步,使用
password密钥加密敏感数据,显然,应用程序应该知道 key 才能为其操作描述数据。我们不想在源代码中包含它,所以它保存在一个文件中,并在需要时由应用程序读取。
我们已保护文件,以便只有执行应用程序的用户才能读取它
(这点在下面的讨论后出现)我们已经考虑购买硬件 HSM,发现不可能(例如我们在虚拟机上运行服务器)
通过这种方式,我们相对受到保护,不会完全窃取数据库,对吧?但是,如果有人获得对具有读取权限的操作系统用户的访问权限,则可能会知道密钥。
问题是:保证此类密钥安全的最佳做法是什么?
【问题讨论】:
-
确保黑客无法访问您的服务器
-
也许更适合Security.SE。
-
@bish:嗯,是的......但安全措施的重点不就是保护自己免受您没有预见到的意外事情的影响吗?
-
您可以通过添加尽可能多的安全层来实现这一点。对文件等的访问权限绝对是朝着正确方向迈出的一步。显然,您无法防御“意外事件”,您只能确保它们不太可能发生。请注意,您无法使用密码加密任何内容,您需要一个加密密钥。最好确保使用正确的术语来描述您的协议。
-
是的,感谢您的指正。密钥文件必须确保应用程序可以读取。如果应用程序本身遭到入侵怎么办?我们能做些什么来应对这种风险吗?我在想将密钥保存在内存中的某个地方可能是合理的,这样只有特定的进程才知道它。我们可以将加密和解密例程移至单独的进程,并在其启动时提供密钥。即使有人在服务器上获得了 root 权限,他也无法读取另一个进程的内存。然而,对我来说,它看起来过于复杂。你怎么看?我有什么明显的遗漏吗?
标签: php security cryptography passwords