在Python中安全地处理密码?

时间:2013-04-12 16:09:57

标签: python security

我想尝试一个系统,在这个系统中我使用一个密钥并将其与网站的名称一起使用,然后对其进行哈希处理,并将哈希值作为我的密码用于它所使用的网站上。但是,我想安全地做到这一点。我担心的是:

  1. 打印到终端的哈希(给定网站的密码)

  2. 哈希以及用于生成哈希的通用密钥存在于内存中。

  3. 将密码打印到终端是否安全,然后关闭终端? Python完成后,密钥和密码是否会从内存和磁盘中消失? 我将使用getpass,但这是否提供任何实际的安全措施,除了过度的掠夺者?有没有办法安全地覆盖RAM中的原始密钥和哈希/密码?

2 个答案:

答案 0 :(得分:2)

我不担心这些。如果您的计算机上有恶意代理,那么您需要担心的问题莫过于终端缓冲区和私有内存。

我知道已经有类似的解决方案比你描述的更加光滑;将主密码与域名相结合的浏览器插件,以创建一个独特的插件,具有良好的自动完成功能。

但如果这主要是编程练习,那就去吧! “普通”用户将无法访问您的终端缓冲区。他们也不应该能够检查你的进程的内存。

答案 1 :(得分:1)

简短的回答是否定的。 Python会将密码存储在内存中很多地方,也不会从内存中清除它,它只是释放存储密码的内存区域。

意味着没有像.NET中找到SecureString这样的东西。

关于这一切的更多信息:Python - Releasing/replacing a string variable, how does it get handled?

最好的办法是编写自己的C libarary来处理内存中的输入和存储,以及构建shred()函数的位置,不仅要释放内存区域,还要在内存分配上写入数据。 / p>

你做ld_preload你替换malloc以及python使用的是什么。

import getpass
print getpass.getpass('Give me your password: ')

此外,哈希通常很糟糕。 散列你的东西是好的,如果你存储东西,纯文本是错的,但你不应该将它用作身份验证方法,除非你知道为什么和你正在做什么。 此外,通常你将不得不存储你的盐,这是一个坏主意,因为那将只是废弃哈希认为所有togeather ..嗯,我很累,但谷歌周围,你会得到这个想法。< / p>

(即将在飞机上跳起来):))

相关问题