2013-10-03 21 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中找到密码”。首先,黑客*无法做到这一点的想法是一个很大的声明。有大量的实用漏洞依赖于在内存中找到特定的东西,或者在你不认为有太多开始的地方进行交换。其次,你实际上做的是扫描交换文件寻找任何看起来像文本的东西。你发现的不仅仅是密码,然后用它作为猜测列表。也就是说,你可以在干草堆里找到一根针,试着依次缝合每一片干草,直到其中一个工作。 –