我想尝试一个系统,在那里我使用一个密钥,并使用一个网站的名称,然后散列,并使用哈希作为我的密码在网站上,它是咸的。但是,我想安全地做这件事。我担心的是:
打印密码到终端,然后关闭终端会安全吗?一旦Python完成,密钥和密码会从内存和磁盘中消失吗?我将使用getpass,但这是否提供了任何实际的安全性,以防止任何东西,除了肩扛的旁观者?有没有一种方法可以安全地覆盖RAM中的原始密钥和散列/密码?
发布于 2013-04-12 16:36:57
简短的回答是否定的。Python会将密码存储在内存中的许多地方,也不会从内存中清除密码,它只会释放存储密码的内存区域。
例如,这意味着在.NET中不存在像.NET这样的东西。
有关所有这些的更多信息:Python - Releasing/replacing a string variable, how does it get handled?
最好的选择是编写自己的C语言库,处理内存中的输入和存储,并在其中构建一个shred()
函数,不仅释放内存区域,而且还通过该内存分配写入数据。
您的ld_preload是一个替换malloc的,以及python不使用的。
import getpass
print getpass.getpass('Give me your password: ')
此外,哈希通常是不好的。散列你的东西很好,如果你存储东西,纯文本是错误的,但是你不应该使用它作为身份验证方法,除非你知道你在做什么和为什么。另外,通常你必须储存你的盐,这在很大程度上是个坏主意,因为这只会使散列作废。呃,我累了,但是谷歌一下,你就知道了。
发布于 2013-04-12 16:50:46
我不担心这些。如果您的机器上有敌对的代理,那么您需要担心的问题比终端缓冲区和私有内存还要大。
我确实知道,已经有类似的解决方案,比你所描述的要花哨得多;浏览器插件将主密码与域名结合在一起,形成一个独特的插件,具有很好的自动完成功能。
但是如果这主要是一个编程练习,那就去做吧!“正常”用户将无法访问您的终端缓冲区。他们也不应该能够检查您的进程的内存。
https://stackoverflow.com/questions/15976101
复制相似问题