为了安全起见,我目前正在研究如何避免在程序执行期间交换某些数据块。

就我的搜索而言,我在Linux上发现了mlock,这似乎正是我所需要的工具;在Windows上,发现了VirtualLock。

对于后者,我有不同的看法。 the documentation



但是,人们似乎不同意并声称VirtualLock only lock the memory in the working set of the process,因此只要程序的至少一个线程正在运行,内存就不会被交换。这意味着,如果出于任何原因阻止每个线程,则可能会交换数据。

有人能为我澄清这一点吗?
如果文档确实有误,这仅仅是理论上的风险,还是我应该认真考虑一下?我可以使用什么解决方案来真正锁定RAM中的内存?

如果有帮助,我的目标是确定在加密应用程序中擦除内存的好的做法和不好的做法

编辑:this article回答这个问题,它肯定是锁定在RAM中的。然而,这又引发了另外一个问题:如何摆脱缓存问题?我最终可能会得到我的数据的多个拷贝...

最佳答案

如果您需要安全性,那么实际上有两种选择:

  • 转到内核模式
  • 使用 CryptProtectMemory
  • 加密内存中的数据

    问题是,即使将ram锁定在适当的位置,其他进程也可以读取它们,只要它们具有正确的访问权限。有多种方法可以使用进程隔离来防止这种情况的发生,但是它们需要访问MS限制为DRM开发人员使用的SDK。

    请记住,当您使用完内存后,需要使用SecureZeroMemory清除它,编译器不会对其进行优化。

    关于c++ - VirtualLock真的按照它说的做吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49676457/

    10-11 19:13