蓝牙连接及安全基础

1.蓝牙基础介绍

蓝牙(Bluetooth)一词取自于十世纪丹麦国王哈拉尔HaralBluetooth。而将“蓝牙”与后来的无线通讯技术标准关联在一起的,是一位来自英特尔的工程师 Jim Kardach。他在一次无线通讯行业会议上,提议将“Bluetooth”作为无线通讯技术标准的名称。

蓝牙技术让各种数码设备之间能够无线沟通,让散落各种连线的桌面成为历史。如今,蓝牙已经成为最庞大的无线通讯技术之一,被应用在智能家居、智能穿戴设备、安防设备、远程遥控等各类产品中,并逐渐渗透到各个行业及领域。可以说蓝牙已经融入进我们生活的方方面面,悄无声息地改变着我们的生活习惯,让我们的日常生活变得更加便利。

不过,蓝牙技术的一路发展可谓坎坷曲折,从1.0到4.2 再到现在的5.2,这是一个不平凡的历程。

1.1 蓝牙技术发展历程

第一代蓝牙:关于短距离通讯早期的探索

1999 年:蓝牙 1.0

早期的蓝牙 1.0 A 和 1.0B 版存在多个问题,有多家厂商指出他们的产品互不兼容。同时,在两个设备“链接”(Handshaking)的过程中,蓝牙硬件的地址(BD_ADDR)会被发送出去,在协议的层面上不能做到匿名,造成泄漏数据的危险。

因此,当 1.0 版本推出以后,蓝牙并未立即受到广泛的应用。除了当时对应蓝牙功能的电子设备种类少,蓝牙装置也十分昂贵。

2001 年:蓝牙 1.1

蓝牙 1.1 版正式列入 IEEE 802.15.1 标准,该标准定义了物理层(PHY)和媒体访问控制(MAC)规范,用于设备间的无线连接,传输率为 0.7Mbps。但因为是早期设计,容易受到同频率之间产品干扰,影响通讯质量。

2003 年:蓝牙 1.2

蓝牙 1.2 版针对 1.0 版本暴露出的安全性问题,完善了匿名方式,新增屏蔽设备的硬件地址(BD_ADDR)功能,保护用户免受身份嗅探攻击和跟踪,同时向下兼容 1.1 版。

第二代蓝牙:发力传输速率的 EDR 时代

2004 年:蓝牙 2.0

蓝牙 2.0 是 1.2 版本的改良版,新增的 EDR(Enhanced Data Rate)技术通过提高多任务处理和多种蓝牙设备同时运行的能力,使得蓝牙设备的传输率可达 3Mbps。

蓝牙 2.0 支持双工模式:可以一边进行语音通讯,一边传输文档/高质素图片。

2007 年:蓝牙 2.1

蓝牙 2.1 新增了 Sniff Subrating 省电功能,将设备间相互确认的讯号发送时间间隔从旧版的 0.1 秒延长到 0.5 秒左右,从而让蓝牙芯片的工作负载大幅降低。

第三代蓝牙:High Speed,传输速率高达 24Mbps

2009 年:蓝牙 3.0

蓝牙 3.0 新增了可选技术 High Speed,High Speed 可以使蓝牙调用 802.11 WiFi 用于实现高速数据传输,传输率高达 24Mbps,是蓝牙 2.0 的 8 倍,轻松实现录像机至高清电视、PC 至 PMP、UMPC 至打印机之间的资料传输。

蓝牙 3.0 的核心是 AMP(Generic Alternate MAC/PHY),这是一种全新的交替射频技术,允许蓝牙协议栈针对任一任务动态地选择正确射频。

功耗方面,蓝牙 3.0 引入了 EPC 增强电源控制技术,再辅以 802.11,实际空闲功耗明显降低。

此外,新的规范还加入 UCD 单向广播无连接数据技术,提高了蓝牙设备的相应能力。

第四代蓝牙:主推“ Low Energy”低功耗

2010 年:蓝牙 4.0

蓝牙 4.0 是迄今为止第一个蓝牙综合协议规范,将三种规格集成在一起。其中最重要的变化就是 BLE(Bluetooth Low Energy)低功耗功能,提出了低功耗蓝牙、传统蓝牙和高速蓝牙三种模式。

2013 年:蓝牙 4.1

蓝牙 4.1 在传输速度和传输范围上变化很小,但在软件方面有着明显的改进。此次更新目的是为了让 Bluetooth Smart 技术最终成为物联网(Internet of Things)发展的核心动力。

2014 年:蓝牙 4.2

蓝牙 4.2 的传输速度更加快速,比上代提高了 2.5 倍,因为蓝牙智能(Bluetooth Smart)数据包的容量提高,其可容纳的数据量相当于此前的10倍左右。

蓝牙技术变迁历史

第五代蓝牙:开启「物联网」时代大门

2016 年:蓝牙 5.0

蓝牙 5.0 在低功耗模式下具备更快更远的传输能力,传输速率是蓝牙 4.2 的两倍(速度上限为 2Mbps),有效传输距离是蓝牙 4.2 的四倍(理论上可达 300 米),数据包容量是蓝牙 4.2 的八倍。

支持室内定位导航功能,结合 WiFi 可以实现精度小于 1 米的室内定位。针对 IoT 物联网进行底层优化,力求以更低的功耗和更高的性能为智能家居服务。

低功耗版蓝牙与经典版蓝牙参数

2019 年:蓝牙 5.1

蓝牙 5.1 新增「寻向(direction finding)功能」,配合蓝牙近接(proximity)技术,即可让设备更容易被侦测发现,同时将蓝牙定位的精准度提升到厘米级,借此应用在小型蓝牙设备中实现定位。如此一来,大家在丢失了AirPods这类小巧的蓝牙配件的时候,也就更容易找到了。当然,蓝牙5.1的寻向功能并不只是用于寻找物件,还可以用户更好的室内导览、信息提供等用途。

2020 年:蓝牙 5.2

蓝牙5.2的新特性主要体现在3个方面:增强型ATT协议;LE功耗控制;LE同步信道,其中最引人注目的是下一代蓝牙音频LE Audio的颁布。LE Audio不仅支持连接状态及广播状态下的立体声,还将通过一系列的规格调整增强蓝牙音频性能,包括缩小延迟,通过LC3编解码增强音质等。在通过LE实现短距离万物互联后,加上LE Audio,这将使得蓝牙在物联网时代获得彻底新生和腾飞。

1.2 蓝牙关键技术点

Bluetooth的主要技术特点:

(1)、工作频段:2.4GHz的ISM频段,无需申请许可证。大多数国家使用79个频点,载频为(2402+k)MHz(k=0,1, 2…78),载频间隔1MHz。采用TDD时分双工方式。

(2)、传输速率:BR/EDR 1M/2M/3M bps , BLE 1M/2M bps

(3)、调试方式:GFSK

4)、采用跳频技术:跳频速率为1600跳/秒,在建连时(包括寻呼和查询)提高为3200跳/秒。蓝牙通过快跳频和短分组技术减少同频干扰,保证传输的可靠性。

(5)、语音调制方式:连续可变斜率增量调制(CVSD,Continuous Variable Slope Delta Modulation),抗衰落性强,即使误码率达到4%,话音质量也可接受。

(6)、支持电路交换和分组交换业务:蓝牙支持实时的同步定向联接(SCO链路)和非实时的异步不定向联接(ACL链路),前者主要传送语音等实时性强的信息,后者以数据包为主。语音和数据可以单独或同时传输。蓝牙支持一个异步数据通道,或三个并发的同步话音通道,或同时传送异步数据和同步话音的通道。每个话音通道支持64kbps的同步话音;异步通道支持723.2/57.6kbps的非对称双工通信或433.9kbps的对称全双工通信。

(7)、支持点对点及点对多点通信:蓝牙设备按特定方式可组成两种网络:微微网(Piconet)和分布式网络(Scatternet),其中微微网的建立由两台设备的连接开始,最多可由八台设备组成。在一个微微网中,只有一台为主设备(Master),其它均为从设备(Slave),不同的主从设备对可以采用不同的链接方式,在一次通信中,链接方式也可以任意改变。几个相互独立的微微网以特定方式链接在一起便构成了分布式网络。所有的蓝牙设备都是对等的,所以在蓝牙中没有基站的概念。

2.蓝牙连接过程

2.1  BR/EDR 连接过程(ACL连接)

步骤2  feature 交换

步骤3  LM发送连接请求

步骤4 接受连接或者角色交换【optional】

步骤5 使能自适应频率选择功能(AFH)【optional】

步骤6 鉴权请求【optional

步骤7 配对鉴权 或 鉴权【optional】

如果在步骤6中,host收到controller的HCI_link_Key_Request请求事件后,本地没有对端设备的link key。则将向controller回复HCI_Link_Key_Request_Negative_Reply。

然后,将有LM层发起配对过程,下图是传统配对流程图。

如果在步骤6中,host收到controller的HCI_link_Key_Request请求事件后,本地存储有对端设备的link key。则将向controller回复HCI_Link_Key_Request_ Reply。然后双方进行鉴权过程。

步骤8 加密【optional】

当完成了步骤7以后,加密流程可以被启动。

步骤9 连接完成

链路层连接完成后,将会向host发送HCI_Connection_Complete事件。Host收到该事件后,可以进行接下来的服务级连接和操作。

步骤10 连接断开

当连接不再需要保持时,任何一端可以主动断开连接。通过host层下发HCI_Disconnect命令给controller来进行ACL连接的断开。

2.2  BR/EDR配对流程

BR/EDR配对的目的是为了协商他们共同的link key,用于两个设备之间的鉴权和数据加密目的。

在BR/EDR中,配对流程都是在芯片(controller)中实现的。在BLE中,配对过程是在host层实现的。

BR/EDR的配对过程分为legacy pairing 和 security simple pairing。只有双方均支持SSP的时候,才能启动SSP配对过程,否则双方启动legacy pairing。

2.2.1  Legacy pairing

2.2.2  security simple pairing

安全简单配对主要分为4个阶段:

n  IO能力交换

两个设备之间通过IO能力交换。来确定下面的阶段要具体使用的身份验证模型:

Numeric comparison, Passkey entry, Out of band.

公钥交换

n  认证阶段1 – 身份认证

认证阶段1有三种模型,可以通过使用 Numeric Comparison 、 Passkey Entry 、 OOB 这三种鉴权模型之一进行身份验证,鉴权模型的选择取决于两个设备的IO能力的组合。

Numeric Comparison当两个设备都具有输出功能时,或者其中一个设备没有输入或输出功能,则将执行数字比较步骤。如果两个设备都有输出功能,则此步骤需要向用户显示确认值这个值应该显示到步骤8结束为止;如果一个或两个设备没有输出功能,则使用相同的协议,但是协议栈Host将跳过要求用户确认的环节,这就是Just Works模型。

其流程图如下,该图省略了用户确认数字的计算过程:

此时,一般会在UI界面上弹窗,让用户进行确认。

Passkey Entry在如下两种情况下使用Passkey Entry模型执行省份验证当一个设备仅有数字输入,而另一个设备具有显示或数字输入能力当两个设备都仅具有数字输入能力。

流程图如下:

Out of Band:只有当两个设备都有一些OOB信息要使用时,OOB身份验证才会完成。 此身份验证方式不需要用户参与。由于市面上使用该方法验证省份进行配对的蓝牙设备比较少,这里就不做深入分析了。

n  认证阶段2 – DHKey Check

必选步骤,一旦设备经过身份验证,并且DHKey计算已经完成(通过步骤6交换的公钥计算得到的),就会检查生成的DHKey值。如果成功,那么这两个设备都将完成向用户显示信息的操作,因此从Controller向Host发送消息通知双方停止显示此信息。

Link Key计算

简单的配对完成,链接密钥(Link Key)就可以从DHKey中计算出来,这应该用作标准相互身份验证的输入,并通过HCI事件上报Host保存。

对应的HCI报文如下图:

启动加密

必选步骤,鉴权随着Link Key的上报就完成了,那接下来Host就可以使用标准方法对数据交互进行加密。

鉴权加密流程成功完成也即是SSP简单配对流程结束,接下来蓝牙l2cap链路就可以安全地建立连接了。

当我们两个设备之间配对过以后,再次连接则不需要再次配对,直接进行启动加密即可。

2.3  BLE连接过程

2.3.1    BLE 链路层连接过程(ACL连接)

2.3.2    BLE 配对鉴权

BLE的配对鉴权在host层的SMP协议中实现,一般在上述ACL连接完成后进行。大体流程如下:(Vol 3, Part H Security Manager Specification)

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Android中的蓝牙UUID是用来唯一标识蓝牙设备或服务的一种标识符。UUID通常是一个128位的数字,可以用来识别蓝牙设备上的服务或特征,并实现设备之间的通信。 在Android中,蓝牙设备的UUID通常是由16进制表示的,可以分成两种类型:标准UUID和自定义UUID。标准UUID是由蓝牙SIG(蓝牙特别兴趣小组)定义的,用于识别通用的蓝牙服务。自定义UUID是由开发者自己定义的,用于识别自定义的蓝牙服务或特征。 在Android中,蓝牙UUID的作用非常重要。当使用蓝牙进行设备之间的通信时,首先需要确保两个设备使用相同的UUID来识别服务或特征。只有相同的UUID,设备才能正确地识别和连接到对方,并进行数据的传输和交互。 在开发Android应用程序时,开发者可以使用UUID类来生成蓝牙UUID。UUID类提供了几种静态方法,可以生成不同类型的蓝牙UUID,如随机UUID、基于名称的UUID等。开发者可以根据自己的需求选择合适的方法来生成蓝牙UUID,并将其用于设备之间的通信。 总之,Android中的蓝牙UUID是用来唯一标识蓝牙设备或服务的一种标识符。它在设备之间的蓝牙通信中起着至关重要的作用,确保设备能够正确识别和连接到对方,并进行数据的传输和交互。 ### 回答2: Android蓝牙UUID(Universally Unique Identifier)是一个用于唯一标识蓝牙设备或服务的字符串。它的作用是确保在蓝牙通信中不会发生冲突,并且能够准确地识别和连接到目标设备或服务。 在Android中,UUID由128位的16进制数字组成。它可以被分为两种类型:标准UUID和自定义UUID。 标准UUID是由蓝牙SIG(Bluetooth Special Interest Group)预定义的一些常见服务或特性所使用的。例如,0x1101是蓝牙串口通信(SPP)的标准UUID。使用标准UUID的好处是可以确保设备之间的互操作性,并且可以在不同的Android设备上进行广泛的使用。 除了标准UUID外,开发者还可以在应用程序中定义自己的UUID。这些自定义UUID在应用程序中独一无二,并且可以被用于特定的蓝牙服务或特性。例如,如果开发者创建了一个用于传输文件的蓝牙服务,他可以定义一个唯一的UUID来标识该服务。 在Android中,获取设备或服务的UUID是非常重要的。它可以用于设备之间的配对连接,并且可以确保数据的安全性和准确性。开发者可以使用Android的蓝牙API来获取蓝牙设备的UUID,并将其用于蓝牙通信的不同阶段,例如发现设备、连接设备和交换数据。 总之,Android蓝牙UUID是一个用于标识蓝牙设备或服务的唯一字符串。它可以是标准UUID或自定义UUID,它们在蓝牙通信过程中起着关键的作用。开发者可以使用Android的蓝牙API来获取和使用UUID,以实现设备之间的蓝牙通信。 ### 回答3: 在Android中,蓝牙UUID(Universally Unique Identifier)是用来唯一标识蓝牙服务或特征的。UUID是一个128位长的数字,用十六进制表示。Android的蓝牙UUID由两部分组成:基本UUID和16位的UUID。 基本UUID是蓝牙特殊产生的32位数,用于生成蓝牙列表上的唯一标识符。每个蓝牙服务或特征都有一个基本UUID。 16位UUID是在基本UUID的基础上进行自定义的,用于标识特定的蓝牙服务或特征。16位UUID是由用户自定义的UUID与基本UUID结合而成,确保每个蓝牙服务或特征都有唯一的标识符。 通过使用UUID,Android的蓝牙设备可以在发现和连接蓝牙设备时进行标识。例如,当一个设备作为服务器提供蓝牙服务时,它会公开一个UUID。其他设备可以搜索附近的蓝牙设备并通过UUID连接到该设备。 在开发Android应用程序时,开发人员可以使用UUID来建立蓝牙连接、发送和接收数据等。在创建蓝牙连接时,设备之间必须使用相同的UUID才能成功连接,这样确保了设备之间的通信准确性。 总之,Android的蓝牙UUID是用于唯一标识蓝牙服务和特征的标识符,通过UUID可以实现设备之间的连接通信。通过合理地使用蓝牙UUID,可以更好地管理蓝牙设备的连接和数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值