我正在研究linux的密碼管理器應用程序,我正在使用Python。mlock python中的變量
由於安全原因,我想調用mlock
系統調用以避免在硬盤驅動器上交換密碼變量。
我注意到python本身沒有包裝這個函數。
所以有什麼辦法可以避免交換?
感謝
我正在研究linux的密碼管理器應用程序,我正在使用Python。mlock python中的變量
由於安全原因,我想調用mlock
系統調用以避免在硬盤驅動器上交換密碼變量。
我注意到python本身沒有包裝這個函數。
所以有什麼辦法可以避免交換?
感謝
對於CPython的,有這個不涉及編寫Python的C擴展,因爲mlock
作品在頁面上,而不是對象沒有很好的答案。 str
對象的內部版本不同(在Py3.3及更高版本中,str
實際上可能有不同編碼的內存中的數據副本,有些在內部結構之後內聯,有些則是分開動態分配並通過指針鏈接) ),即使您使用來檢索必要的地址和mlock
- 他們都通過mlock
來電,您將有一個時間確定何時mlock
和何時munlock
。由於mlock
在頁面上工作,所以您必須仔細追蹤任何給定頁面中當前有多少個字符串(因爲如果您只是盲目地使用mlock
和munlock
,並且頁面中鎖定了多項內容,則第一個munlock
會解鎖所有這些; mlock/munlock
是一個布爾標誌,它不計算鎖和解鎖的數量)。
即使你管理,你仍然有密碼獲取和mlock
在此期間,數據可以被寫入交換之間的競爭,而這些高速緩存的替代編碼懶洋洋地計算,所以mlock
荷蘭國際集團在任何非NULL
指針給定的時間並不一定意味着這些指針可能以後不會填充。
您可以部分避免通過謹慎使用的mmap
模塊和memoryview
這幫問題(mmap
給你的內存頁,memoryview
引用所述存儲器而不復制它,所以可以用來mlock
頁),但你」 d必須從零開始構建它(不能使用getpass
模塊,因爲它將暫時存儲爲str
)。
簡而言之,Python不會在乎你想要的交換或內存保護;它信任交換文件被配置爲您想要的安全性(例如禁用或加密),既不提供額外的保護,也不提供您需要添加的信息。
基本上和[mlock是一個Python對象](https://stackoverflow.com/questions/29524020/mlock-an-object-from-python)(目前尚未回答)以及與[標記數據在Python中爲敏感]有關(https://stackoverflow.com/questions/982682 /標記數據作爲敏感合蟒)。 – ShadowRanger