2015-09-28 25 views
4

我正在研究linux的密碼管理器應用程序,我正在使用Python。mlock python中的變量

由於安全原因,我想調用mlock‍‍系統調用以避免在硬盤驅動器上交換密碼變量。

我注意到python本身沒有包裝這個函數。

所以有什麼辦法可以避免交換?

感謝

+0

基本上和[mlock是一個Python對象](https://stackoverflow.com/questions/29524020/mlock-an-object-from-python)(目前尚未回答)以及與[標記數據在Python中爲敏感]有關(https://stackoverflow.com/questions/982682 /標記數據作爲敏感合蟒)。 – ShadowRanger

回答

1

對於CPython的,有這個不涉及編寫Python的C擴展,因爲mlock作品在頁面上,而不是對象沒有很好的答案。 str對象的內部版本不同(在Py3.3及更高版本中,str實際上可能有不同編碼的內存中的數據副本,有些在內部結構之後內聯,有些則是分開動態分配並通過指針鏈接) ),即使您使用​​來檢索必要的地址和mlock - 他們都通過​​mlock來電,您將有一個時間確定何時mlock和何時munlock。由於mlock在頁面上工作,所以您必須仔細追蹤任何給定頁面中當前有多少個字符串(因爲如果您只是盲目地使用mlockmunlock,並且頁面中鎖定了多項內容,則第一個munlock會解鎖所有這些; mlock/munlock是一個布爾標誌,它不計算鎖和解鎖的數量)。

即使你管理,你仍然有密碼獲取和mlock在此期間,數據可以被寫入交換之間的競爭,而這些高速緩存的替代編碼懶洋洋地計算,所以mlock荷蘭國際集團在任何非NULL指針給定的時間並不一定意味着這些指針可能以後不會填充。

您可以部分避免通過謹慎使用的mmap模塊和memoryview這幫問題(mmap給你的內存頁,memoryview引用所述存儲器而不復制它,所以​​可以用來mlock頁),但你」 d必須從零開始構建它(不能使用getpass模塊,因爲它將暫時存儲爲str)。

簡而言之,Python不會在乎你想要的交換或內存保護;它信任交換文件被配置爲您想要的安全性(例如禁用或加密),既不提供額外的保護,也不提供您需要添加的信息。