蓝牙的连接过程
Posted Fresh_Air_Life
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝牙的连接过程相关的知识,希望对你有一定的参考价值。
好就没写blog 了, 最近看到了几篇关于蓝牙不错的文章, 这里转载, 并总结一下吧,
地址如下: https://blog.51cto.com/11134889/2089794
一般的蓝牙连接, 都会先设备配对, 然后再正式连接
一. 配对
1.1 概念
配对就是master(主设备)和slave(从设备) 协商确定加密key的过程, 下面图中的第7部分即为配对
这个图不知道是从哪里搞到的? 看样子应该是从协议文档里面找到的, 想想学这个东西主要还是为了应付面试, 就暂时不查看文档了, 如果那一天要自己录视频讲解, 就得查文档了.
图中看到
1.建立连接, 这个讲道理,应该是建立ACL的连接, 这个实在广播信道上面监测到设备的意思 ?
2.交换特性, 应该就是通过sdp 来交换特性 , 交换特性, 应该也是在广播信道上面完成的 ? 广播信道有几个 ?
3.连接请求, 这个应用就是在 ,
4.确定角色 // 这个情况有点复杂, 之前查看博客,看到主从设备并不是固定的,而是可以变化的
5.选择AFH //AFH的目的,
6.选择安全特性 //哪几种安全特性
7.配对, 授权
8,加密
9.设置关闭
发起数据流
10.断开连接
1.2配对方法
两种配对的方法legacy pairing 和 secure connections 两种, legacy pairing 较旧, secure Connection 较新. 只有两种设备都支持 secure Connection 的时候 ,才能使用secure Connection , 否则 使用 legacy pairing , 具体两者的区别, 暂时未知
1.3配对过程
下面是流程图, 具体的步骤有点复杂
1.选择oob 信息集合 // 这个是可有可无的
2.使能简单配对
3.链路层连接请求,选择oob信息传输
4.开始简单配对
5.交换IO 能力
6.交换公钥
7.数字比对, 或者 密码entry 或者 带外连接方式发送到对端设备
8.Diffie-Hellman 算法检测
9.计算连接的密钥
10.使能加密
11.链路连接应答
总结一下, 配对主要完成的是 下面的内容, 交换IO的能力, 交换公钥, 生成秘钥, 使能加密
1.3.1 Pairing Feature Exchange
用于交换双方有关鉴权的需求(authentication requirements),以及双方具有怎么的人机交互能力(IO capabilities)。其中最重要的是IO capabilities exchange。
IO的能力可以归纳为如下的六种:
NoInputNoOutput
DisplayOnly
NoInputNoOutput1
DisplayYesNo
KeyboardOnly
KeyboardDisplay
上述的IO能力决定了后续的鉴权方式。
1.3.2 Public key exchange
两个设备之间交换Public key。 一旦设备收到对端设备的公钥,它就可以开始计算Diffie Hellman密钥(DHKey)。耗时较多,应该尽早开始,以便用户交互可以隐藏计算时间。 在步骤8之前不需要DHKey。
当 Public key的长度大于DM1包的长度时,要使用专门的PDU来进行数据发送。
1.3.3.Authentication
通过SMP协议进行实际的配对操作,根据阶段2 “Feature Exchange”的结果,有三种鉴权方法可选:
1.3.3.1 OOB鉴权
如果双方都支持OOB鉴权,则选择该方式(优先级最高)。由配对的双方,在配对过程之外,额外的交互一些信息,并以这些信息为输入,进行后续的配对操作。这些额外信息也称作OOB(out of band),OOB的交互过程称为OOB protocol。
1.3.3.2 MITM鉴权
(man-in-the-middle)authentication,由两者方法:
Numeric Comparision方式鉴权:两个设备自行协商生成6位数字,并显示出来(要求两个设备具有显示能力),用户比较后进行确认(一致,或者不一致,要求设备有简单的yes or no的确认能力)。
Passkey Entry,通过输入配对码的方式鉴权。
1.3.3.3 just work
Just Work,不需要用户参与,两个设备自行协商。
1.3.4.DHKey Checks
一旦设备完成鉴权过程,并且DHKey计算已完成,则检查生成的DHKey值。 如果成功,则两个设备都将完成向用户显示关于该过程的信息,否则控制器向主机发送消息以通知其停止显示该信息。
当配对过程完成后,link key就可以从DHKey中计算得到,并用做后续交互过程的输入(KEY + 明文 => 加密数据),通过HCI_Link_Key_Notification来通知host。
经过上述过程后,双方已经产生了加密key,因而可以建立加密的连接。加密连接建立后,可以互相传送一些私密的信息,例如Encryption Information、Identity Information、Identity Address Information等。
以上是关于蓝牙的连接过程的主要内容,如果未能解决你的问题,请参考以下文章