有没有办法从Python调用the POSIX mlock
function? mlock
的效果是禁用交换某些对象。
我知道在保护加密密钥时还存在其他问题,我只想知道如何将它们包含在RAM中。
答案 0 :(得分:3)
对于CPython,没有好的答案不会涉及编写Python C扩展,因为mlock
适用于页面,而不是对象。即使您使用ctypes
来检索必要的地址,并mlock
- 通过ctypes
mlock
次来电话对其进行了编辑,您还是会有一段时间来确定到mlock
以及何时到munlock
。您需要知道所有受保护数据类型的内存地址和大小;由于mlock
适用于网页,因此您必须仔细跟踪任何给定网页中当前有多少对象(因为如果您只是盲目地mlock
和munlock
,那么还有更多要锁定一个页面,第一个munlock
将解锁所有这些; mlock/munlock
是一个布尔标志,它不计算锁定和解锁的数量。)
即使您进行了管理,您仍然会在数据获取和mlock
之间进行竞争,在此期间可以将数据写入交换。
您可以通过谨慎使用mmap
模块和memoryview
来部分避免这些问题(mmap
为您提供内存页面,memoryview
引用内存而不复制它,因此ctypes
可用于mlock
页面),但您必须从头开始构建它。
简而言之,Python并不像你想要的那样关心交换或内存保护;它信任交换文件配置为您所需的安全性(例如禁用或加密),既不提供额外保护也不提供您需要添加的信息。