![使用 MySQL 和 Blowfish 预加密密码进行 SASL(Postfix)身份验证](https://linux22.com/image/540517/%E4%BD%BF%E7%94%A8%20MySQL%20%E5%92%8C%20Blowfish%20%E9%A2%84%E5%8A%A0%E5%AF%86%E5%AF%86%E7%A0%81%E8%BF%9B%E8%A1%8C%20SASL%EF%BC%88Postfix%EF%BC%89%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81.png)
我有一个 Rails 应用程序,其中 Devise 身份验证 gem 运行用户注册和登录。我想使用 Devise 在用户注册时填充的数据库表作为 Postfix 用于验证用户的表。
该表具有 Postfix 可能需要用于 SASL 身份验证的所有字段,但 Devise 在将密码放入数据库之前使用 Blowfish 对其进行加密。
我该如何让 Postfix/SASL 解密这些密码,以便正确地对用户进行身份验证?Devise 对密码进行了加盐处理,所以我不确定这是否有帮助。
有什么建议吗?我可能想用 Dovecot 或 Courier 做类似的事情,但我还没有完全确定。
答案1
postfix 可以配置为使用鸽舍用于 SASL 身份验证,因此您最好从另一个方向开始并弄清楚是否可以让 Dovecot 处理这些哈希值。
请记住,哈希值的设计目的是不可“解密”。当有人想要登录时,应用程序会获取原始盐值(用户提供的密码)并重新计算哈希值,如果哈希值匹配,则密码是“正确的”。
这些只是 Devise 存储在数据库中的原始哈希,还是以模块化加密格式(以 开头$x$...
)存储?如果它们是加密格式,只要您指定 ,Dovecot 就应该能够支持它们scheme=CRYPT
。唯一的问题是,我没有看到 SHA-1 的 MCF ID,只有 $5$ 是 SHA-256,$6$ 是 -512(两者都是 SHA-2 系列哈希)。
或者,如果 Devise 使用数据库可访问函数来创建密码(如 MySQL 的 PASSWORD() 函数),那么您应该能够使用任何邮件服务器的数据库连接器来编写自定义数据库查询以进行身份验证,这让你能够做类似的事情
SELECT NULL AS password, 'Y' as nopassword, userid AS user FROM users WHERE userid = '%u' AND mysql_pass = password('%w')
答案2
我不确定这对你来说是否可行,但上周在 RSA 上,有一家公司为 Linux 上的 mySQL 提供透明数据加密。我以前从未见过这样做的好方法,但这些人似乎有。
它们在 mySQL 写入时加密到磁盘,在请求数据时解密。应用程序或数据结构完全没有变化。公司是 Gazzang,网站是 www.gazzang.com。
希望这可以帮助。