Google Fast Pair

官网规范
由于蓝牙设备在使用上有配对的流程,对于没有UI的设备来说,非常的不方便或是不安全。像Apple的Airpod,只要打开盒子,Apple的手机自动就弹出画面,只要点击一下就完成配对,非常的方便。
所以Google也在Android上搞了一个类似的东西,叫做Fast Pair。目前前几名的蓝牙大佬已经支持了。
本文就介绍Google Fast Pair (GFPS) 的基本原理。

基本原理

首先厂商需要到Nearby Devie注册自己的支持Google Fast Pair的设备,Nearby Device会分配Modle ID 和public key 及private key给该设备。
设备端通过BLE advertising广播自己的身份信息,当手机端发现搜索到的广播信息里表面设备支持GFPS,而且能认出该设备广播的modle ID的时候,就发起BLE连线到该设备,设备端发送其BR/EDR地址给手机,发送的数据是加密过的,手机拿到地址后发起BR/EDR连线,触发配对等流程,等BR/EDR连线都完成后,BLE连线就断开,整个Fast pair流程就结束。
整个过程,只有手机在发现支持GFPS的设备的时候,询问用户是否要连线,用户只要点击一下就行。

技术细节

角色定义

Seeker:手机端

Provider:设备端

1. 设备要首先要到Google nearby device去注册,这样Android才能识别出来。

设备的TX power设定有讲究

2. Power设定应该比较小,目标是离SP 1m内可被搜到.Google建议的设定方法:

The best way to determine the value is to measure the actual output of the device using an Android phone at 1 meter away, and then add 41 dBm to that. 41 dBm is the average signal strength loss that occurs over 1 meter.
Tx power 可以设定在广播包内,也可以设定在设备注册阶段就添上。
如果是在设备注册时就添上了Tx power的话,那所有的广播包都应该用这个Tx Power

3. 关于Key

  1. 反偷听的Public key 和private key(Anti-Spoofing Public/Private Key Pair)
    Private Key是 256bits,建议保存在安全区域,避免泄露出去
    Public Key在Seeker端才用得到
  2. Account Key list
    Account key是为了让Seeker能识别出来这个key是属于某个google账号的。

4.关于Advertising

在BR/EDR是discoverable时的Advertising设定:
  1. 在广播包中要加入24bit module ID
  2. Advertising Inerval <= 100ms
  3. 广播时要使用RPA address
  4. Payload里要包含GFPS的service UUID:0xFE2C
    在BR/EDR是non-discoverable时的Advertising设定
  5. 在广播包里加入 Account Key,这样Seeker在发现Provider有属于他认识的Account时,可以直接开始Fast Pair
  6. Advertising Interval <= 240ms
  7. 广播时也要用RPA地址
  8. Pay load要包含 GFPS的Service UUID 和 Account key list
  9. Account Key Filter
    为了让Seeker能尽快识别出Provider的广播包里是否有Seeker认识的Account,Provider对Account Key List计算出一个Key filter,Seeker能根据这个filter很快识别出是否有他关心的Account,从而决定是否要发起连线。
    这个算法的细节后续再加进来。

5. GATT Service

5.1 必须有GFPS Service
Service UIID
Fast Pair Service 0xFE2C
单元格 单元格

该Serviceyou如下的Charicterristic

Fast Pair Service characteristic Encrypted Permissions UUID
Key-based Pairing No Write and notify 0x1234
Passkey No Write and notify 0x1235
Account Key No Write 0x1236
5.2 ATT MTU Size Negotiation

MTU 的size 应该是83,23 也是可以的。

5.3 Characteristic: Key-based Pairing

Provider和Seeker基于一把private key,每次出发pair,public key/private key pair都应该不一样

5.4 Data format

Octet Data type Description Value Mandatory?
0 - 1 uint128 Encrypted Request varies Mandatory

16 - 79 |Public Key|varies|Optional|