结合实例从HCI层分析经典蓝牙连接和配对过程

我们知道,经典蓝牙BREDR的link key协商是在LMP层做的,那么蓝牙Host在鉴权的过程中,会跟BT SOC有哪些交互:

首次配对

  1. 在HCI Inuqiry找到想要配对的设备后,Host会调用HCI Create Connection命令去连接对方设备,创建ACL连接,如下图,ACL Connection handle = 0x0004:
    在这里插入图片描述
  2. ACL连接创建成功后: 蓝牙HOST会去读取时钟偏移,设置Link Policy(支持role swithc, Hold Mode和Sniff Mode),以及读取对方设备的feature和extended feature:需要注意的是extended feature里的SC Host就是说支持Secure connection,也就是蓝牙4.2采用的基于ECDH鉴权加密机制,如下图:
    在这里插入图片描述
  3. 接下来蓝牙Host还会读取对方设备的名字,会设置APCF的过滤规则(通过0xFD57命令),然后就开始进入鉴权过程,如下图红色框:
    在这里插入图片描述
步骤HCI详解
1HCI Authentication Requested蓝牙host发起鉴权
2HCI Command Status (Success, Command=Authentication Requested)BTSOC响应OK
3HCI Link Key RequestBTSOC请求HOST是否有现成的link key
4HCI Link Key Request Negative ReplyHOST找了一通没有发现对方设备的link key
5HCI Command Complete (Command=Link Key Request Negative Reply, Success)BTSOC响应HOST:好的,我知道了,你没有现成的Link key,我会告诉对方设备的
6HCI IO Capability Request对方设备要来查询HOST的IO capability
7HCI IO Capability Request Reply (IoCapability=Yes/No, HostOobDataPresent=None, Auth=MITM+Dedicated)HOST告诉对方设备IO Capability是支持显示,并且要求认证需要MIMT,以及Dedicated Bond
8HCI Command Complete (Command=IO Capability Request Reply, Success)BTSOC回应HOST,同时会问对方设备的IO Capbility
9HCI IO Capability Response (IoCapability=None, RemoteOobDataPresent=None, Auth=!MITM+General)对方设备的IO Capability是不支持显示,也不支持OOB,不要求MIMT,需要General Bonding
10HCI User Confirmation Request (Pass=039802)经过上面双方交互了IO Capability,双方确定了Numeric comparison配对方式,对方要求显示4个字节字符:039802 ,这里手机上会有一个弹窗显示这几个数字,让用户点击确认
11HCI User Confirmation Request Reply用户点击确认,没错,就是这个数字
12HCI Command Complete (Command=User Confirmation Request Reply, Success)BTSOC把这个用户的确认信息告诉了对方设备
13HCI Simple Pairing Complete (Success)BTSOC和对方设备经过一番LMP交流计算出最终的link key之后,告诉HOST鉴权成功完成。
14HCI Link Key Notification ( Key=F6E7A1F5:80C01AEF:27F16B1B:75C0B7E5, Type=Unauthenticated-256)BTSOC告诉HOST Link key,HOST会帮BTSOC保存在本地。
15HCI Authentication Complete (Success, Connection=0x0004)鉴权成功结束,皆大欢喜。

配对后的连接

如果首次配对结束,蓝牙HOST会保存Link key 在本地,那么下次连接的时候就不需要重新计算Link Key,过程就简单了很多,如下图:
在这里插入图片描述

步骤HCI详解
1HCI Authentication Requested蓝牙host发起鉴权
2HCI Command Status (Success, Command=Authentication Requested)BTSOC响应OK
3HCI Link Key RequestBTSOC请求HOST是否有现成的link key
4HCI Link Key Request Reply (14:6C:27:DF:91:B1, Key=26AF7922:13E89779:8D76C776:C35BA8F2)HOST在本地找到了之前配对过的Link key,然后发给了BTSOC
5HCI Command Complete (Command=Link Key Request Reply, Success, 14:6C:27:DF:91:B1)BTSOC回应了BTHOST给的link key说明没问题
6HCI Authentication Complete (Success, Connection=0x000E)鉴权成功结束。

配对后,但对方设备的Link Key丢失

  1. 对方设备如果擦除了Link Key,那么整个流程就要分为两次了: 由于手机端不知道对方设备的Link Key已经丢失,然后会把之前的配对过的Link Key发给对方,但鉴权肯定是不成功的,对方会返回HCI Authentication Complete (PIN Or Key Missing, Connection=0x000C),如下图:在这里插入图片描述
  2. 由于手机端收到了PIN Or Key Missing,说明对方Link Key已经不存在了,那么需要重新鉴权协商Link Key,这个过程就跟首次配对的流程是一样的,如下图: 在这里插入图片描述

曾经遇到过的问题

之前碰到过一个对方Link key丢失后,手机重新配对,但不会发起A2DP音乐播放的问题,最后通过比较鉴权过程发现有细小差别:
在这里插入图片描述
差别就在于对方设备回复的HCI IO Capability Response ,里面有个Authentication Requirement,正常情况下是0x04,异常情况下是0x00,然后查看Core Spec:
在这里插入图片描述
应该是手机看到这个设备不需要Bonding,所以不会发起A2DP等服务的SDP查询,近而不会进行A2DP播放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/495081.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

StartAI图生图局部重绘,让画面细节焕发新生!!

在设计的世界里,每一个细节都承载着我们的创意与心血。然而,有时我们总会遇到一些不尽如人意的画面细节,它们如同瑕疵般破坏了整体的和谐与美感。今天,我要向大家推荐一款强大的工具——StartAI的局部重绘功能,它正是我…

VMware vCenter保姆级安装部署(VMware VCenter Nanny Level Installation and Deployment)

VMware vCenter保姆级安装部署教程 VMware vCenter‌是由VMware开发的一款虚拟化管理平台,主要用于管理和监控虚拟化环境中的虚拟机、主机和存储资源。它提供了一个集中控制的平台,简化了虚拟化基础设施的管理工作,提高了资源利用率和灵活性…

蓝牙协议——音量控制

手机设置绝对音量 使用Ellisys查看如下: 使用Wireshark查看如下: 音量的量程是128,0x44的十进制是68,53%或54%音量的计算如下: 68 / 128 53.125%耳机设置绝对音量

如何完全剔除对Eureka的依赖,报错Cannot execute request on any known server

【现象】 程序运行报错如下: com.netflix.discovery.shared.transport.TransportException报错Cannot execute request on any known server 【解决方案】 (1)在Maven工程中的pom去掉Eureka相关的引用(注释以下部分&#xff0…

从AI换脸到篡改图像,合合信息如何提升视觉内容安全?

本文目录 引言一、AI“真假之战”下的发展现状与考验挑战1.1 视觉内容安全现状与技术分类1.2视觉内容安全企业1.3视觉内容安全领域挑战 二、开山之石:引领视觉内容安全的创新之路2.1合合内容安全系统2.2发起编制相关技术规范2.3参与篡改检测挑战赛 三、视觉内容安全…

虚幻引擎结构之ULevel

在虚幻引擎中,场景的组织和管理是通过子关卡(Sublevel)来实现的。这种设计不仅提高了资源管理的灵活性,还优化了游戏性能,特别是在处理大型复杂场景时。 1. 场景划分模式 虚幻引擎采用基于子关卡的场景划分模式。每个…

log4j2漏洞复现(CVE-2021-44228)

靶场环境 步骤一:设置出战规则 步骤二:开启靶场 cd vulhub cd log4j cd CVE-2021-44228 docker-compose up -d docker ps 访问端口 靶机开启 步骤三:外带注入 获得dnslog 靶机访问dnslog 得到dnslog的二级域名信息 步骤四:构造…

美国加州房价数据分析01

1.项目简介 本数据分析项目目的是分析美国加州房价数据,预测房价中值。 环境要求: ancondajupyter notebookpython3.10.10 虚拟环境: pandas 2.1.1 numpy 1.26.1 matplotlib 3.8.0 scikit-learn1.3.1 2. 导入并探索数据集 通用的数据分析…

ML-Agents 概述(二)

注:本文章为官方文档翻译,如有侵权行为请联系作者删除 ML-Agents Overview - Unity ML-Agents Toolkit–原文链接 ML-Agents 概述(一) ML-Agents 概述(二) 训练方法:特定环境 除了上一节介绍的…

nlp新词发现——浅析 TF·IDF

传统nlp任务处理文本及其依赖已有的词表,只有在词表里出现的词才能被识别并加以处理。但这也带来了一些问题: 假设没有词表,如何从文本中发现新词? 随着时间推移,新词会不断出现,固有词表会过时&#xff0…

OpenAI 普及 ChatGPT,开通热线电话,近屿智能深耕AI培训

12月19日,在OpenAI直播活动的第10天,宣布允许用户通过电话或WhatsApp与ChatGPT进行交互。并在美国推出 ChatGPT 热线电话,用户拨打后可与 ChatGPT 进行语音对话。 这项服务的一个亮点在于它兼容各种类型的通信设备——不论是现代智能手机如iP…

vue中proxy代理配置(测试二)

接口地址:https://ss.dd.dd.d.cn:9006/thirdist/portalApi/biz-api/eemp/supervision/v1//getPeiCountData?batch2&cent0 1、配置一(代理没起作用) (1)设置baseURL为https://ss.dd.dd.d.cn:9006 (2&am…

国自然面上项目分享|基于人工智能和病理组学的早癌筛查算法研究|基金申请·24-12-24

小罗碎碎念 今天分享的项目为【常规面上项目】,执行年限为2018年1月至2021年12月,直接费用为55万元。 今天分享的这个项目很有意思,因为这个项目的成果是团队2020年申报基金委优青的材料,并且还有临床验证和商业转化,值…

地址踩踏问题

malloc分配地址大小不足,如 pstruct只分配了一个字节的地址,handle访问时需要访问8个字节的数据,此时虽然可以正常打印,但如果其他程序使用了未分配的7个字节地址,就会导致该handle无法正确访问

快速部署一套Kubernetes集群

一、准备环境 服务器规划: 角色 IP地址 k8s-master 192.168.1.71 k8s-node1 192.168.1.72 k8s-node2 192.168.1.73 服务器要求: 建议最小硬件配置:2核CPU、2G内存、20G硬盘。服务器可以访问互联网,会联网下载镜像。 软…

Github Copilot:已免费,速回归!!!

引言 2024 年 12 月,GitHub 宣布推出GitHub Copilot Free,这一消息让不少开发者为之欢呼雀跃。毕竟,谁不喜欢 白嫖 呢? GitHub Copilot 不仅提供了 AI 辅助编程功能,还与自家 VS Code 无缝集成,简直是编程…

使用TC命令模拟弱网丢包

在网络测试和优化过程中,模拟弱网环境(如高延迟、丢包、抖动等)是非常重要的一环。tc(Traffic Control)是 Linux 内核中的一个强大工具,它可以用于流量整形、流量控制、队列管理等。通过 tc,我们…

概率论 期末 笔记

第一章 随机事件及其概率 利用“四大公式”求事件概率 全概率公式与贝叶斯公式 伯努利概型求概率 习题 推导 一维随机变量及其分布 离散型随机变量(R.V)求分布律 利用常见离散型分布求概率 连续型R.V相关计算 利用常见连续型分布的计算 均匀分布 正态…

【文档搜索引擎】搜索模块的完整实现

调用索引模块,来完成搜索的核心过程 主要步骤 简化版本的逻辑: 分词:针对用户输入的查询词进行分词(用户输入的查询词,可能不是一个词,而是一句话)触发:拿着每个分词结果&#xf…

如何在centos系统上挂载U盘

在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…