当前位置: 首页 > 知识库问答 >
问题:

蓝牙低能量GATT安全级别

董飞航
2023-03-14

我正在调查与GATT相关的蓝牙低能量(BLE)中可用的安全类型。更具体地说,当使用指定了不同安全级别(低、中、高)的gatttool时,会执行什么类型的操作?我的理解是,BLE中的安全管理器支持4种不同的安全属性:

  • 没有配对
  • 与不支持中间人(MitM)保护(JustWorks)的关联模型配对
  • 与MitM保护配对(密码输入、数字比较、OOB)
  • LE安全连接配对。

这些安全属性是否与gatttools指定的安全级别相关,或者我在阅读蓝牙规范时是否错过了其他一些安全功能?

编辑:为了澄清这个问题,我想扩展我的问题。4.2蓝牙协议栈如何确定是否使用传统配对?也就是说,如果我有两个BLE 4.2设备配对的数据包捕获,我如何判断是否正在使用传统配对和使用ECDH的配对?安全连接标志是否表示不应使用传统配对,或者只是它自己的模式确保使用FIPS批准的算法

共有3个答案

涂承运
2023-03-14

是的,这是正确的,但您应该注意,它们仍然存在安全模式,LE安全模式1和LE安全模式2,它们由不同的安全级别组合而成。在蓝牙4.2之前,LE是不安全的,即您可以在LE连接刚刚开始时嗅探加密密钥。

邵鸿福
2023-03-14

4.2蓝牙协议栈如何确定是否使用传统配对?也就是说,如果我有两个BLE 4.2设备配对的数据包捕获,我如何判断是否正在使用传统配对和使用ECDH的配对?安全连接标志是否表示不应使用传统配对,或者只是它自己的模式确保使用FIPS批准的算法?

在配对功能交换阶段,如果在配对请求和配对响应PDU中设置了安全连接(SC)标志,则使用LE SC。这表明两台设备都支持LE SC并同意使用它。

如果使用LE SC,日志将显示正在交换的“配对公钥”和“配对DHKey检查”PDU。这些是特定于LE SC的。

韦智刚
2023-03-14

你是对的,但是你忘记了BLE通信中的一个主要威胁。以下是三个基本威胁:

中间人(MITM):

MITM要求攻击者能够监视和更改消息或将消息注入通信信道

窃听:

被动窃听是指(通过使用嗅探设备)在未经同意的情况下秘密监听他人的私人通信

隐私/身份跟踪:

由于大多数蓝牙LE广告和数据包都具有发送数据的设备的源地址,因此第三方设备可以将这些地址与用户的身份相关联,并通过该地址跟踪用户

报价来自开发人员。蓝牙。组织。

您已经提到了针对MitM和窃听的保护,但是仍然存在身份跟踪问题。

防止身份跟踪的保护措施是使用一个不能随时间链接到同一设备的MAC地址,即一个更改的MAC地址(通常每15分钟一次)。MAC地址有四种类型:

  1. 公共地址:此地址未加密,包含您的公司唯一ID和您的设备ID。它不安全,因为它不会随着时间而改变。
  2. 随机静态地址:该地址是随机的(由于里面的标志而被称为随机)并且未加密。一旦它发生变化,您就失去了与已经认识您的设备重新连接的能力,您必须从头开始重新启动连接。
  3. 随机可解析私有地址:该地址可以由知道其IRK的设备解析,这是设备之间的共享秘密。至于静态随机地址,它经常更改,但始终是可解析的。这是最常见的选项,因为它保留了隐私并允许恢复连接。
  4. 随机不可解析私有地址:此地址无法解析。Core Spec没有说太多,而且似乎不是很常见。与静态地址的区别在于它没有存储,因为它是私有地址(即设备不希望能够恢复与私有地址设备的连接)。

BLE核心规范4.2第3卷第C部分15.1.1蓝牙设备地址类型对此进行了解释。

关于安全级别,我不知道gatttool,但我假设它与nRF连接/主控制面板或浅蓝色类似。您在这里看到的可能是与每个属性关联的安全级别。有四个安全级别,每个属性的安全级别可能不同:

模式1第1级:

无需加密。该属性可在纯文本、非加密连接上访问。

模式1级别2:

需要未经身份验证的加密。连接必须加密才能访问此属性,但加密密钥不需要经过身份验证(尽管它们可以)。

模式1第3级:

需要经过身份验证的加密。必须使用经过身份验证的密钥对连接进行加密才能访问此属性。

模式1第4级:

通过身份验证的LE安全连接与加密配对。必须使用安全连接配对对连接进行加密,该配对自4.2版起在蓝牙LE中引入。

模式1级别1-3的定义来自Robert Davidson、Akiba、Carles Cufi、Kevin Townsend的《蓝牙低能耗入门》。

该设备也可以处于称为“仅安全连接”的模式,在该模式下,除模式1级别1中的服务外,其所有服务都只能在模式1级别4中访问。

 类似资料:
  • 我正在尝试构建一个使用蓝牙的android应用程序。在教程中,他们使用128位UUID,但我只有16位UUID。我必须使用服务UUID和蓝牙基础创建一个新的128位UUID。 例子: 警报通知服务UUID(16bit)= 通过组合这两个UUID,我们收到。。。 警报通知服务UUID(128bit)= 有没有合适的方法?

  • 我是为iOS设备开发的新手。我是苹果的长期用户,今年Spring将完成我的电气工程学士学位。我目前正在为一个设计课程做一个项目,对蓝牙低能耗以及如何在iOS(5和6)中实现它有一些疑问。 首先介绍一下这个项目的背景。我们正在为一座建筑物设计一个占用检测系统。该计划是在整个建筑中,将BLE模块连接到沃尔沃茨。这些设备将与用户的智能手机通信,并向后端系统提供位置信息。我们希望这个系统只需要很少的用户交

  • 我扩展插件/gatt_example. c在Bluez源尝试BLE通知功能没有成功。我正在使用Bluez源中包含的电池服务示例。它具有1个具有READ和NOTIFY属性的特性。我添加dbus方法来调用attrib_db_update()来从蓝牙守护进程外部更新特征值。 现在,我可以连接哪个客户端(带有Android 4.3的Nexus4和iPhone(不含LightBlue的应用程序))并启动通知

  • 我想知道是否有可能修改BLE信标的内容以包含额外信息。如果在末尾插入一个额外的位,则可能在一个方向上广播布尔值。从理论上讲,如果你修改了你的设备来读取额外的信息,这就行了。考虑到现有的协议,这听起来需要做很多工作。外面已经有这样的东西了吗? 对于信息,我正在mbed平台上工作,在那里你可以修改你自己的蓝牙信标有效载荷。

  • 运行后,Android部分返回connection be success(BluetoothGattCallback::onConnectionStateChange的参数为STATE_CONNECTED),但是linux中的程序(btgatt-server)没有得到任何响应,仍然阻止等待接受。(第485行)。 我还使用了另一个示例代码:l2cap-ble.c,结果完全相同。 有人能帮我吗?我的目

  • 我正在寻找一个唯一的id,可从iOS访问蓝牙低能耗设备。我有10台设备,我把它放在了10个不同的地方。我需要确切地知道我正在与哪个设备通信,而不管我正在使用哪个iOS设备连接。 在iOS核心蓝牙中,iOS为我的设备分配了一个新的UUID。我无法唯一识别设备。