方案如下:应临时存储加密密钥,以便应用程序的多个实例可以(按顺序)访问它。使用后,密钥当然应该从系统中删除。然而,这带来了一个问题。我接受只要存储密钥,系统就容易受到攻击,但我希望系统在存储密钥之前和之后都是安全的。
只需将密钥写入文件并在之后覆盖它就不会在所有情况下都有效:某些文件系统会将更改写入磁盘的不同部分,而不是写入相同的位置。在这种情况下,之后仍然可以检索密钥。我不能依赖具有全盘加密的用户。
然后,最合乎逻辑的选项似乎使用另一个将密钥保存在内存中的进程,但操作系统可能会在某些点将内存写入磁盘,导致出现与上述相同的问题。
可以加密密钥,但这不是更安全。临时存储密钥的全部意义在于,用户无需为程序的每次运行输入密钥。这意味着用于加密密钥的密钥也必须存储在某处,或者必须基于已知数据。如果存储了密钥,那么我们现在遇到了安全存储这个密钥的问题。如果它基于已知数据,则意味着可以在必要时再次生成密钥,因此加密几乎没用。
我知道有些操作系统提供API来保护数据,但这通常依赖于根据用户帐户信息生成加密密钥。即使这是特定于会话的,在会话结束之前数据也是不安全的(在删除密钥之后可能很长时间)。
是否有任何解决此问题的方法(不依赖于特殊硬件,不需要全盘加密等)?如果没有,在这种情况下我能做的最好的是什么?
编辑以澄清: 当密钥存储在内存中时,密钥不需要是安全的;此时,用户应该保证不可能进行物理访问,并且系统没有病毒。在使用密钥之后,应该从系统中删除密钥,以便之后任何具有物理访问权限或任何程序的人都可以检查所有内存和磁盘,而不再找到密钥的单个(可用)跟踪。 / p>
答案 0 :(得分:4)
你可以使用ramdisks(不是tmpfs)。见http://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt:
“另一个类似的东西是RAM磁盘(/ dev / ram *),它模拟物理RAM中固定大小的硬盘 ,你必须在顶层创建一个普通的文件系统。 > Ramdisks无法交换,您无法调整它们的大小。“
基本上,您需要在/ dev / ram *上创建一个文件系统,然后将其挂载到某处。但是,所有进程都可以访问此挂载点,而不仅仅是特定进程。