蓝牙的连接过程

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等。

以上是关于蓝牙的连接过程的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第二百八十九回:Android中的BLE开发:蓝牙连接设备三)

蓝牙Inquriy 过程详解

断网了,如何让微信小程序,可以用蓝牙

蓝牙BLE协议栈基础知识

win10蓝牙已配对手柄,但无法自动连接,也没有连接按钮?

Android蓝牙协议-蓝牙配对与连接