我不喜欢的 Firefox 同步

我不喜欢的 Firefox 同步

一直想对 Firefox 的同步功能做一个详细的说明,包括怎样运作,加密方式,同步规则。以及不停有用户抱怨“同步功能不好用”,“我的书签丢失了”,在这篇文章里应该会得到解答。顺便 Sync 最近加了很多新功能,比如能“同步其他设备的标签页”,和将要实现的“发送标签页”,还有类似路由上的踢出设备的“断开同步设备”功能,也一并简单提及,文章可能会有点长,可以先马后看。

Firefox 同步加密方式

Sync 1.0(2010-2014)

自 2010 年 Firefox 4 推出以来,Firefox Sync 采用了一个独特的加密系统,不使用密码而是创建了一个唯一的密钥,用于加密和解密所有的数据。获取数据的唯一方法是知道这个 key。即使是保存数据的 Mozilla 服务器也无法解密内容。

这个 key 被称为“恢复密钥”,因为通常来设置一个新的设备时我们称之为“配对”。当你设置一个新的设备,你可以看到一个一次性使用的 12 个字符的“配对代码”,输入到其他设备。通过 J-PAKE:Password Authenticated Key Exchange by Juggling,恢复密钥和同步内容便安全地复制到新设备。同时因为两个设备都知道密钥,可以安全地共享书签和其他数据。

Sync 1.0 存在的问题

在早期通过这种方式同步时最大的问题是:如果你丢失了唯一同步的设备,可能也丢失了密钥的唯一副本,如果没有该密钥,则无法恢复你的同步数据。

同时这种同步还存在其他可用性方面的问题:在设置它时,两台设备必须在你手边,并且许多人容易认为这种随机生成的配对代码是他们需要记住的。

新的 Firefox Sync(2014-至今)

从 Firefox 28 版本开始,Services group 推出了基于传统电子邮件地址和密码的 Firefox 帐户,并沿用至今。

新的 Firefox Sync 安全标准保持不变:仍然有一个强随机密钥,Mozilla 的服务器无法解密你的数据。但不使用配对,密钥的“解包”受密码保护,这意味着即使同时丢失所有的设备,只需要在其中输入 Firefox 帐户的电子邮件和密码依然可以恢复所有的数据。

这是从 Sync 1.0 升级以来的最大变化。数据的安全性取决于你设置的密码。鉴于密码的重要性,我们重新设计了 Firefox 帐户,以便 Mozilla 的服务器永远不会看到你密码的明文。Firefox 首先通过使用 PBKDF2 在客户端加强密码,然后通过 HKDF 导出多个特定于用途的密钥。你的密码或派生的“解包”密钥都不会传输到 Mozilla。可以在 GitHub onepw protocol · mozilla/fxa-auth-server Wiki · GitHub 的技术说明中阅读有关协议的更多信息。

我丢失了 Firefox 同步信息

随着旧的同步服务终止和迁移,目前所有用户应该都使用的是新的同步服务,如上文所述,Mozilla 的服务器永远不会看到密码的明文,所以一旦忘记密码选择重置,将丢失任何未存储在当前设备上的同步数据。因为以前上传到服务器的数据无法解密,一旦选择“忘记密码”,可以视为之前同步的数据已经不安全了,所以服务器在当前账户下的内容会“立即清除”,并以本地数据作为初始同步。

对于很多用户来说,由于经常使用一些国内方便找回密码的服务,在重置密码时便不注意提示,误删了云端的同步数据。

重置密码可分两种情况讨论:

1.之前一直使用火狐同步,本地保留有之前全部的同步数据

在这种情况下,登录时选择重置密码,虽然会清除云端的全部数据,但随即会将本地数据同步至云端,可以认为没有损失数据。

2.重新安装火狐,本地没有之前全部的同步数据

这种情况发生在例如“重装系统后新安装火狐”,由于全新安装,本地没有任何数据,在重置密码时清除了原来服务器上的数据,而本地数据为空,所以也无任何数据上传到云端。

所以一旦发生了第二种情况,由于其他设备在“重置密码”时将停止同步数据,变为需要登录的状态,如果有其他设备保留有之前同步的内容,可以用新密码登录同步即可还原。

Firefox 同步规则

火狐同步功能是在后台按一定规则自动进行的,第一次登录同步功能时,会将你浏览器中需要同步的数据传输至服务器,此后,只要不断开同步,那么服务器端与本地数据将会始终保持一致,也就是说,当同步没有断开时,删除任一本地数据,如某一条书签,那么服务器端同时也会删除该条书签。

同步功能中,书签是以“合并”的方式进行同步的,也就是说,机器 A 上有 1、2、3 三个书签,机器 B 上有 4、5 两个书签,服务器端有 6、7、8、9 四个书签,当机器 A 登录同步后,A 与服务器端同时有 1 2 3 6 7 8 9 共七条书签,不断开 A 的连接,B 登录同步,那么,当同步完成后,A、B 和服务器端书签则同为 1 2 3 4 5 6 7 8 9

另外,火狐的同步服务存在“全球服务”和“本地服务”两套不同的服务,目的是为了解决国内用户无法连接“全球服务”的服务器的问题。详情可参考:如何判断和切换火狐同步的 全球服务 与 本地服务

Sync 最近的一些升级和改变

从 Firefox 45.0 开始着重对标签页同步的功能进行了改进,首先,在工具栏添加了一个“同步标签页”按钮,当开启了 Firefox 的标签页同步功能以后,点击工具栏上的同步按钮就可以看到其他设备已打开的所有标签页。

其次,在地址栏输入关键字搜索的时候可以在下拉列表里显示同步的标签页。原本你在地址栏输入关键字的时候下拉列表里只能显示你已打开的标签页,现在可以显示在其他设备上打开的标签页了。

Firefox 47.0 在此基础上又继续改进,添加了一个专门用于显示同步标签页的侧边栏。可以通过点击工具菜单,“查看” -- “侧边栏”,找到 Synced Tabs 打开,或者定制模式下面拖动出侧边栏的按钮。

Firefox 50.0 开始则继续提供了一个手动将标签页发送到其他设备的功能,用户可以通过标签页右键菜单将标签页发送到任意一个曾用 Firefox 账号登录过的设备,也可以发送到所有的设备。需要注意的是这些设备都需要开启 Firefox 同步功能并登录 Firefox 账号,同时打开标签页同步的选项。

然后是设备管理功能,这项功能会罗列所有 Firefox 账号登陆的设备清单,用户可以管理这些设备,例如取消部分设备的连接。

在同步界面,用户还可以快速修改当前设备的名称。

这项功能会在未来数周逐渐提供给每位用户。

编辑于 2016-11-02

文章被以下专栏收录