Mozilla 推出了一项名为BrowserID/Persona的新服务(公告,背景)。它旨在取代当前的单点登录解决方案,例如 OpenID、OAuth 和 Facebook。
一个优点是未来与浏览器的集成将降低网络钓鱼风险。此外,不会通知身份提供者有关某人登录的站点,这从隐私的角度来看是好的。
与 OpenID/OAuth/Facebook 相比,BrowserID/Persona 有哪些问题?
Mozilla 推出了一项名为BrowserID/Persona的新服务(公告,背景)。它旨在取代当前的单点登录解决方案,例如 OpenID、OAuth 和 Facebook。
一个优点是未来与浏览器的集成将降低网络钓鱼风险。此外,不会通知身份提供者有关某人登录的站点,这从隐私的角度来看是好的。
与 OpenID/OAuth/Facebook 相比,BrowserID/Persona 有哪些问题?
我喜欢这个主意,但我也有很多问题悬而未决。请不要将此视为任何形式的抨击,因为我写它是为了将我的身份验证经验应用于这个新方案。
我担心(不分先后):
详情如下。首先是一行总结(粗斜体)和一些说明。
私钥将受到客户端的保护,具有不同程度的安全性。
我担心任何私钥都会在未经我同意的情况下被使用。尝试进行身份验证时,将进行签名操作。我必须在使用前得到提示,否则恶意脚本可以让我的浏览器签署登录票并提交。流氓脚本可能来自小部件、添加或其他 XSS。这种机制的实现会在每个浏览器中有所不同,甚至在同一浏览器的不同平台上,或不同版本等。由于视觉上有些不一致,用户被引诱批准登录请求的风险更大。
它旨在与网络邮件帐户一起使用。企业“胖”邮件客户端有些落后。
要使浏览器 ID 工作,您需要一个支持它的浏览器。与此同时,一些 browserid.org 发布了“JavaScript shim,它使用标准 HTML5 技术和在 JavaScript 中实现的加密例程来实现缺失的功能”。
企业环境中使用胖邮件客户端(Outlook、Notes、Thunderbird)的用户将是后期采用者,因为该协议也必须在这些客户端中实施。更不用说 Outlook 不与 Firefox 或 Thunderbird 与 IE 共享密钥库。
它导致私钥的扩散,因为该方案没有中央权威。
还有一个流动性问题。我必须为我使用的每台计算机注册(生成私钥)。我将如何删除互联网信息亭或借来的计算机中的私钥?即使只有一台计算机,我将如何撤销存储在被盗计算机中的密钥?由于对于单个用户,多个签名密钥都是有效的(因为我的每台计算机都有自己的有效私钥),从服务提供商的角度来看,任何由已知权威签署的访问令牌都必须是有效的。
对密钥的访问必须经过身份验证,这会将密码带回图片中。
它可以受密码保护(限制其恶意重用),但如果我在某处更改密码,除非我使用一些基于浏览器/云的同步网络,否则它不会同步。记住密码有点违背了这个方案的目的。很有可能会使用相同的密码来保护每个密钥,就像现在使用相同的密码来验证多个网站一样。
访问请求和密钥生成之间存在差距,攻击者可以将其用于网络钓鱼。
我不清楚电子邮件提供商/证书颁发机构将如何处理 CSRF 问题。他们如何知道密钥生成请求是合法的?我的垃圾邮件文件夹会充满证书生成请求吗?还是只使用 DKIM 电子邮件服务器发布密钥?如果请求在发送到服务器的 SMTP 方式上被截获,可以修改吗?
使用标签允许 browserid.org 打破同源策略。
并且使用脚本标签来包含 browserid.js 允许他们绕过同源策略。BrowserID.org 将(有权)了解您的每次登录尝试。或者您必须自己托管脚本(假设它是自包含的),如果/当其中发现安全漏洞时升级它。
Stack exchange 也有BrowserId 和 WebID的详细对比。正如所争论的那样,BrowserId 非常接近WebID(W3C 的一个 W3C 孵化器组)。以下是在保护这两种协议时通常需要注意的一些要点,因为它们与公钥加密的通常完成方式非常不同。
客户端上的私钥加密:所有现代计算机都带有一个钥匙串,用于存储您的密码和密钥,并受密码保护。
操作系统供应商可以做很多工作来提高这里的安全性。在 OSX 上,我被要求输入一个特殊的密码,我可以或多或少地让不同的工具访问钥匙串。当然,钥匙串永远不应该泄露私钥。提供公钥当然不是问题 :-)
但当然,对于台式机,人们可以走得更远,使用视频 Cryptokeys、WebID 和 Internet Cafes中所示的加密密钥 ——尽管这需要浏览器供应商在一定程度上改进 UI。在这里,您有一个硬件令牌来保证私钥没有被复制。无论如何,对于 BrowserID,他们需要将其集成到钥匙串中,或者找到一种 JavaScript 方法来通过网络发送存储在钥匙串中的 x509 证书。
天啊!我应该再次在这里创建一个帐户来发表此评论!难怪 Facebook 已经摧毁了博客圈。在那里,您只需要 1 个密码,您就可以评论您想要的所有内容。
我正在提交对已接受答案中六点的回复作为新答案......
在 Javascript BrowserID 实现的情况下,私钥存储在login.persona.org 域下的本地存储中。因此,必须在该域上托管恶意脚本才能访问它。托管在别处的脚本只能通过受限的基于PostMessage的 API 间接访问密钥。
BrowserID 适用于任何电子邮件帐户或邮件客户端。Javascript shim 用于支持没有本机实现的浏览器。无需向邮件客户端添加任何内容。
这里要指出的重要一点是密钥是短暂的。如果您在 Internet 自助服务终端上,密钥的有效期仅为 1 小时,如果您在自己的设备上,则密钥有效期为 1 天。如果您仍然通过 login.persona.org 进行身份验证,则会在过期后根据需要生成一个新的。无需备份。
如果您想清除您的私钥,只需清除 cookie(这也会清除本地存储 - 存储密钥的位置)。
如果您的计算机被盗,则有一个小窗口,在此期间攻击者可以使用密钥,但只要您在 上更改密码login.persona.org
,login.persona.org
就会失效,小偷将无法获得新密钥。
为了获得由您的身份提供者签名的新密钥,您需要对其进行身份验证。如果该身份验证过期,则您需要再次输入密码。这类似于基于 cookie 的会话,这似乎是网络上的常态。
私钥并不是那么有价值,因为它是短暂的。在这方面,它与 cookie 的共同点多于 X.509 客户端证书。
身份提供者知道请求是合法的,因为用户通过了他们的身份验证。后备身份提供者仅在确认电子邮件地址的所有权后才签署密钥(以标准的“向用户发送带有随机令牌的链接以单击”方式)。
证书生成/签名通过 Javascript API 在浏览器和身份提供者之间发生。它不是基于发送电子邮件,因此用户不会收到除后备身份提供商在帐户创建时发送的“请确认您的电子邮件地址”消息之外的任何电子邮件。
一旦 API 足够稳定,其他人就可以include.js
自己托管。现在,我们建议不要这样做。
persona.org 可以看到您登录的网站的另一点是使用在线验证工具https://verifier.login.persona.org/verify
。一旦确定了数据格式,我们将鼓励人们自己验证断言(例如使用开源库),并且persona.org
不再获取这些数据。
BrowserID 旨在成为一个完全去中心化的协议,以实现真正的隐私。但是,它还提供了集中的回退,以解决当前缺乏本地支持的问题。
与某些替代方案相比,当前形式的 BrowserID 的一个缺点是除了核心功能之外的任何事情都很困难:进一步发现信息需要其他协议,例如 WebFinger,而例如 OpenID URL 可以提供链接。例如,很难从 BrowserID 获取显示名称或个人资料图片(尽管由于 BrowserID 为您提供了电子邮件地址,您可以从 Gravatar 获取后者)。
要添加到列表中的另一种竞争协议:WebID:http ://webid.info/