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

tkb*_*kbx 6 python memory security hashlib

我正在用Python创建一个涉及散列密码的程序.假设我使用它来获取密码:

import getpass
password = getpass.getpass("Password: ")
Run Code Online (Sandbox Code Playgroud)

然后散列它,有没有办法从RAM中安全地删除所有未散列密码的痕迹?

Sam*_*ous 4

正如前面所讨论的,即使您有自定义实现,也没有万无一失的方法可以在 python 中执行此操作(尽管这可能是一种方法)。

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

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

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

如果有人想在执行过程中破解您的密码,他需要以 root 身份实时访问计算机;由于我之前所说的原因,他不能仅通过事后查看交换来做到这一点。

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

大多数黑客不会费心去经历这样的麻烦。黑客攻击主要涉及社会工程,这基本上是让用户自愿向黑客提供密码。网络钓鱼就是这样的一种方法。

  • “潜在的黑客必须在所有这些 0 和 1 中找到密码”。首先,黑客“不可能”做到这一点的想法是一个重要的声明。有大量的实际利用依赖于在内存或交换中查找特定的东西,而您认为没有太多可以从这里开始。其次,您实际要做的是扫描交换文件以查找任何看起来像文本的内容。您发现的不仅仅是密码,然后将其用作猜测列表。也就是说,你可以大海捞针,尝试依次用每一块干草缝制,直到其中一根成功为止。 (2认同)