蓝牙配对协议分析一

蓝牙配对协议分析一

蓝牙配对协议分析一

蓝牙配对是整个蓝牙连接过程中必不可少的环节,配对的目的是通过各种方法创建共享的 链路**(Link Key),该**用于设备间连接时认证鉴权并加密相互交互的数据,使得蓝牙技术更具有安全行。**不但可以用于当前的连接中,还可以用于两个设备后续的重连过程中,但是鉴权过程中如果比较双方的Link Key不一致,则必须重新开始配对流程,从而创建新的链路**(Link Key)用于新的连接交互流程。

链路**(Link Key)通过HCI命令HCI_Link_Key_Notification上报协议栈Host并保存,存储路径:/data/misc/bluedroid/bt_config.conf

存储内容如下图:
蓝牙配对协议分析一
Bluetooth Core Specification定义了两种标准配对流程:

  1. PIN码配对:蓝牙核心协议2.0及之前版本使用的配对流程。
  2. SSP安全简单配对:Secure Simple Pairing,蓝牙核心协议2.1及之后版本新增的一种配对流程,由于相较于PIN码配对具有更高的安全性、更方便的操作,从而现在市面上的蓝牙设备基本上都使用这种配对流程。

两种配对流程的触发时机都是在鉴权过程中(Authentication Requested),向协议栈Host请求Link Key,Host回复没有该链路**,从而芯片开始配对流程。接下来简单介绍PIN码配对的流程,然后重点分析SSP安全简单配对。

PIN码配对
该种方式配对时需要输入4位十进制组成的数,配对双方输入的数字相同,则配对流程才能成功创建共享的链路**(Link Key)。

其主要流程如下图:
蓝牙配对协议分析一

SSP安全简单配对
新增SSP安全简单配对的主要目的是简化用户的配对过程,次要目的是维护或提高蓝牙无线技术的安全性。由于在许多技术和产品中,高安全和易于使用的程度往往是相反的,因此从最终用户的角度来看,最终就是为了最大限度地提高安全性,同时尽量减少复杂性。

安全简单配对流程有如下两个安全目标:

  1. 防止被动窃听
  2. 防止中间人(MITM)攻击

SSP流程根据两个配对连接的蓝牙设备双方的I/O能力来确定采用如下哪种模型:
1、Numeric Comparison:数字比较模型,配对连接的两个蓝牙设备都有屏幕显示一个六位数字,并且有提供用户输入“Yes”或者“No”的选项。

显示的这6位数字的范围是:000000~999999,用户比较两个设备上显示的数字是否一致。连个设备上都确定Yes,配对才能成功,这样可以有效防止中间人(MITM)攻击。

使用场景:手机、车机、个人电脑等带有屏幕可以显示六位数字且提供Yes/No选项的设备间进行配对。

2、Passkey Entry:密码输入模型,配对连接的设备中其中一个设备具有输入能力,但不具有显示六位数字的能力,另一个设备具有输出显示六位数字的能力。只具有输入能力的设备正确输入另一个设备上显示的六位数字,配对才能成功,有效防止中间人(MITM)攻击。

使用场景:手机和蓝牙键盘这样的组合,一个设备只具有输入能力,另一个设备具备输出显示能力。

3、Just Works:工作模型,配对连接的设备中至少有一台设备没有能够显示六位数字的显示器,也没有能够输入六位数字的键盘。该模型使用类似Numeric Comparison数字比较,但不会向用户显示那六位数字,应用程序可以简单地要求用户接受连接即可。由于看不到配对过程,总是同意配对,所以无法防止中间人(MITM)攻击。

使用场景:蓝牙耳机和其他设备配对,因为大部分蓝牙耳机没有显示也没有数字输入功能。

4、Out Of Band:简称OOB,两个配对设备通过其他途径交换配对信息,比如带有NFC功能的蓝牙音箱等,但此种模型很少使用到,本篇不做过多讲解。

以上四种模型就是安全简单配对SSP的模型了,每种模型都有自己的使用场景,根据配对连接设备的具体条件来决定采用哪种模型来让用户确定是否配对。详细了解可以参考蓝牙核心协议《Core_v5.2.pdf》的Vol 1 -> Part A -> 5.2.4 Association models部分。

本篇蓝牙配对协议的分析就先到这儿,下篇继续分析SSP的完整流程。感兴趣的小伙伴欢迎私信留言一起讨论。

更多互联互通技术,欢迎关注微信公众号:Connectivity
蓝牙配对协议分析一