从内存中删除敏感信息

Erasing sensitive information from memory

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

我发现 this stating that a regular memset maybe optimized out and this comment 指出 memsets 是错误的方法。

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

因此,如果您的代码使用一些可从多个位置访问的共享缓冲区,则 memset 可以正常工作。差不多。

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

因此,如果您不担心硬件级别的细节,确保编译器无法优化操作就足够了。例如,释放之前的内存设置块将被执行。

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