当密码重用不安全时,为什么 OpenID 被认为是安全的?

信息安全 密码 密码管理 打开ID sso
2021-09-07 01:52:10

OpenID 允许您使用例如 Google/Facebook/Microsoft 帐户登录第三方网站。它可用于登录 Stack Exchange。

为什么这被认为是一种可接受的做法,而密码重用则不是?如果 OpenID 帐户被盗用,攻击者将能够访问多个用户帐户,这难道不是一回事吗?

此外,鉴于电子邮件帐户通常是所有其他在线帐户的万能钥匙(因为重置密码链接将向您发送一封电子邮件以重置密码),让用户输入他们的例如 Gmail 密码是否也很危险在其他网页上,也是吗?

2个回答

OpenId 或其他类似机制的要点在于,它允许您选择一个高度可信赖的单一组织来保存您的凭证。假设它们在某种程度上比普通站点更安全。例如:

  • 他们应该提供 2 因素身份验证
  • 他们应该有良好的、主动的帐户滥用监控
  • 它们应该通过 ISO27001 认证
  • 等等。

如果您重复使用您的密码,那么您在所有您重复使用的站点上的帐户只会与最弱的站点一样安全。任何网站的任何妥协都将意味着您的所有帐户都处于危险之中。

因此,部分原因是一种简单的可能性——您保存凭证的地方越多,它们被盗的可能性就越大。

部分是关于质量的——你应该选择一个你高度信任的 OpenId 提供者。

关于将电子邮件凭据输入其他站点的问题,OAuth 等的想法是您不这样做 - 您登录的站点会将您的浏览器重定向到您的 ID 提供程序站点,然后您在那里输入凭据。诚然,这有点微妙,许多用户可能没有意识到发生了什么,但这就是原则。

TL;DR:您没有在 OpenID 中多次使用密码,而是让其他方(如 Stack Exchange)信任您的身份提供者(如 Google)来仔细验证您的身份。密码(或任何其他身份验证模式,如两因素身份验证、证书等)仅向身份提供者显示。

现实世界中的身份认证

类似的方法通常用于开设银行账户、签署电话合同或其他需要验证您身份的操作。如果您不想亲自去那家公司,通常您可以通过公证人、邮局或银行机构验证您的身份,这些机构将验证您的护照(这就像向 Google 出示您的密码),然后交给您(或立即将其传递给请求身份验证的第三方)确认他们检查了您的身份的证书,但不附上您的护照副本。

开放ID

OpenID(以及类似的单点登录技术)的理念是您根本不需要在目标站点输入密码。例如,如果您想使用 Google 登录您的 Stack Exchange 帐户,Stack Exchange 永远不会获取您的密码,但您会被重定向到 Google,这将对您进行身份验证(可能您已经登录到 Google,所以您可能会简单地询问您是否要通过 Stack Exchange 的身份验证并被送回那里)。

Stack Exchange 不会随时获取您的密码,甚至在您更改 Google 密码时也不会意识到。相反,Google 会向 Stack Exchange 发送一种证书,交出一些身份信息,这些身份信息可能只是一些数字标识符,但也可能包含其他信息,例如您的邮件地址。

维基百科上有一张很棒的图片描述了工作流程:

OpenID 与使用 OAuth 的伪身份验证

Saqibali 的OpenIDvs.Pseudo-AuthenticationusingOAuth ” - 自己的作品。通过Commons在 CC0 下获得许可

身份验证

OAuth 通过不传递证书而是一种访问密钥来做一些不同的事情。为了通过 OAuth 模拟 OpenID 行为,身份提供者将提供一个仅用于身份验证的简单服务。如果密钥“适合”,则用户成功通过身份验证。

安全

考虑到一些安全预防措施,整个场景是安全的。

  • 您不应该将您的密码提供给与您的真实身份相似的虚假身份验证提供商(例如,用于网络钓鱼攻击的虚假 Google 页面)。这就像将您的护照提供给一些假公证人,他们会复印并用它做坏事。这可以通过仔细验证站点 URI 来缓解(密码管理器和每个 URI的自动密码短语查找对此非常有帮助!)并使用额外的安全措施,如两因素身份验证。
  • 证书只能在给定时间内使用,并且仅对每个站点有效。例如,伪造的 Stack Exchange 网站可能会持有证书。但由于这仅对“假 Stack Exchange”有效,攻击者将无法使用它对真正的 Stack Exchange 或其他网站进行身份验证。

    所有单点登录技术的实际实现都不同,但它们都实现了类似的方法来将证书绑定到第三方。