我们正在考虑将身份验证数据(用户名 + 密码)存储在 ActiveDirectory 中,以供我公司的新产品平台使用。我们无法 100% 确定 AD 是否是适合我们的长期解决方案,但现在有一个团队愿意支持它,因此使用它还是有吸引力的。
然而,我担心如果我们决定放弃它(即使是迁移到一些简单的系统,比如 MySQL + REST 接口),我们将无法保留现有用户的密码。我确实不是因为我们的后端发生了变化,所以我们想要求客户更改他们的密码。
所以我的问题是:AD 使用的哈希算法(包括盐!)是否有记录且可预测?我并不是要求解密密码(我认为这是不可能的)。我只是问,如果需要,我是否可以提取哈希密码并重现哈希算法,以便我们可以在以后需要时摆脱 AD?谢谢!
更新:似乎很多人都误解了我的问题。我确实不是想要解密任何密码。这不仅是超级草图,也不是我想要做的。我想要做的是了解 AD 用于以安全、单向方式散列密码的例程。一旦我知道了这一点,我就可以轻松地重新实现我自己的系统,该系统可以以兼容的方式验证用户身份。我希望这能解决问题!
答案1
AD 中有一个选项,可以使用可逆加密存储密码,您可以打开该选项,这将允许您解密密码。话虽如此,我永远不会为以可逆或便携式格式存储密码的产品或服务付费,而且我完全可以预料,如果您打开该选项,您将无法通过任何审核。
我认为,使用以下方式以可逆方式存储用户密码是不负责任的任何系统。你应该权衡利弊,做出决定前您将任何身份验证机制投入生产。
答案2
这是完全可行的,尽管工具有点……可疑。提取密码哈希值相当简单,有各种各样的灰色市场工具可以做到这一点。一旦你有了这些哈希值,L0phtcrack 和 John the Ripper 等工具的存在就是 Windows 密码哈希机制已完全记录在案且完全可预测的有力证据。
旁注:Windows 密码容易受到彩虹表攻击,而其他密码系统则不会,部分原因是 Windows 不对哈希进行加盐。
如果您可以完全复制 Windows 的哈希处理过程,那么您应该能够重新使用转储的哈希作为身份验证系统的基础;所有这些都无需实际解密密码。我只是不知道有哪个产品可以这样做。
答案3
AD 的哈希算法可能具有可预测性和可重复性,但记录并不完善。所以我不知道您是否可以通过这种方式进行操作。我建议您研究从 Active Directory 到 OpenLDAP 的迁移。OpenLDAP 的后端记录得更好。然后,您可以将其用作中间步骤来实现您想要执行的任何操作。
我想我要问的另一个问题是 - 什么原因导致您放弃 AD?如果是许可成本或对 Microsoft 产品的普遍鄙视,请从一开始就以不同的方式构建应用程序。我建议您按照您打算继续的方式构建它。无论迁移计划看起来多么简单,在产品上线后重新架构只会给您带来心痛。
答案4
听起来你需要安装一些东西来拦截 AD 中的用户密码更改并将其存储在其他地方。比如密码可以获取密码并用它做任何你想做的事情(显然,以未加密的形式或以任何可逆的方式存储它都是一个坏主意)。
你可以看看sha1hexfltr 它用于将 AD 密码以 SHA1 哈希值的形式复制到 AD 用户的属性中(在可公开读取的 AD 属性中不加盐,在我看来这是一个问题,愤怒的技术员对此有一些想法。
我不知道如何将 AD 转换为其他东西(好吧,很容易)——至少你需要同时运行另一个系统来填充身份验证数据,因为用户需要通过 AD 进行身份验证。