官网规范
由于蓝牙设备在使用上有配对的流程,对于没有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 Power3. 关于Key
- 反偷听的Public key 和private key(Anti-Spoofing Public/Private Key Pair)
Private Key是 256bits,建议保存在安全区域,避免泄露出去
Public Key在Seeker端才用得到- Account Key list
Account key是为了让Seeker能识别出来这个key是属于某个google账号的。
4.关于Advertising
在BR/EDR是discoverable时的Advertising设定:
- 在广播包中要加入24bit module ID
- Advertising Inerval <= 100ms
- 广播时要使用RPA address
- Payload里要包含GFPS的service UUID:0xFE2C
在BR/EDR是non-discoverable时的Advertising设定
- 在广播包里加入 Account Key,这样Seeker在发现Provider有属于他认识的Account时,可以直接开始Fast Pair
- Advertising Interval <= 240ms
- 广播时也要用RPA地址
- Pay load要包含 GFPS的Service UUID 和 Account key list
- 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|