首页 > 其他分享 >GFPS技术原理(三)广播信息

GFPS技术原理(三)广播信息

时间:2024-11-11 08:49:57浏览次数:3  
标签:index account GFPS 广播 key Provider 原理 配对

我们知道GFPS有两个角色,Provider用于发送广播,然后Provider的广播数据在BR/EDR处于配对模式和非配对模式两种不同情况下,广播数据也是不尽相同,下面来做分析:

配对模式:

广播频率:

处于配对模式下,Provider advertising interval必须不超过100ms,也就是最少要一秒发送10次广播,这样有利用Seeker快速发现Provider。

广播内容:

  1. 广播数据内容必须包括UUID等于0xFE2C的快速配对服务,服务数据必须包含3个字节的Model ID。
    如下图示例:
    在这里插入图片描述

非配对模式

广播频率:

处于非配对模式下,Provider advertising interval最多可以250ms,也就是一秒发送4次广播。

广播内容:

非配对模式下,Provider广播数据内容必须包括UUID等于0xFE2C的快速配对服务,服务数据则变成了Account data,此目的是让Seeker能够不需要把Provider按回配对模式,也能识别是否属于同一个账号。

Account数据内容

接下来看看Account 数据内容格式:
在这里插入图片描述
看到这里,account data主要以account key filter形式表现在广播数据中,account key filter又是何物,他是一个布隆过滤器,就是一个哈希函数,假如Provider有5个account key,通过布隆过滤器,Seeker可以快速的判断此Provider是不是属于同一账号,但是存在一定的误判率,为了进一步降低误判率,如果Provider没有准备好配对,可以置上type为(hide UI indication),如果type为show UI indication,那么也可以通过后面的校验(key_based pairing)来排除误判。

下面主要看看account key filter是如何计算得来的:

account key filter计算
  1. 假设provider总共有n个account key储存在account key list里。
  2. 假设s是account key filter的长度,计算公式:uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);假设provider有1个account key,s等于4.
  3. 假设F是一个储存accout key filter的数组,初始化为0: uint8_t F[s] = {0};
  4. 对于每个account key K的循环计算如下:
    1:V= concat(K,salt),看如下示例代码
// In the sample code, the size of salt is 2 bytes.
#define SALT_SIZE 2

uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE];
for (uint8_t keyIndex = 0; keyIndex < n; keyIndex++)
  {
     // concat (K, Salt)
      fastpair_get_account_key_by_index(keyIndex, V);

      uint8_t randomSalt = (uint8_t)rand();
      V[FASTPAIR_ACCOUNT_KEY_SIZE] = randomSalt;
      ... }

2:对V进行SHA256计算,结果保持在字符型数组H里,示例代码如下:

uint8_t H[32] = {0};
SHA256_hash_function(V, H);

3:32个字节的字符型数组H转换成8个int行数组

 uint32_t X[8];
 for (index = 0; index < 8; index++)
 {
    X[index] = (((uint32_t)(H[index * 4])) << 24) |
                (((uint32_t)(H[index * 4 + 1])) << 16) |
                (((uint32_t)(H[index * 4 + 2])) << 8) |
                (((uint32_t)(H[index * 4 + 3])) << 0);
 }

4:对于每个X数组,总共有n个X数组,通过如下公式循环n次,计算出account key filter F数组的值,这也是布隆过滤器的精髓:

 
for (index = 0; index < 8; index++)
{
    uint32_t M    = X[index] % (s * 8);
    F[M / 8] = F[M / 8] | (1 << (M % 8));
}
Salt的理解

可以理解为2字节随机数,用来计算account key filter附属在account key后面形式一个字符串,这个值会随着RPA的变化而变化。

标签:index,account,GFPS,广播,key,Provider,原理,配对
From: https://blog.csdn.net/Jzj1234555/article/details/143648664

相关文章

  • 鸿蒙Next系统中的随机数生成:从Crypto Architecture Kit看加密原理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在当今数字化浪潮汹涌澎湃的时代,信息安......
  • AUTOSAR CP Ethernet State Manager(EthSM)规范的主要功能以及工作原理导读
    AUTOSAREthernetStateManager(以下简称EthSM)规范的主要功能AUTOSAREthernetStateManager(以下简称EthSM)规范的主要功能包括:通信控制网络模式管理:为通信管理器(ComM)提供API,用于请求以太网网络的通信模式,如ETHSM_FULL_COMMUNICATION(全通信)、ETHSM_SILENT_COMMUNICATIO......
  • 【Python知识宝库】快速了解 `isinstance()` 的原理、作用和使用场景
    ......
  • 揭秘MySQL数据一致性:从原理到实践,助你征服大厂面试官
    ......
  • Redux的基本原理以及其如何在React中使用
    什么是Redux?它有什么用Redux是一个用于JavaScript应用的状态管理库,通常与React一起使用。它帮助开发者管理应用中各个组件之间的状态,使得状态的变化变得更加可预测和易于调试。注意:Redux也可以不和React组合使用的哦(通常一起使用)Redux基本原理所有的状态都以对象树......
  • 数据库系统原理大作业要求-计算机实践课程题目要求
    目录背景一、内容要求学生成绩管理系统需求要求二、提交要求背景    本文记录了自考计算机科学与技术专业的时候,遇到的C++程序设计的题目。分享出来,让同学们提前了解一下实践课程的难度。为自己的实践课程提前做准备,提前预习。一、内容要求学生成绩管理系......
  • 直流有刷电机原理
    要研究直流有刷电机的原理,需要用到高中的物理知识:物理在磁场中的受力情况,所以这里我们先介绍一下左手定则。左手定则:左手四指和大拇指保持相互垂直,磁场方向垂直穿过手心(手心面向N极,手背面向S极),四指只想电流方向,大拇指所指的方向就是所受安培力的方向。        电流......
  • 栈和队列(原理、代码实现、例题)
    一、栈1.概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(LastInFirstOut)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做......
  • 最短路径算法综述:原理、比较与实现
    最短路径算法综述:原理、比较与实现一、引言在图论和计算机科学领域,最短路径问题是一个经典且重要的研究内容。它在交通导航、网络路由、物流规划等众多实际应用场景中有着广泛的应用。本文将详细介绍几种常见的最短路径算法,包括Dijkstra算法、Bellman-Ford算法、Floy......
  • 排序算法原理、应用与对比
    一、排序算法综述排序算法在计算机科学中具有至关重要的地位。在众多应用场景中,如数据库管理、搜索引擎结果排序、数据分析等,高效的排序算法能够极大地提高系统的性能和用户体验。不同类型的排序算法具有各自独特的特点和分类。从算法的稳定性来看,有些算法是稳定的,如插入排序......