将加密数据保存在内存中

时间:2010-02-27 12:04:21

标签: c++ security winapi encryption stl

我正在使用listview控件,它使用AES加密将数据保存到文件中。我需要在std :: list类的std :: string中保存listview中每个项的数据。我应该只在std :: list中加密数据并在需要时解密为局部变量吗?或仅仅将其加密到文件中是否足够?

4 个答案:

答案 0 :(得分:6)

要回答这个问题,您需要考虑攻击者是谁(即您试图隐藏数据的人是谁?)。

为此目的,如果你处理一个简单的Threat Model(基本上:你担心谁,你想要保护什么,他们可能进行的攻击类型及其风险)会有所帮助。

完成此操作后,您可以确定是否值得您保护数据不被写入磁盘(即使仅在内存中解密时)。

我知道这个答案看起来似乎没什么用处,但是我希望它能帮助你意识到你需要明确说明你的攻击者(并因此知道)你的攻击者,然后才能正确地防御它们(也就是说,你可能会结束)实施完全无用的防御,等等。)

答案 1 :(得分:0)

您是否会多次解密同一个项目?如果您不关心内存中攻击,那么性能可能是另一个需要考虑的问题。

如果您有时间,可能需要对您的解决方案进行编码以允许两种可能性。因此,如果您选择缓存加密,那么如果性能成为问题,那么稍后更改为解密的内存中解决方案并不算太多。

答案 2 :(得分:0)

目前还不清楚你试图防御的是什么攻击。如果攻击者具有对系统的本地访问权限,那么他们可以将类似OllyDBG的调试器附加到进程以观察其内存。攻击是在AES调用时设置一个断点,然后观察传入和返回的数据,非常简单。

答案 3 :(得分:0)

我同意丝绸的回答,你必须从一个基本的威胁模型开始。只是想指出,当处理内存中的敏感信息时,即使你没有把它写出来,你也完全有权担心这些信息可能会在磁盘上结束。

例如,内存中的数据可以写入交换空间,也可以写在核心文件中,也可以从其他地方(例如电子邮件附件或复制到其他地方)。您可以在不加密内存中的数据的情况下处理这些问题,因为这可能只是将问题转移到处理密钥来解密该数据......

相关问题