防止RAM分页到交换区域(mlock)

时间:2015-04-08 19:46:39

标签: python memory posix ram

有没有办法从Python调用the POSIX mlock functionmlock的效果是禁用交换某些对象。

我知道在保护加密密钥时还存在其他问题,我只想知道如何将它们包含在RAM中。

1 个答案:

答案 0 :(得分:3)

对于CPython,没有好的答案不会涉及编写Python C扩展,因为mlock适用于页面,而不是对象。即使您使用ctypes来检索必要的地址,并mlock - 通过ctypes mlock次来电话对其进行了编辑,您还是会有一段时间来确定到mlock以及何时到munlock。您需要知道所有受保护数据类型的内存地址和大小;由于mlock适用于网页,因此您必须仔细跟踪任何给定网页中当前有多少对象(因为如果您只是盲目地mlockmunlock,那么还有更多要锁定一个页面,第一个munlock将解锁所有这些; mlock/munlock是一个布尔标志,它不计算锁定和解锁的数量。)

即使您进行了管理,您仍然会在数据获取和mlock之间进行竞争,在此期间可以将数据写入交换。

您可以通过谨慎使用mmap模块和memoryview来部分避免这些问题(mmap为您提供内存页面,memoryview引用内存而不复制它,因此ctypes可用于mlock页面),但您必须从头开始构建它。

简而言之,Python并不像你想要的那样关心交换或内存保护;它信任交换文件配置为您所需的安全性(例如禁用或加密),既不提供额外保护也不提供您需要添加的信息。