淺析 Find My 原理


什么是 Find My 網絡?

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 界面如下圖:

微信截圖_20210420104115.png

讓外設加入 Find My 網絡

入網要求

非蘋果生產的外設能否並入查我網絡呢?答案是可以的:

蘋果為其它想並入查我網絡的外設生產商提供了技術規格,規格書如下:

📎Find_My_Network_Accessory_Specification__Developer_Preview_R3.pdf

從規格書中,我們可以詳細了解到查我網絡的原理、工作流程以及和外設相關技術標准。

github 資源

有一點比較麻煩的是,想並入Find My的設備的生產廠商,必須過 MFi 認證。github 上有人通過一些反向工程的方法,成功從蘋果的服務器上拿到了自己的 BLE 外設的定位數據,鏈接如下:

https://github.com/seemoo-lab/openhaystack#how-to-track-other-bluetooth-devices

但這個的實用意義並不大。簡單來說,它的工作流程是這樣的:

  1. 作者在它的蘋果電腦上生成了一對密鑰對。把其中的 public key 通過有線的方式給到 BLE 外設
  2. BLE 外設按照 Find My 規格中關於 beacon 數據的格式,把 public key 不斷的向周圍廣播出去
  3. 周圍的蘋果設備把這個 public key 結合自身的定位數據,發送到蘋果服務器
  4. 作者的蘋果電腦、通過一個 mail 插件,把服務器上的定位數據拿下來,顯示在地圖上。

可見,作者並不是從蘋果的 Find My APP 上顯示的設備定位,而是通過自己的 mail 插件來顯示,並且需要一系列的部署來繞過蘋果的門禁機制,實用意義不大。

第三方 Find My 外設

目前,已經有幾家第三方公司的產品支持了 Find My 網絡,包括:

貝爾金耳機

微信截圖_20210422173430.png

VANMOOF S3電動自行車

微信截圖_20210422173621.png

防丟器

微信截圖_20210422173834.png

開發 Find My 外設

想開發 Find My 外設的廠商、必須先拿到 MFi 認證。

具體的說,過了 MFi 認證的廠商,才能進一步拿到以下文檔:

  • Works with Apple Find My Identity Guidelines
  • Software Authentication Server Specification
  • Unified Accessory Restore Protocol

在過 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 網絡外設相關的技術范圍內。

Find My app

即用戶使用 Find My 網絡這個功能的軟件。iOS 13 之后,是一個默認的應用。可在 iPad 或 iPhone 上直接打開。打開后的界面如文章開頭所示。

這個 app 包含以下功能:

  • 和朋友、家人分享你的定位
  • 在地圖上顯示你的、可被查找的設備
  • 讓特定設備播放聲音、格式化等
  • 添加新的設備

Transport

傳輸方式。Find My 網絡外設使用 BLE 作為首要的傳輸技術、和蘋果設備進行交互

Operation

工作流程。如下:

  1. 使用 Find My app 和一個 Find My 外設連接之后,他們之間就協商出了一對秘鑰對。Find My app 保存着私鑰和公鑰;外設保存着公鑰。
  2. 外設作為 BLE beacon,不斷廣播一個變化的秘鑰(由公鑰衍生而得)
  3. 周圍的蘋果設備(iPad,iPhone 等,可以是其他人的設備)檢測到這個廣播后,會把里面的秘鑰結合自身的定位數據,打包上傳蘋果服務器
  4. Find My app 從服務器上拿到這些定位報告,將相關的定位數據解析出來

其中,和定位相關的數據是端對端加、解密的,蘋果服務器無法得知。我的理解是,由周圍的蘋果設備加密(定位數據 + 公鑰),再由 app 解密(定位數據 + 私鑰)。蘋果服務器只負責存儲、傳輸。

Roles

角色。包含以下幾種:

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 的工作流程描述如下:

  1. 設備擁有者(owner)通過 Find My app 把 外設(accessory )設為擁有者設備(owner device)
  2. 外設透過 Find My Network 網絡、借助網絡的定位功能,把自身的大概位置上傳蘋果服務器(Apple Server)。
  3. 設備擁有者通過 Find My app 可以在世界任何地方看到自己的設備

四個角色的關系如下圖所示:

微信截圖_20210420115322.png

Features

包含以下幾個特性:

Unwanted tracking detection

不必要跟蹤監測,簡稱 UT。我的理解是有這樣的應用場景:可以讓用戶發現不法者放在自己身邊的跟蹤器。

Lost mode

設備的擁有者可以把外設設置為丟失狀態。

Play sound

擁有者的,或者非有擁有者的手機都可以控制外設發出聲音。

前者通過連接后的 BLE Play sound—owner control point 特征來控制

后者通過連接后的 BLE Play sound—non-owner control point 特征來控制,只能控制 UT

States

外設的工作流程可以用一個狀態機來描述,如下圖:

微信截圖_20210420143430.png

Unpaired

未配對狀態。外設第一次啟動或者設置完成之前必須處於該狀態。

在該狀態下,外設必須把 Find My Network 服務作為 primary service 以可連接的廣播類型發出來。

我的理解:

發出可連接廣播,目的在於讓擁有者發現、連上該外設,以便對其進行一些初始配置。

后面應該會講到在配置完成后,發出不可連接的廣播(beacon),這個廣播就攜帶了相關配置信息,可以對設備進行定位。

Connected

連接狀態。有以下特點:

  1. 配對流程完成之后,外設必須進入連接狀態(是廢話嗎?還不清楚)
  2. 外設配對完成之后,擁有者可能會斷開連接(外設多了之后,擁有者沒辦法對所有設備都保持連接,所以斷開?)
  3. 已配對的外設,不再接受另一個蘋果設備的配對;除非外設已經走完解配對流程(注意,沒說不能連接)
  4. 外設需要能同時支持兩個蘋果設備同時連接(需要屬於同一個 iCloud ID 的蘋果設備,為啥要同時支持多個?)
  5. 動作檢查和 UT 協議在連接狀態下失效(因為沒必要)
  6. 配對過的外設,如果在 10s 內不能完成對鏈路的加密,則應主動斷開連接。

我的理解:

連接狀態似乎不是外設所處的一個主要的狀態。其目的只是為了給外設做一些初始化處理。

Nearby

附近狀態。另外還有以下特點:

  • 外設斷開連接之后,必須馬上進入該狀態,並且應該保持 TNEARBY
  • 動作檢測和 UT 協議失效(這兩玩意兒是 Separated 狀態專屬的)
  • 廣播包帶 nearby key

我的理解:

這個狀態應該也屬於一個過渡的狀態。這個狀態的目的是為了能夠再次連接上?不清楚。

關於外設的狀態機,以目前我的理解,Separated 狀態才是一個正常應用的外設長期所處的狀態。其它狀態都是過渡

Separated

分離狀態。滿足以下條件的外設必須進入該狀態:

  1. 外設已經配對。並且經歷了初始化流程而啟動(例如,復位)
  2. 處於 nearby 狀態且已經 TNEARBY 超時

該狀態有兩個功能:動作檢查和 UT 協議

我的理解:

這個狀態是正常使用的外設長期處於的狀態。

一個剛開箱的外設經過連接、配對之后,就會處於該狀態,不斷向外發出帶有密鑰信息的特定廣播信號。

要求

前面對 Find My network 外設協議的一些核心概念做了闡述,這個章節會說明一些要求,包括:

  • 硬件要求
  • 加密
  • 軟件鑒權
  • 蘋果服務器公鑰
  • 重啟
  • 固件升級

本文只挑一些主要進行說明,具體需要見規格書

硬件要求

藍牙

藍牙控制器必須滿足以下特性:

  • LE 2M uncoded PHY。
  • Data packet length extension

藍牙發送功率應該固定在大於等於 +4dBm 的水平,且滿足 EIPR(Effective Isotropically Radiated Power ),即天線射頻的方向性也要好

更大的發射功率讓外設更容易被發現且能獲得更頻繁的位置更新;相反的,發射功率低則定位更加精確。

低功耗藍牙外設應該支持:

  • LE advertising extensions 以支持其它服務和載荷信息的發送
  • Random resolvable address 且這些地址可周期性輪轉變化

產品規格要求

在 separated 狀態下,應該支持“動作觸發”的 UT 聲音警告:

  • 使用加速度傳感器實現“動作觸發”
  • 使用喇叭等發聲器件實現 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 的誤差。

加密

實現外設和擁有者設備的配對和密鑰的派生功能,需要以下條件:

  • A cryptographically secure DRBG
  • Modular reduction and addition of big integers
  • An implementation of the SHA-256 cryptographic hash function
  • An implementation of the ANSI x9.63 KDF (see SEC1, 3.6.1 ANSI X9.63 Key Derivation Function)
  • Computations on the NIST P-224 elliptic curve (see FIPS 186-4, D.1.2.2. Curve P-224):
  • ECDSA/ECDH over the NIST P-256 elliptic curve (see FIPS 186-4, D.1.2.3. Curve P-256 and Pairing for more details).
  • AES-128-GCM encryption and decryption

軟件鑒權

定義、作用理解中。。。

蘋果服務器公鑰

定義、作用理解中。。。

斷電重啟

設備斷電重啟后應該進入 separated 狀態等一些要求

固件升級

外設必須能支持固件升級功能,且包含以下要求:

  • 有一個機制來確保固件的完整性
  • 待升級固件在發布前需要完成 MFi 認證的要求
  • 固件的版本不可以降級


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM