Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全地覆盖RAM中的Python变量?_Python_Security_Memory_Hashlib - Fatal编程技术网

安全地覆盖RAM中的Python变量?

安全地覆盖RAM中的Python变量?,python,security,memory,hashlib,Python,Security,Memory,Hashlib,我正在用Python编写一个程序,其中包括对密码进行哈希运算。假设我使用这个来获取密码: import getpass password = getpass.getpass("Password: ") 然后对其进行散列,是否有任何方法可以安全地从RAM中删除未删除密码的所有痕迹?如前所述,在python中,即使有自定义实现,也没有简单的方法可以做到这一点(尽管这可能是一种方法) 现在我不知道你的应用程序应该做什么,但我可以毫无疑问地告诉你,你的数据在RAM中比在数据库中更安全,即使在散列之后也

我正在用Python编写一个程序,其中包括对密码进行哈希运算。假设我使用这个来获取密码:

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

然后对其进行散列,是否有任何方法可以安全地从RAM中删除未删除密码的所有痕迹?

如前所述,在python中,即使有自定义实现,也没有简单的方法可以做到这一点(尽管这可能是一种方法)

现在我不知道你的应用程序应该做什么,但我可以毫无疑问地告诉你,你的数据在RAM中比在数据库中更安全,即使在散列之后也是如此

记忆的工作方式是如此复杂。每个进程都有自己的虚拟内存空间,不必是连续的。完整的内存块交换到磁盘,并放回另一个内存块中。整个内存只是一组字节,几乎不可能区分整数数组、字符串、cat或简单的随机数据


某些数据块被部分重新分配,从而产生大量的部分数据。想象一下这会是什么样子,1、2、8甚至16Gb的随机数据,潜在的黑客必须在所有这些0和1中找到密码

如果有人想在执行过程中破解你的密码,他需要以root身份实时访问机器;出于我前面提到的原因,他不能仅仅通过事后观察互换来实现这一点

但是如果有人拥有这种访问权限,那么还有很多其他方法可以获得密码。例如,只需调试程序,或者更好,只需更改源代码并使其打印密码:)


大多数黑客不会费心经历这样的麻烦。黑客攻击主要是关于,这基本上是让用户自愿给黑客密码。就是这样一种方法。

我认为这篇文章可以帮助你:[[1]:你为什么可能想这么做?为了能够阅读(真的很难)你的内存作为黑客应该已经获得了根访问权限。请将精力集中在更合理/更常见的方面,而不是制造这种虚假的安全感。@RickyA你不知道tkbx试图做什么,这实际上是个好问题。@RickyA:如果交换文件没有加密,那么你不需要根,你只需要硬盘(当然,对于包含密码的页面,密码已被交换且未被覆盖)。如果不是高价值的攻击,窃取硬件是一种貌似合理的攻击,因为攻击者不知道他们将从交换文件中得到什么,这取决于运气。但结论是一样的,你对此无能为力。@RickyA:我不一定需要在交换文件中找到密码,而是使用交换文件作为密码源字符串来猜测密码。无论如何,我的观点是,未加密的交换文件破坏了操作系统保护内存内容的原则(至少在操作系统不运行且您将磁盘装载到其他位置时).正如我所说,这并不真正影响你评论的主旨,只是假设并不总是成立。当然,操作系统也有可能在正常关机时删除swapfile。你应该投票结束这个问题,因为它是重复的,而不是回答它。如果你有新的答案,你可以把它放在原始问题上n、 这家伙说得通!“潜在的黑客必须在所有这些0和1中找到密码”首先,黑客不可能做到这一点的想法是一个很重要的声明。有很多实际的漏洞攻击依赖于在内存或交换中找到你认为没有太多开始的特定内容。其次,你实际做的是扫描交换文件,寻找任何看起来像文本的东西。你会发现更多的漏洞只需输入密码,然后将其用作猜测列表。也就是说,你可以在干草堆中找到一根针,方法是尝试依次缝上每一根干草,直到其中一根起作用。顺便说一句,我并不是说发问者的应用程序实际上会受到这种交换文件攻击。我是说,该论点所依据的假设并不完全准确。如果假设交换文件是牢不可破的,或者在一个大的二进制块中搜索敏感数据是不可能的,那么这个特定的应用程序可能会也可能不会因此受到影响(很可能不会),但最终肯定会有人。我的假设是,黑客只会使用其他类型的攻击,更容易应用,结果更快,成功率更高。现在,一个好的密码中有标点符号、数字和特殊字符,很难判断一组这样的字符是否是随机的ash或密码。我同意这样一个事实,即这并不意味着它是完全可靠的。我只是说,这比在数据库上运行rainbow攻击或只是要求客户自愿提供密码要难:p