从内存中删除敏感信息

时间:2015-02-12 17:16:18

标签: c security memset

阅读this question后,我很好奇如何在C中做到这一点。当从另一个程序接收信息时,我们可能不得不假设内存是可写的。

我发现this声明可以优化常规memset并this comment说明memset是错误的方法。

1 个答案:

答案 0 :(得分:1)

您提供的示例不太有效:编译器可以在检测到没有副作用且不再使用该值时优化输出变量设置操作。

因此,如果您的代码使用可从多个位置访问的某个共享缓冲区,memset将正常工作。几乎。

不同的处理器使用不同的缓存策略,因此您可能必须使用内存屏障来确保数据(零)已从缓存中到达内存芯片。

因此,如果您不担心硬件级别的详细信息,请确保编译器无法优化操作就足够了。例如,释放它之前的memsetting块将被执行。

如果要确保从所有硬件项中删除数据,则需要检查平台上如何实现数据缓存,并使用适当的代码强制缓存刷新,这在多核计算机上可能非常重要。