如何在Linux上使用Python可逆地存储密码?

7
首先,我的问题不是关于密码哈希,而是密码加密。我正在构建一个桌面应用程序,需要将用户身份验证给第三方服务。为了加快登录过程,我想给用户提供保存凭据的选项。由于我需要密码来将其验证给服务,因此它不能被哈希。
我考虑使用pyCrypto模块及其Blowfish或AES实现来加密凭据。问题在于如何存储密钥。我知道一些应用程序直接将密钥存储在源代码中,但由于我正在编写开源应用程序,这似乎不是一个非常有效的解决方案。
因此,我想知道在Linux上,您将如何实现用户特定或系统特定的密钥以增加密码存储安全性。
如果您有比使用pyCrypto和系统/用户特定密钥更好的解决方案,请随时分享。正如我之前所说,哈希不是一个解决方案,我知道密码加密是容易受攻击的,但我想给用户提供这个选项。使用Gnome-Keyring也不是一个选择,因为很多人(包括我自己)不使用它。

糟糕。我本来想建议使用gnome-keyring的 :( - Zifre
还可以参考Peter Gutmann的《工程安全》一书。他讨论了密钥存储问题。 - jww
3个回答

5

尝试使用PAM。您可以创建一个模块,当用户登录时自动解密密钥。这就是GNOME-Keyring的内部工作方式(如果可能的话)。您甚至可以使用pam_python用Python编写PAM模块。


5

将密码加密并不能比明文存储提供更多的保护。任何能够访问数据库的人可能也可以完全访问您的Web服务器。

但是,如果安全性的损失可接受,并且您确实需要这个功能,则应在安装过程中生成一个新的密钥文件(来自良好的随机数据源)并使用它。显然,要尽可能安全地存储此密钥(例如通过锁定文件权限等)。使用嵌入源代码中的单个密钥不是一个好主意 - 没有理由为不同的安装使用相同的密钥。


0

那个最后的链接(“If you type...”)返回了404。 - Bryan Oakley
又坏了。搜索一番发现它在几个地方都有备份,但是它们都似乎缺少图片。 - TRiG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接