![在多台服务器之间共享同一个 TOTP 是否会降低安全性?](https://linux22.com/image/693117/%E5%9C%A8%E5%A4%9A%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E9%97%B4%E5%85%B1%E4%BA%AB%E5%90%8C%E4%B8%80%E4%B8%AA%20TOTP%20%E6%98%AF%E5%90%A6%E4%BC%9A%E9%99%8D%E4%BD%8E%E5%AE%89%E5%85%A8%E6%80%A7%EF%BC%9F.png)
在多台服务器上使用相同的 OTP 密钥是否存在(“不小的”)安全隐患?
在我的网络上,我正在运行gitlab-ce,下一个云, 和LTB自助密码以及其他一些服务。GL 和 NC 都支持通过 TOTP 进行 2FA,但作为单独的附加组件,而不是通过中央身份验证(例如 LDAP)或其他共享方式。
我正在向 SSP 提交 PR,以启用 2FA 进行密码更改,但我想知道是否可以让 GL 使用相同的 LDAP 存储 OTP 密钥。我想建议 GL 支持这一点,但前提是它不会削弱系统。
不集中化的后果并不大:每个应用程序/服务器都会存储自己的 2FA 密钥,因此用户必须单独管理它们。与技术上不需要密码管理器的密码不同,我不知道有谁能够记住他们的 OTP 密钥并在脑海中生成代码,因此用户被迫使用管理应用程序(例如 Google Authenticator 或 FreeOTP Authenticator)。从多个密钥列表减少到一个密钥主要是为了方便。
同样,除了方便之外,集中式 OTP 秘密存储还有其他已知的优势吗?
答案1
问题在于,正如 @HBruijn 指出的那样,您用于登录一项服务的 TOTP 值可能被攻击者用来登录另一项服务。而且这大概需要两分钟的时间。虽然您的时间步长可能只有 30 秒,但 RFC 规定验证服务应该在时间上来回搜索 OTP 值。由于时钟漂移,建议这样做。 https://www.rfc-editor.org/rfc/rfc6238#section-6
另一点是,整个系统的安全性取决于最薄弱的部分。如果任何一个系统/数据库泄露了 OTP 密钥,所有系统都会受到威胁。
当你回答完问题后,你应该考虑使用一个集中式系统,该系统存储机密并执行验证。这样就不会出现重放攻击的可能性,你只需在一个地方保护 OTP 机密即可。
你可能想看看隐私理念,它就是这么做的。它是一个身份验证系统,可以集中管理用户的身份验证设备(如 TOTP 令牌或应用程序)。所有应用程序都通过此服务进行身份验证。(免责声明:我是 privacyIDEA 的核心开发人员)
问题在于,所有连接的应用程序都需要连接,即每个应用程序都必须能够与 privacyIDEA 通信。为此,应用程序必须能够充当 RADIUS 客户端或与身份验证 REST API。 有几个插件适用于许多不同的应用程序例如 OTRS、ownCloud、Wordpress、dokuwiki、Typo3……