VirtualLock 真的如其所说吗?

2024-02-07

出于安全目的,我目前正在研究如何避免在程序执行过程中交换某些数据块。

据我搜索,我在Linux上找到了mlock,这似乎正是我需要的工具,在Windows上找到了VirtualLock。

对于后者,我发现了不同的看法。这文档 https://msdn.microsoft.com/en-us/library/windows/desktop/aa366895(v=vs.85).aspx

进程已锁定的页面将保留在物理内存中,直到进程解锁或终止。

然而,人们似乎不同意并声称VirtualLock只锁定进程工作集中的内存 https://blogs.msdn.microsoft.com/oldnewthing/20071106-00/?p=24573,因此只要程序至少有一个线程在运行,内存就不会被交换。这意味着,如果由于某种原因每个线程都被阻塞,数据可能会被换出。

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

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

Edit : 本文 https://blogs.msdn.microsoft.com/oldnewthing/20140207-00/?p=1833回答问题,肯定是锁在RAM里了。然而它又提出了另一个问题:如何摆脱缓存问题?我最终可能会得到我的数据的多个副本......


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

  1. 转移到内核模式
  2. 使用加密内存中的数据CryptProtectMemory https://msdn.microsoft.com/en-us/library/windows/desktop/aa380262(v=vs.85).aspx

问题是,即使您将内存锁定到位,其他进程也可以读取它(如果它们具有正确的访问权限)。有一些方法可以使用进程隔离来潜在地防止这种情况,但它们需要访问 MS 限制为 DRM 开发人员的 SDK。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VirtualLock 真的如其所说吗? 的相关文章

随机推荐