2013-10-03 19 views
5

我正在Python中製作一個包含散列密碼的程序。假設我用這個來獲得密碼:在RAM中安全地覆蓋Python變量?

import getpass 
password = getpass.getpass("Password: ") 

然後散列它,有沒有什麼辦法能夠安全地移除RAM的非散列密碼的所有痕跡?

+0

我認爲這篇文章可以幫助你: [http://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python][1] [1]:http://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python –

+3

你爲什麼想要這樣做?爲了能夠讀取(確實很難)記憶,黑客無論如何都應該獲得root權限。請將您的精力集中在更明智/常見的[攻擊媒介](https://www.owasp.org)上,而不是產生這種虛假的安全感。 – RickyA

+0

@RickyA你不知道tkbx正在嘗試做什麼,這實際上是一個很好的問題。 – Joe

回答

3

如前所述,即使您有自定義實現(儘管這可能是一種方式),但在Python中執行此操作並不是萬無一失的。

現在我不知道你的應用程序應該做什麼,但我可以毫無疑問地告訴你,即使在散列之後,你的數據在RAM中的安全性也高於數據庫中的安全性。

內存的工作方式非常複雜。每個進程都有自己的虛擬內存空間,而不必是連續的。全部內存塊被交換到磁盤並放回到另一個內存塊中。整個內存只是一組字節,幾乎不可能區分整數數組,字符串,貓或簡單的隨機數據。

某些數據塊被部分重新分配以創建大量的部分數據。想象一下這是什麼意思,1,2,8甚至16Gb的隨機數據,潛在的黑客必須在所有這些0和1中找到密碼。

如果有人想在執行過程中破解密碼,他需要以root身份對機器進行實時訪問;他之所以不能這樣做,是因爲我之前提到的原因。

但是,如果有人擁有這種訪問權限,那麼有很多其他方式來獲取密碼。例如,簡單地調試程序,或者更好的,只需更改源代碼並使其輸出密碼即可:)

大多數黑客都不會打擾通過這樣的麻煩。黑客攻擊主要是關於social engineering,這基本上是讓用戶樂意給予黑客密碼。 Phishing就是這樣一種方法。

+0

你應該投票結束這個問題,因爲它是重複的而不是回答它。如果你有新的答案,你可以把它放在原來的問題上。 – Joe

+0

這個人很有道理! – RickyA

+1

「潛在的黑客必須在所有0和1中找到密碼」。首先,黑客*無法做到這一點的想法是一個很大的聲明。有大量的實用漏洞依賴於在內存中找到特定的東西,或者在你不認爲有太多開始的地方進行交換。其次,你實際上做的是掃描交換文件尋找任何看起來像文本的東西。你發現的不僅僅是密碼,然後用它作爲猜測列表。也就是說,你可以在乾草堆裏找到一根針,試着依次縫合每一片乾草,直到其中一個工作。 –