2011-09-10 28 views
3

我有一个私钥,我使用用户的密码进行解密,但我需要经常使用这个私钥,并且我不想将它解密到内存中。如何将私钥保存在安全的内存中

我想到的一个选择是使用随机生成的一次性密码对私钥进行加密,并且每次使用它来替换密码,但仍将一次性密码保存在内存中。

我想过的另一个选择是使用OpenSSL内存BIO。从我的理解来看,它保证了它内部的数据安全(我不知道它是如何做到的,但这就是我所听到的)。

你认为哪个更好?有没有更好的选择? 谢谢! :-)

p.s. 我正在使用本机C++和OpenSSL。

+2

除非您有专用的安全硬件,否则无法以任何方式将密钥保存在内存中。您一定要查看各种安全内存API,以便您访问不可分页的内存并保证覆盖。为密钥添加另一层加密是可能的,但它本身可能会受到攻击......它实际上取决于您的威胁模型。 –

+0

为什么需要密码多次?是否需要重新验证?实际上需要认证吗? –

+0

@Kerrek:你知道OpenSSL的BIO是否是这种安全的内存API? – TCS

回答

2

根据定义您在寻找的是手段Security though obscurity。在这种情况下,用户比设备更能控制设备。秘密必须以纯文本形式存在,并且攻击者(用户)可以附加调试器并查看该值。永远不会有解决这个问题的办法,它不是安全的。

+0

感谢您的回答。我没有通过默默无闻的方式寻找某种安全感,但我无法得到更好的东西,所以我就这样问道:-)。 您的回答增强了我的悲哀怀疑,即没有软件解决方案来解决问题... 感谢您的回答! – TCS

0

您可能过度设计了应用程序的安全部分。事实是,您的应用程序可能会随时从内存中换出,这意味着在您甚至能够从内存中删除未加密的版本之前,可以将密钥写入磁盘。

正如有人建议的那样,您通常会使用其他一些支持内存的设备来存储密钥。由于它是外部设备,并没有映射到进程内存,交换或转储不会获得密钥。有便宜和昂贵的变体。我研究过的一个是nCipher HSM(硬件安全模块),它执行板上的所有操作。您的密钥在HSM内存中解锁,但所有加密操作都发生在设备上。他们甚至有能力让编译代码在HSM中运行在安全的环境中。但是,这些很昂贵。

相关问题