首先,我的问题不是密码哈希,而是密码encryption。 我正在构build一个需要authentication用户到第三方服务的桌面应用程序。 为了加快login过程,我想给用户select保存他的凭据。 由于我需要密码来authentication他的服务,所以不能被散列。
我想过使用pyCrypto模块及其Blowfish或AES实现来encryption证书。 问题是在哪里存储密钥。 我知道一些应用程序将密钥直接存储在源代码中,但是由于我正在编写一个开源应用程序,所以这看起来不是一个非常有效的解决scheme。
所以我想知道在Linux上如何实现用户特定的或系统特定的密钥来增encryption码存储的安全性。
如果您比使用pyCrypto和系统/用户特定键有更好的解决scheme,请不要犹豫分享。 正如我之前所说,哈希不是一个解决scheme,我知道密码encryption是脆弱的,但我想给用户的select。 使用Gnome-Keyring也不是一种select,因为很多人(包括我自己)都不使用它。
加密密码实际上并不比以纯文本形式存储更多的保护。 任何能够访问数据库的人都可能拥有对您的Web服务器机器的完全访问权限。
但是,如果安全性的损失是可以接受的,而且你真的需要这个,那么我会在安装过程中生成一个新的密钥文件(来自一个很好的随机数据源)并使用它。 显然存储此密钥尽可能安全(锁定文件权限等)。 使用嵌入源中的单个密钥不是一个好主意 – 没有理由为什么单独的安装应该具有相同的密钥。
尝试使用PAM 。 您可以创建一个模块,在用户登录时自动解密密钥。这是GNOME-Keyring在内部的工作方式(如果可能的话)。 您甚至可以使用pam_python在Python中编写PAM模块。
Password Safe由Bruce Schneier和开源设计。 这是Windows的,但你应该能够看到他们在做什么,并可能重用。
http://www.schneier.com/passsafe.html
http://passwordsafe.sourceforge.net/
阅读这个: 如果你在你的代码中键入AES,你做错了。