iOS 最为人称道的功能之一莫过于Find my iPhone了,配合强大的激活锁,基本上丢失的苹果设备在一般人手中只能作为拆机零件售卖了,但是不管是谁,设备丢失最心痛的莫过于资料的丢失。在今年的 WWDC 上,全新的 iOS 13 与 macOS Catalina 发布,在WWDC上1小时51分处,苹果提到了 Find My 登录 macOS,并配合全新的定位方法,为你尽可能争取时间找回设备。

在刚刚过去的十一假期,我因为自己的粗心大意自己也体验了一把这个发布会期间被我忽略的新功能。十一前因为出差在沈阳,我在赶回来的时候不慎将自己的iPad遗失在沈阳仙桃机场,当时回到家的时候并没有注意到,晚上需要刷剧的时候才反应过来。第一时间就打开了丢失模式,并立刻尝试联系仙桃机场,但是由于当时太晚,并没有人接电话。第二天一大早我又打电话过去,那边反应确实是有遗失的iPad与我描述的情况一致,但是麻烦的是需要自己去机场去取,于是又找了几个同学帮忙,找到一位在沈阳的朋友,用我的乘机信息,身份信息,委托书拿到了iPad,那边的朋友当天就给我发快递了。

由于在iPad没有到手,我就没有解除丢失模式,有趣的事情发生了,我的其他苹果设备在此期间没有给我发过任何的设备已经找到的信息,我的理解是iPad并没有连上网,所以苹果并不知道iPad是什么状态,但是快递发出的第二天,我打开Find My,竟然看到更新了iPad的位置信息??!

在路上奔驰的iPad

我有点不敢相信我的眼睛,但是确确实实是我的iPad,可以从图中看到定位的位置相当精确,河北廊坊境内的路上。我有点错乱,iPad为什么能够更新位置,那它到底有没有出发激活锁,如果激活锁已经打开,说明iPad联网了,谁连上的?以及为什么其他设备没有任何的通知?那要是激活锁没有打开,那位置信息又是如何更新的?这种迷之拷问一直困扰着我,一切只能等iPad回来才能知道了。

iPad回来了

iPad到手第一件事就是先看看是否触发了激活锁,打开屏幕可以看到激活锁并没有触发,我自己连上网之后两分钟,激活锁触发,iPad显示了我预留的信息,同时手机收到好几个邮件通知iPad已经找到。
激活锁没有触发
连上WiFi后激活锁触发

激活锁被触发说明之前iPad并没有连上过网络,但是为什么设备位置能更新呢?在Apple Catalina,新闻稿中,我找到了答案,原文如下:

Find My can help users locate a missing Mac even if it's offline and sleeping by sending out Bluetooth signals that can be detected by Apple devices in use nearby, and then relaying the detected location of the Mac to iCloud so a user can can locate it in the Find My app.

是iOS13 / iPadOS 上全新的Find My!上文的大意是 Find My 会利用蓝牙将设备的位置信息传递给附近的Apple设备,并经由这部设备将位置信息传递至iCloud,这样你就能在Find My中看到自己的设备位置信息了。

WWDC 2019

细想之下有点可怕,难道我的位置行踪被暴露的彻彻底底了?要是有人想追踪我岂不是易如反掌?

这似乎也不符合苹果一贯的隐私策略 ,于是我自己去查了一点资料,想要搞清楚其中的原委。

一点技术细节

在讨论技术细节之前,我首先想说的是,根据目前所能查询到的信息,苹果提供了完整的端对端加密方案,追踪你的行踪信息几乎是不可能的
  1. 要想触发苹果所提供的不联网定位设备的功能,你得拥有至少两台Apple设备
  2. 在苹果设备上设置Find My之后,苹果首先会确认你是否拥有两台及以上的设备,然后确认后,设备会生成一对私钥与公钥,并通过端对端加密的方式将该私钥存储于你的所有苹果设备上,而公钥则用来进行加密位置信息,并作为丢失后的设备蓝牙beacon。
  3. 公钥会定期变换,且变换后的结果与上一次的公钥之间找不到明显的相关性,具体原理需要更复杂的密码学基础,且苹果拒绝透露任何公钥变换的技术细节,这样也避免了有心之士追踪你的设备。不过可以保证的是,变换后的公钥与设备本身存储的私钥依然是唯一对应的,也就是说,只有你自己的设备可以解密公钥加密的信息。
  4. 假设你和我一样,不小心遗落了自己的设备,即使是在未联网和锁定的状态下,蓝牙也可以不断地发出自己的beacon信息,当周围的设备接收到该beacon信息后,会使用该beacon所提供的公钥加密自己的位置信息并上传至苹果的服务器,整个过程是对用户是透明的,苹果承诺该加密信息中不会带有任何的用户身份标记,而且因为公钥会定期更换,即使是同一部手机做中继,也无法得知两次beacon得到的设备信息是同一部设备,目前尚不清楚中继端的手机是否需要时iOS 13/iPadOS的设备。其实这中间有个问题,就是丢失的设备在未联网的情况下是如何知道自己处于丢失状态的呢?难道是设备只要开着蓝牙,就无时无刻的处于发送与中继的状态?
  5. 第四步中所提到的加密信息,目前能够公开知道的是主要包含两部分信息:

    1、加密后的位置信息;

    2、加密所用的公钥信息;

  6. 当用户发现设备丢失后并开启丢失模式后,会像苹果的服务器发送之前所存储的公钥作为标志,苹果则利用该标志位在自己的服务器端找寻是否有相关设备的位置信息。这其中又有一个公钥变换后,苹果是如何匹配设备的问题,目前尚不能找到有关资料。
  7. 当苹果在服务器中找到了你的设备位置信息,它会将该加密信息传输至你正在查看的设备,这样你就能在Find My中发现自己的设备的位置了。整个期间实现了完全的端对端加密,不存在任何中间设备解密设备信息的情况,至少目前看的确如此。

总结

我们可以看到这次的新特性是巧妙地利用了蓝牙作为beacon的能力,但是也让我突然想起iOS12时争议最大的通知中心无法真正关闭Wi-Fi和蓝牙的功能,当时很多人认为这种操作反常识,但是现在看来,苹果也许在那个时间点已经提出了本次功能的原型并着手培养用户习惯,也确实符合苹果细节之处见真章的习惯,个人猜测,不喜勿喷哈。

要不是我这次意外意识自己的iPad Pro,也许我永远都不知道系统竟然还有这样的隐藏功能,不过希望大家还是不要遗失设备的好,毕竟,就算在Find My上看到了设备信息,也并不一定意味着就能找回来,反倒看着上面的位置信息难过不已。