什么是 Firefox 同步,为什么要使用它
今天早上在笔记本电脑上开始的那个购物之旅?今晚在手机上继续。你中午发现的那个晚餐食谱?立即在厨房平板电脑上打开它。安全地连接你的个人设备。 – Firefox 同步
Firefox 同步允许你在不同的设备之间共享你的书签、浏览历史记录、密码和其他浏览器数据,以及 发送标签页 从一个设备到另一个设备。数百万用户利用此功能来简化生活和与网络的交互方式。
但在一个与提供商共享数据成为常态的互联网上,我们认为突出 Firefox 同步的隐私方面很重要。
Firefox 同步默认情况下会保护你所有同步的数据,以防止 Mozilla 读取。我们以这种方式构建同步,因为我们优先考虑用户隐私。在这篇文章中,我们将更深入地了解我们做出的一些技术设计选择以及背后的原因。
在构建浏览器和实施同步服务时,我们认为查看所谓的“总拥有成本”很重要。 不仅仅是用户从功能中获得什么,而是他们为了易用性放弃了什么。
我们相信,通过做出正确选择来保护你的隐私,我们也降低了尝试同步的门槛。当你注册并选择一个强密码短语时,你的数据就会受到攻击者和 Mozilla 的双重保护,因此你可以无忧无虑地尝试同步。试试看,就在菜单栏里!
为什么 Firefox 同步安全
加密允许一个人保护数据,使其在没有用于加密它的密钥的情况下完全不可读。加密背后的数学原理很强大,经过了几十年的测试,世界上每个政府都用它来保护其最宝贵的秘密。
加密的难点在于密钥。你用什么密钥加密,密钥从哪里来,存储在哪里,以及它如何在不同地方移动?许多云提供商声称他们会加密你的数据,他们确实会。但他们也有密钥!虽然加密并非毫无意义,但它只是一项小小的措施,并不能抵御最令人担忧的威胁。
加密密钥是必不可少的元素。服务提供商永远不能接收它 - 即使是暂时性 - 并且永远不能知道它。当你登录你的 Firefox 账户时,你输入用户名和密码短语,它们会被发送到服务器。如果那是你提供给我们的全部信息,我们怎么能声称永远不知道你的加密密钥? 区别在于我们如何处理你的密码短语。
互联网服务的典型登录流程是将你的用户名和密码短语发送到服务器,服务器在那里对其进行哈希处理,将其与存储的哈希值进行比较,如果正确,服务器就会将你的数据发送给你。(哈希处理是指将密码转换为不可读的字符字符串的过程,该字符串无法恢复。)
我们设计 Firefox 账户和 Firefox 同步(我们底层的同步服务)方式的不同之处在于,你永远不会向我们发送你的密码短语。我们在你的计算机上将你的密码短语转换为两个不同的、不相关的值。用一个值,你无法推导出另一个值0。我们向服务器发送一个从你的密码短语派生的身份验证令牌,作为密码等效物。而从你的密码短语派生的加密密钥永远不会离开你的计算机。
有兴趣了解技术细节? 我们使用 1000 轮 PBKDF2 将你的密码短语派生为身份验证令牌1。在服务器端,我们还会使用 scrypt (参数 N=65536、r=8、p=1)对该令牌进行哈希处理2,以确保我们的身份验证令牌数据库更加难以破解。
我们使用相同的 1000 轮 PBKDF2 将你的密码短语派生为加密密钥。它通过使用带有不同信息值的 HKDF 与你的身份验证令牌进行域分离。我们使用此密钥来解开加密密钥(你在设置期间生成的,我们从未看到解开),并且该加密密钥用于保护你的数据。 我们使用该密钥以 CBC 模式使用 AES-256 对你的数据进行加密,并使用 HMAC3 进行保护。
这种密码设计很可靠 - 但常量需要更新。一千轮的 PBKDF 可以改进,我们打算在将来进行改进 (Bug 1320222)。该令牌仅通过 HTTPS 连接(带有预加载的 HPKP 固定)发送,并且不会被存储,因此当我们最初开发它并需要支持低功耗、低资源设备时,就做出了权衡。AES-CBC + HMAC 是可以接受的 - 能够在将来某个时间升级到经过身份验证的模式会很好。
其他方法
这不是构建浏览器同步功能的唯一方法。至少还有三种其他选择
选项 1:与浏览器制造商共享你的数据
在这种方法中,浏览器制造商能够读取你的数据,并使用它为你提供服务。例如, 当你将浏览历史记录同步到 Chrome 时,它会自动进入你的 网络和应用活动,除非你更改了默认设置。正如 Google Chrome 帮助所解释的,“你的活动可用于个性化你在其他 Google 产品(如搜索或广告)上的体验。例如,你可能会在你的 feed 中看到根据你的 Chrome 历史记录推荐的新闻故事。”4
选项 2:使用单独的密码进行登录和加密
我们开发 Firefox 同步是为了尽可能易于使用,因此我们从一开始就设计了它,以派生身份验证令牌和加密密钥 - 我们永远不会看到密码短语或加密密钥。如果密码短语被发送到服务器,则无法安全地从密码短语派生加密密钥。
但是,可以添加一个永远不会发送到服务器的第二个密码短语,并使用它来加密数据。Chrome 提供了此功能作为非默认选项5。你可以使用你的 Google 账户凭据登录以同步;但你选择一个单独的密码短语来加密你的数据。但你必须选择一个单独的密码短语。
总的来说,我们不喜欢需要第二个密码短语的设计。这种方法对用户来说很混乱。选择相同的(或类似的)密码短语非常容易,从而抵消了设计的安全性。很难确定哪种更混乱:要求第二个密码短语还是让它可选!让它可选意味着它很少被使用。 我们不认为用户应该选择隐私。
选项 3:手动密钥同步
审计密码设计的关键(双关语)是询问密钥:“它从哪里来?它去哪里?”在 Firefox 同步设计中,你输入你选择的密码短语,它被用来派生一个永远不会离开你的计算机的加密密钥。
同步的另一种选择是移除用户选择,为你提供一个密码短语(它永远不会离开你的计算机)。该密码短语应该是安全且不可猜测的 - 这是一种优势,但它几乎不可能记住 - 这是一种劣势。
当你想要添加一个新的设备进行同步时,你需要将你的现有设备放在附近,以便手动读取密码短语并将其输入到新设备中。(如果你的新设备有摄像头,你也可以扫描二维码)。
其他浏览器
总的来说,同步以这种方式工作,因为我们认为这是最好的设计选择。选项 1 和 2 默认情况下不会提供彻底的用户隐私保护。选项 3 会导致更低的用户采用率,从而减少我们能够帮助的人数(更多信息请参见下文)。
如上所述,Chrome 默认情况下实施了选项 1,这意味着除非你在启用同步之前更改设置,否则 Google 将会看到你所有的浏览历史记录和其他数据,并使用它为你推销服务。Chrome 还将选项 2 作为一项可选功能实施。
Opera 和 Vivaldi 遵循 Chrome 的做法,默认实现选项 1,并将选项 2 作为可选功能。更新:Vivaldi 实际上默认情况下会提示您输入单独的密码(选项 2),并允许您选择退出并使用登录密码(选项 1)。
Brave 也是一个注重隐私的浏览器,它已经实现了选项 3。事实上,Firefox 在其最初的同步协议中也实现了选项 3 的一种形式,但我们根据用户反馈6在 2014 年 4 月(Firefox 29)更改了我们的设计。例如,我们最初的设计(和 Brave 目前的设计)使得如果您丢失设备或设备被盗,则更难恢复对数据的访问权限。密码或口令可以显著简化普通用户的使用体验,并显著提高用户的同步采用率。
Brave 的同步协议有一些有趣的细节7。一个明显的缺点是,如果您的口令被恶意软件盗取,您无法更改它。另一个有趣的细节是 Brave 不会跟踪您拥有多少设备或设备类型。这是一种微妙的安全权衡:了解用户的信息越少越好…… 缺点是 Brave 无法让您检测到何时有新设备开始接收您的同步数据,也无法让您取消授权该设备。我们尊重 Brave 的决定。然而,在 Firefox 中,我们选择为用户提供此附加的安全功能(以了解更多关于他们设备的信息为代价)。
结论
我们设计了 Firefox Sync 以保护您的数据——默认情况下——因此 Mozilla 无法读取它。我们以这种方式构建它——尽管权衡会使开发和提供功能变得更加困难——因为我们把用户隐私放在首位。在 Mozilla,这种优先级是我们使命核心部分,即“确保互联网成为全球公共资源…… 个人可以在其中塑造自己的体验,并且能够独立、安全地进行操作。”
0 如果您选择弱密码,则可以使用其中一个密码来猜测另一个密码。 ⬑
1 您可以在完整协议规范中找到更多详细信息,或者按照代码从这里开始。为了简化这篇博文,我们省略了一些细节,包括 kA 和 kB 密钥之间的区别,以及特定于应用程序的子密钥。 ⬑
4 https://support.google.com/chrome/answer/165139 “使用 Chrome 历史记录个性化 Google”部分 ⬑
5 Chrome 71 表示“为了提高安全性,Google Chrome 将加密您的数据”,并将这两个选项描述为“使用您的 Google 用户名和密码加密同步的密码”和“使用您自己的同步口令加密同步数据”。 尽管有这种措辞,但只有同步口令选项可以保护您的数据免遭 Google 的访问。 ⬑
6 Sync 的原始工程师之一撰写了两篇博文,介绍了向新同步协议的过渡,以及我们为什么要这样做。如果您对密码学的可用性方面感兴趣,我们强烈建议您阅读它们,以了解我们学到了什么。 ⬑
7 您可以在Brave 的设计页面上详细了解 Brave 同步。 ⬑
36 条评论