出于安全考虑,我目前正在研究如何避免在执行程序期间交换一些数据块。
据我搜索,我在Linux上发现mlock,这似乎是我需要的工具,以及Windows上的VirtualLock。
对于后者,我发现了不同的意见。 the documentation表示
进程锁定的页面保留在物理内存中,直到进程解锁或终止。
然而,人们似乎不同意并声称VirtualLock only lock the memory in the working set of the process,因此只要程序的至少一个线程正在运行,内存就不会被交换。这意味着如果由于某种原因阻塞了每个线程,数据可能会被换出。
有人能为我澄清这一点吗? 如果文档确实是错误的,这只是一个理论风险,还是我应该认真考虑?我可以使用什么解决方案来真正锁定内存中的内存?
如果可以提供帮助,我的目标是确定在加密应用程序中擦除内存的良好做法和不良做法
编辑:this article回答这个问题,肯定会锁定在RAM中。然而它引发了另一个问题:如何摆脱缓存问题?我最终可能会得到几份我的数据......
答案 0 :(得分:2)
如果您需要安全性,您实际上有两种选择:
问题在于,即使您将ram锁定到位,如果其他进程具有正确的访问权限,其他进程也可以读取它。有一些使用进程隔离的方法可能会阻止这种情况,但是它们需要访问MS限制DRM开发人员的SDK。
请记住,当您完成内存后,您需要使用编译器无法优化的$(document).on("click" , function () {
if($('#service-icon-button').css("margin-left") === "480px")
{
$('.service-menu').animate({"margin-left": '-=480'});
$('#service-icon-button').animate({"margin-left": '-=480'});
}
});
清除它。
答案 1 :(得分:0)
使用飞地怎么样? https://openenclave.io/sdk/ Tldr:它使用了一项新的CPU功能,甚至可以从内核模式代码中隔离出一定范围的内存:
“安全区应用程序将其自身分为两个组件(1)不信任的组件(称为主机)和(2)受信任的组件(称为安全区)。安全区是一个安全的容器,其内存受保护,不会受到外部实体的攻击。这些保护使飞地能够执行安全计算,并确保不会泄露秘密。”