蓝牙核心规范(V5.4)12.3-深入详解之LE GATT安全级别特征

 蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总


 

1.知识回顾

蓝牙协议GATT(Generic Attribute Profile)是蓝牙设备间进行数据交换的标准协议之一。GATT是一种基于服务(Service)和特性(Characteristic)模型的协议,用于描述和传输设备之间的数据。

GATT主要包含以下几个部分:

  1. 服务(Services)
  2. 特性(Characteristics)
  3. 描述符(Descriptors)

GATT的通信是基于ATT协议的,ATT协议是一种双向的、基于应答的协议,用于在GATT服务和特性之间传输数据。ATT协议提供了诸如读、写、通知等操作,以及对于数据完整性和错误恢复的处理。

在GATT中,设备间的数据传输通常遵循以下步骤:

  1. 发现服务
  2. 建立连接
  3. 读取和写入特性
  4. 关闭连接

设备使用称为属性协议(ATT)的协议访问连接的远程设备的ATTRIBUTE表中的属性,遵循各种GATT过程定义的规则,例如特征值读取和特征值写入。

GATT定义了两种角色。 GATT客户端向GATT服务器发送ATT命令(不需要响应)和请求(需要响应)。 GATT服务器接受并处理从GATT客户端接收到的命令和请求。 GATT服务器还可以向GATT客户端发送各种类型的ATT PDU,俗称通知、指示和响应。

属性表中的每个属性都包括一组属性权限。 属性权限定义了有关连接客户端可能或可能无法对该属性的访问(例如,读取其值的能力)以及在授予访问之前可能适用的任何条件的规则。例如,属性的权限可能表明客户端可以读取其值,但仅限于经过身份验证和加密的链接。 属性权限还适用于ATT服务器及其使用通知和指示与客户端进行通信的情况。

ATT PDUs通过LE-ACL连接传输,因此在任何GATT过程执行和ATT PDU交换之前,设备必须首先建立连接。通常,建立连接后,GATT客户端将通过执行称为发现过程的一系列过程来继续进行。发现涉及确定远程设备的属性表中的内容,以服务、特征和描述符及其相关属性(例如句柄值、类型和权限)为对象。请注意,属性权限不会限制客户端执行发现过程的能力。

服务、特征和描述符的分层结构如下图所示

如果尝试访问属性,并且未满足相关属性权限的条件,则属性协议定义了多个错误代码,用于返回给客户端设备以指示访问请求被拒绝的原因。例如,包括加密不足、身份验证不足和加密密钥大小不足。

在所有GATT服务器中必须有两个特殊服务。这些是通用访问服务和通用属性服务。

GATT的安全性和用户体验

GATT(通用属性配置文件)是一种用于连接低功耗设备并进行通信的协议。在设计GATT应用程序时,安全性和用户体验是两个重要的考虑因素。

  1. 安全性:
    • 身份验证:为了确保只有合法的设备可以访问GATT服务和特征,可以使用基于证书的身份验证机制。这样可以减少未经授权的设备连接到GATT网络的风险。
    • 加密:使用适当的加密算法和密钥长度可以保护传输的数据不被窃听或篡改。这可以通过使用预共享的密钥或临时密钥来实现。
    • 防止重放攻击:通过为每个GATT消息分配唯一的事务ID,可以防止攻击者重复发送相同的消息。这样可以避免信息泄露和不当操作。
  1. 用户体验:
    • 简单性:GATT协议的设计应该尽量简单明了,以便用户可以轻松理解和使用。简化的命令和响应格式可以提高用户的学习曲线。
    • 可扩展性:设计良好的GATT应用程序应该具有良好的可扩展性,以适应不同类型和数量的设备。这意味着应该支持添加新设备和服务的能力,而无需对现有代码进行重大更改。
    • 可靠性:GATT客户端和服务器之间的通信应该可靠且及时。这意味着应该处理错误情况并提供适当的错误响应,以便用户可以采取适当的措施。

综上所述,为了确保GATT应用程序的安全性和提供良好的用户体验,需要考虑身份验证、加密、防止重放攻击等因素,并保持协议设计的简单性、可扩展性和可靠性。

在访问属性时,会检查属性的权限。如果属性权限规定的安全条件未满足,则访问将被拒绝,并且会返回包含错误代码的ATT_ERROR_RSP PDU响应。如果服务器拒绝对属性的访问,通常不会关闭连接。这允许客户端通过升级安全性来处理错误,以便后续访问尝试成功。例如,如果尝试读取特征值导致返回“加密不足”的错误,客户端可以通过启动配对过程并在完成后将连接升级为使用加密来处理此错误。用户可能需要再次与设备交互以重试失败的操作。

处理因安全权限不足而导致的错误的缺点是应用程序的正常流程被中断,因此用户体验不理想。然而,蓝牙核心规范(截至版本5.3)没有提供其他替代的安全错误处理策略。

2 LE GATT安全等级特征

蓝牙核心规范(Bluetooth Core Specification)版本5.4定义了一种新的特征称为LE Gatt安全级别特征(SLC)。SLC特征允许客户端确定GATT服务器的安全条件,如果要授予对所有GATT功能的访问权限,则必须满足这些条件。重要的是,它允许在访问应用程序使用的属性之前确定这些条件。提前检查访问要求可以在不因安全级别问题而中断应用程序流程的情况下创建更好的用户体验。

2.1 技术亮点

设备可能将SLC特征包含在强制的通用访问配置文件服务中。因此,它的包含是可选的,但鉴于其使用的改进用户体验,它是可推荐的。

SLC特征允许只读访问其值而没有进一步的安全限制,例如需要加密连接。

蓝牙LE安全级别以模式和级别的形式表示。

LE安全模式1具有以下安全级别:

  1. 无安全性(无身份验证和加密)
  2. 未经身份验证的配对和加密
  3. 经过身份验证的配对和加密
  4. 使用128位强度加密密钥的经过身份验证的LE安全连接配对和加密

LE安全模式2具有两个安全级别:

  1. 未经身份验证的配对和数据签名
  2. 经过身份验证的配对和数据签名

LE安全模式3具有三个安全级别:

  1. 无安全性(无身份验证和加密)
  2. 使用未经身份验证的Broadcast_Code
  3. 使用经过身份验证的Broadcast_Code

仅LE安全连接模式(LE安全模式1级别4)

可能存在一个以上满足服务器所有属性的安全要求的安全模式和级别组合。因此,SLC特性的属性值由一个或多个安全级别要求字段的数组组成。安全级别要求字段的类型为uint8[2],第一个uint8值包含安全模式的直接表示(例如,0x01表示安全模式1),第二个表示安全级别(例如,0x04表示安全级别4)。

客户端通过读取SLC特性的值,并将当前安全模式和级别与由安全级别要求字段指示的值进行比较来使用SLC特性。如果发现当前安全模式和级别不足以允许服务器支持的所有GATT功能,客户端应用程序此时会采取措施进行补救,通常通过调用升级链路安全的程序来完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

摩尔纹是什么?如何消除摩尔纹?

相信很多小伙伴在渲染的时候会遇到各种各样的问题,比如摩尔纹,一张图片如果出现摩尔纹那基本就没法用了。那摩尔纹是什么呢?为什么会出现摩尔纹?又要如何消除摩尔纹呢?这篇文章我们就来探讨下。 一、摩尔纹是什么 官方…

记LGSVL Map Annotation(2)导入点云、以及地图

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式(PCD、PLY、LAS、LAZ)转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口,请在 Unity 编辑器中打开模拟器项目,然后导航到 Simulator/Import Point Cloud…

抓拍摄像机开关量控制4K高清手机远程看图建筑生长定时缩时相机

作为物联网数据采集解决方案专业提供商,数采物联网小编daq-iot 在这里做以下内容介绍,并诚挚的欢迎大家讨论和交流。 项目案例参考视频: https://www.bilibili.com/video/BV1Kp4y1T7wQ/?spm_id_from333.999.0.0 4K高清太阳能供电定时拍照相机,通过光…

c语言每日一练(15)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,上学期间将看学业情况更新。 五道选择题: 1、程序运行的结果…

【python绘图—colorbar操作学习】

文章目录 Colorbar的作用Colorbar的操作截取cmap拼接cmap双刻度列colorbar 引用 Colorbar的作用 Colorbar(颜色条)在绘图中的作用非常重要,它主要用于以下几个方面: 表示数据范围: Colorbar可以显示图中的颜色映射范围…

嵌入式Linux驱动开发(I2C专题)(五)

I2C系统驱动程序模型 参考资料: Linux内核文档: Documentation\i2c\instantiating-devices.rstDocumentation\i2c\writing-clients.rst Linux内核驱动程序示例: drivers/eeprom/at24.c 1. I2C驱动程序的层次 I2C Core就是I2C核心层,它的作用&#xf…

一同走进Linux的“基操”世界

一同走进Linux的“基操”世界 众所周知,Linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发能力已经得到业界的认可,可以说,Linux现在就像是一个“当红明星”,其实力赢得了大多数人的赞同,流量…

C++红黑树

📟作者主页:慢热的陕西人 🌴专栏链接:C 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解了红黑树并且使用红黑树模拟实现set和map 文章目录 红黑…

嵌入式学习笔记(25)串口通信的基本原理

三根通信线:Tx Rx GND (1)任何通信都要有信息作为传输载体,或者有线的或则无线的。 (2)串口通信时有线通信,是通过串口线来通信的。 (3)串口通信最少需要2根&#xff…

基于人体呼出气体的电子鼻系统的设计与实现

基于人体呼出气体的电子鼻系统的设计与实现 摘要 电子鼻技术是通过模式识别技术对传感器采集的人体呼出气体进行分类训练的方法。本文研究实现的电子鼻系统包括下面几个部分:首先搭建以Arduino为控制核心的气路采集装置,包括MOS传感器和双阀储气袋构建的传感器阵列和…

在网站标题中使用可以让搜索引擎更容易(识别网站的主要内容)

随着互联网的飞速发展,越来越多的企业开始重视网站的优化。优化网站排名不仅可以增加曝光率和点击率,也可以提高品牌知名度和销售额。本文将从关键字优化方案入手,为大家详细介绍如何提升网站排名。 什么是关键字? 关键字是指用…

如何在Windows 10/11中重置网络,以及重置后的注意事项有哪些

本文介绍如何在Windows 10和Windows 11中重置网络设置。 如何重置Windows 10网络设置 在Windows10中使用网络重置实用程序相当简单。 一、进入“开始”菜单>“设置”,然后选择“网络和Internet”。 二、在左侧导航窗格中,选择“状态”以确保你正在查看网络状态窗口。然…

深入解析 Nginx 代理配置:从 server 块到上游服务器的全面指南

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

使用CFimagehost源码搭建免费的PHP图片托管私人图床,无需数据库支持

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

Kubernetes(K8S)集群部署

目录 一、创建3台虚拟机 二、为每台虚拟机安装Docker 三、安装kubelet 3.1 安装要求 3.2 为每台服务器完成前置设置 3.3 为每台服务器安装kubelet、kubeadm、kubectl 四、使用kubeadm引导集群 4.1 master服务器 4.2 node1、node2服务器 4.3 初始化主节点 4.4 work节…

学习视觉SLAM需要会些什么?

前言 SLAM是现阶段很多研究生的研究方向,我也是作为一个即将步入视觉SLAM的研究生,网上对于SLAM的介绍很多,但很少有人完整系统的告诉你学习视觉SLAM该有那些基础,那么此贴将告诉你学习SLAM你要有那些方面的基础。 文章目录 前言…

【AI】机器学习——线性模型(线性回归)

线性模型既能体现出重要的基本思想,又能构造出功能更加强大的非线性模型 参考:唐宇迪机器学习课程 文章目录 3.1 线性模型3.1.1 数据3.1.2 目标/应用 3.2 线性回归3.2.1 回归模型历史3.2.2 回归分析研究内容回归分析步骤 3.2.3 回归分析分类3.2.4 回归模…

Codeforces Round 895 (Div. 3) A ~ F

Dashboard - Codeforces Round 895 (Div. 3) - Codeforces A 问多少次能使a 和 b相等&#xff0c;就是abs(a - b) / 2除c向上取整&#xff0c;也就是abs(a - b)除2c向上取整。 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #de…

学习网络编程No.6【将服务器日志和守护进程化】

引言&#xff1a; 北京时间&#xff1a;2023/9/1/21:15&#xff0c;下午刚更新完博客&#xff0c;同理再接再厉&#xff0c;这样整天不需要干什么&#xff0c;除了玩手机的日子不多了&#xff0c;马上就要开学&#xff0c;每天需要签到签退的日子就要来临&#xff0c;烦躁&…

浅谈STL|STL函数对象篇

一.函数对象概念 概念: 重载函数调用操作符的类&#xff0c;其对象常称为函数对象 函数对象使用重载的()时&#xff0c;行为类似函数调用&#xff0c;也叫仿函数 本质: 函数对象(仿函数)是一个类&#xff0c;不是一个函数 特点 函数对象在使用时&#xff0c;可以像普通函数那…