2021年4月21日的苹果发布会发布了一款新的产品:AirTag。使用的是 BLE + UWB 的技术。BLE 和 Find My 网络为 AirTag 提供了 GPS 定位,UWB 进一步提供了厘米级别的定位精度 。二者相互补充,实为用户提供极致的物品防丢体验。AirTag 外观如下图所示:
Find My 是苹果公司发布的一项应用技术。这项技术比较神奇的一点是,支持这项技术的外设产品(如 AirTag),即使本身没有 GPS 模块,也能利用它周围的苹果设备(iPhone,iPad,AirPods,AirTag等)来帮助其定位。
其实三星早在21年1月份就发布了类似的产品(SmartTags),但三星的生态没有苹果的强大,使用体验上有所欠缺(无法全球定位)所以发布了之后不愠不火。
使用 iPhone 打开 Find My APP,就可以从地图上看到我所拥有的、所有被 Find My 网络侦测到的设备。APP 界面如下图:
非苹果生产的外设能否并入查我网络呢?答案是可以的:
苹果为其它想并入查我网络的外设生产商提供了技术规格,规格书如下:
Find_My_Network_Accessory_Specification__Developer_Preview_R3.pdf
从规格书中,我们可以详细了解到查我网络的原理、工作流程以及和外设相关技术标准。
有一点比较麻烦的是,想并入Find My的设备的生产厂商,必须过 MFi 认证。github 上有人通过一些反向工程的方法,成功从苹果的服务器上拿到了自己的 BLE 外设的定位数据,链接如下:
https://github.com/seemoo-lab/openhaystack#how-to-track-other-bluetooth-devices
但这个的实用意义并不大。简单来说,它的工作流程是这样的:
可见,作者并不是从苹果的 Find My APP 上显示的设备定位,而是通过自己的 mail 插件来显示,并且需要一系列的部署来绕过苹果的门禁机制,实用意义不大。
目前,已经有几家第三方公司的产品支持了 Find My 网络,包括:
想开发 Find My 外设的厂商、必须先拿到 MFi 认证。
具体的说,过了 MFi 认证的厂商,才能进一步拿到以下文档:
在过 MFi 认证之前,苹果也发布了一份规格书,阐述了 Find My 的一些原理和流程,并且详细描述了构建一个 FindMy 外设所需的 BLE 服务。但也仅限于此,其中关于如何标识、加密、验证、OTA 的相关流程,需要过了 MFi 认证之后,拿到上述几个文档才能进一步了解。
这份文档目前(2021/04/20)貌似找不到了。幸亏我下手快,备份了下来:
Find_My_Network_Accessory_Specification__Developer_Preview_R3.pdf
本章节提及的概念,不包含整个完整的 Find My 网络的技术范围,仅限定在 Find My 网络外设相关的技术范围内。
即用户使用 Find My 网络这个功能的软件。iOS 13 之后,是一个默认的应用。可在 iPad 或 iPhone 上直接打开。打开后的界面如文章开头所示。
这个 app 包含以下功能:
传输方式。Find My 网络外设使用 BLE 作为首要的传输技术、和苹果设备进行交互
工作流程。如下:
其中,和定位相关的数据是端对端加、解密的,苹果服务器无法得知。我的理解是,由周围的苹果设备加密(定位数据 + 公钥),再由 app 解密(定位数据 + 私钥)。苹果服务器只负责存储、传输。
角色。包含以下几种:
Owner device
拥有者设备。你的苹果设备,自然是用你的 Apple ID 进行激活、登录的,把外设和你的苹果设备连接过后(通过 Find My app),这个外设便被绑上了你的 Apple ID。成为 Find My network 的“拥有者设备”角色。当外设通过 Find My app 和某个苹果设备进行连接配对之后,外设便和 Apple ID 进行了关联。具有相同 Apple ID 的苹果设备、外设,便叫。
Accessory
实现了 Find My network 协议的外设。
Find My network
当你带着一个支持 Find My 协议的防丢器上街,你所处的环境里,周围人的 iPad、iPhone 等苹果设备(使能了 Find My 功能)构成了一张网络。你的防丢器本身不带 GPS 无法定位,但这张网络中的设备可以提供自己的 GPS 数据、和你的防丢器的 Apple ID 进行关联后,上传到苹果的服务器。
网络中具备扫描广播功能的苹果设备,称为发现者(finder),发现者越多,外设的定位越精准。
有一点需要注意的是,别人的苹果设备也能连上你的防丢器,用于给你的防丢器发送一个警告等功能。
Apple server
苹果服务器。负责接收加密过的定位相关数据并保存。
总结一下,结合 Roles 和 Operation 这两个概念的内容,外设的 Find My network 的工作流程描述如下:
四个角色的关系如下图所示:
包含以下几个特性:
Unwanted tracking detection
不必要跟踪监测,简称 UT。我的理解是有这样的应用场景:可以让用户发现不法者放在自己身边的跟踪器。
Lost mode
设备的拥有者可以把外设设置为丢失状态。
Play sound
拥有者的,或者非有拥有者的手机都可以控制外设发出声音。
前者通过连接后的 BLE Play sound—owner control point 特征来控制
后者通过连接后的 BLE Play sound—non-owner control point 特征来控制,只能控制 UT
外设的工作流程可以用一个状态机来描述,如下图:
Unpaired
未配对状态。外设第一次启动或者设置完成之前必须处于该状态。
在该状态下,外设必须把 Find My Network 服务作为 primary service 以可连接的广播类型发出来。
我的理解:
发出可连接广播,目的在于让拥有者发现、连上该外设,以便对其进行一些初始配置。
后面应该会讲到在配置完成后,发出不可连接的广播(beacon),这个广播就携带了相关配置信息,可以对设备进行定位。
Connected
连接状态。有以下特点:
我的理解:
连接状态似乎不是外设所处的一个主要的状态。其目的只是为了给外设做一些初始化处理。
Nearby
附近状态。另外还有以下特点:
我的理解:
这个状态应该也属于一个过渡的状态。这个状态的目的是为了能够再次连接上?不清楚。
关于外设的状态机,以目前我的理解,Separated 状态才是一个正常应用的外设长期所处的状态。其它状态都是过渡
Separated
分离状态。满足以下条件的外设必须进入该状态:
该状态有两个功能:动作检查和 UT 协议
我的理解:
这个状态是正常使用的外设长期处于的状态。
一个刚开箱的外设经过连接、配对之后,就会处于该状态,不断向外发出带有密钥信息的特定广播信号。
前面对 Find My network 外设协议的一些核心概念做了阐述,这个章节会说明一些要求,包括:
本文只挑一些主要进行说明,具体需要见规格书
蓝牙
蓝牙控制器必须满足以下特性:
蓝牙发送功率应该固定在大于等于 +4dBm 的水平,且满足 EIPR(Effective Isotropically Radiated Power ),即天线射频的方向性也要好
更大的发射功率让外设更容易被发现且能获得更频繁的位置更新;相反的,发射功率低则定位更加精确。
低功耗蓝牙外设应该支持:
产品规格要求
在 separated 状态下,应该支持“动作触发”的 UT 声音警告:
所谓 UT(Unwanted Tracking Detection ),主要目的在于给用户一个声音警告,告知其正携带着一个不是自己的外设。
Find My 标识
每个支持 Find My 的外设都应该在产品上戴有一个用户可见的标识
查找序列号
产品的序列号应该通过一些方式(NRF 或 BLE 连接)可读
Find My network 可禁用
产品应该实现一个机制来禁用 Find My network 功能,如按按键
Find My network 配对模式
产品应该实现一个机制让其进入配对模式,如长按按键 3 秒等
复位
产品应该有个机制来实现恢复出厂设置。恢复出厂设置的产品应该清除掉以下内容之外的所有信息:
• Accessory information service
• Firmware version
• Serial number
• Software authentication token
• Software authentication UUID
• Apple server public keys
- Signature verification key (Q_A)
- Encryption key (Q_E)
时钟精度
苹果设备期望外设达到 200PPM 的计时精度,即每天 17.28s 的误差。
实现外设和拥有者设备的配对和密钥的派生功能,需要以下条件:
定义、作用理解中。。。
定义、作用理解中。。。
设备断电重启后应该进入 separated 状态等一些要求
外设必须能支持固件升级功能,且包含以下要求: