防止RAM分页到交换区(锁定)
有没有办法从Python调用POSIXmlock
函数?的作用mlock
是禁用换出某些对象。
我知道在保护加密密钥方面还有其他问题,我只想知道如何将其包含在RAM中。
-
对于CPython,没有很好的答案,这不涉及编写Python
C扩展,因为它mlock
适用于页面而不是对象。即使您曾经ctypes
检索过必要的地址并mlock
通过ctypes
mlock
调用对它们进行了遍历,也很难确定何时到达mlock
和何时到达munlock
。您需要知道所有受保护数据类型的内存地址和大小;因为mlock
网页上的作品,你必须仔细跟踪多少个对象在任何给定的网页目前(因为如果你只是mlock
和munlock
盲目,有一个以上的东西锁在一个页面中,首先munlock
将解开所有的人;mlock/munlock
是一个布尔型标志,它不计算锁定和解锁的数量)。即使您能够做到这一点,在数据获取和
mlock
将数据写入交换之间仍然存在竞争。您可以通过仔细使用
mmap
模块和memoryview
s来部分避免这些问题(mmap
为您提供内存页面,memoryview
无需复制即可引用该内存,因此ctypes
可以用于mlock
该页面),但是您必须从头开始构建所有内存。简而言之,Python不在乎您想要的方式进行交换或内存保护。它信任将交换文件配置为所需的安全性(例如,禁用或加密),既不提供额外的保护,也不提供您需要添加该文件的信息。