当前位置: 首页 > news >正文

蓝牙 - 如何实现安全性

蓝牙技术在加密上做了很多工作,来保证你的数据安全。

这些年来,我们的许多电子设备都转向了使用无线技术进行连接。我们的鼠标、键盘、耳机和扬声器上不再有长长的纠缠的电线,而使用了简单方便的无线技术,科技进步改善了我们的生活。

由于这些无线设备中有许多依靠蓝牙技术,蓝牙技术联盟(蓝牙技术的权威机构)在保持便利性和可靠性的同时增加了各种安全协议。

通过巧妙的方法和算法,蓝牙技术变得更加安全。本文将介绍蓝牙的安全功能是如何设计出来的,以及应该如何使用。

最新版本的蓝牙和Low Energy中的私密功能

蓝牙安全旨在为具有蓝牙功能的设备提供有关认证、完整性、保密性和隐私的标准协议,所有这些都使用加密。它自1998年以来一直在使用,已经有了几次迭代。

2010年,随着对短距离无线技术的功能需求的上升,蓝牙技术联盟开发了一个更新的蓝牙版本--蓝牙4.0。老几代蓝牙和蓝牙4.0之间最显著的区别是增加了BLE(蓝牙低功耗)。

请注意,BLE中的 "低功耗 "并不意味着它一定会使用更少的能量;它只是意味着它能很好地与低功耗设备(如无线耳机)配合,这些设备的电池容量很小。

由于大多数设备运行在蓝牙4.0及以上版本,我们将具体讨论这些较新版本的设计栈。此外,这个版本解决了前几代蓝牙的许多安全问题。

当前的蓝牙版本目前使用的BLE协议栈如下图所示:

 

我们对堆栈第四层的一个部分感兴趣,它被称为安全管理器Security Manager,负责处理有关认证、安全、保密和隐私的一切。安全管理器通过设备的配对和结合(pairing and bonding )来实现其协议。

BLE配对方法(Pairing methods)

配对是蓝牙安全管理器的一个重要组成部分。它验证你正在连接的设备是否是目标设备,然后生成一个加密密钥,供两个设备在整个会话中使用。

你的设备可以使用几种认证方法,以确保你连接到预定设备。这些方法包括:直接使用; 密钥另传; 输入密码; 数字对比。

- Just Works: 这是在两个设备间传递加密密钥的最快的方法,但安全性不够。

- OOB(Out of Band):使用其他认证方法(除了蓝牙)来发送加密密钥。一个例子包括通过NFC连接或使用你的设备的摄像头扫描对方设备显示屏上的QR码。

- Passkey:在一个设备上提示密码,需要在另一个设备上输入这个密码,才能通过认证。

- Numeric Comparison:  工作原理与Passkey相同,但设备会自动发送密码。用户只需要确认两个设备是否有相同的密码。

BLE加密密钥算法 / BLE Encryption Key Algorithms

现在,你的设备已经验证了连接设备的身份。然后他们将发送加密密钥,你的设备将在整个会话中使用这些密钥来加密和解密数据。

不同时期或版本的蓝牙规范中,安全管理器会使用不同的加密密钥算法来工作。最新版本的蓝牙(4.0及以上)使用的最常见的加密密钥算法如下:

- Symmetric-Key Ciphers / 对称密钥密文:这种类型的加密使用单一的密钥来解密哈希值或密文。

- Asymmetric-Key Ciphers / 非对称密钥密文:这种加密类型利用所谓的公钥和私钥。公钥用于加密数据,而私钥用于解密数据。

- Elliptical Curve Cryptography (ECC) / 椭圆曲线加密法:使用椭圆曲线方程来创建密钥,比对称或非对称密钥短得多,但同样安全。

- Advanced Encryption Standard (AES) / 高级加密标准:是一种基于数据块的对称加密,将128位数据作为一组数据块。

安全管理器的配对和绑定过程 / The Security Manager's Pairing and Bonding Process

安全管理器层旨在通过所谓的配对和绑定过程来处理蓝牙中的所有安全问题。在蓝牙连接中,总会有一个主设备和一个从设备(master and slave)。

主设备负责扫描那些发射广播信息的蓝牙设备。与此相反,从设备向外部发送广播信息的设备。

一个主从关系的例子是你的手机和一个无线耳机。你的手机是主设备,因为它扫描蓝牙设备,而你的无线耳机是从设备,因为它产生广播信号让你的手机能找到它。

配对过程包括安全管理器进行安全管理的三个阶段中的前两个。最开始,两个设备尝试进行建立连接的过程就属于配对过程。

- 初始配对过程中,主设备和从设备将共享每个设备能力信息以及它们所运行的蓝牙版本。能力信息需要包含的是,当前设备是否有屏幕、键盘、摄像头和NFC。

 

- 在让对方知道自己的能力后,从设备和主设备将决定使用何种安全协议和加密算法。

- 两个设备初始配对时使用的共享密钥被称为STK(Short-term key / 短期密钥)。顾名思义,STK将是主设备和从设备使用的加密密钥,直到会话结束。

- 当两台设备配对成功后,它们会使用STK对发送的每个数据包进行加密。而在数据加密后,任何试图监视你们会话的人因为没有STK而无法解密数据。

- STK的问题是,它只适用于同一次会话。每次会话,都需要再次配对,以便为生成一个新的STK。出于这个原因,开发出了一个额外的可选步骤,称为绑定(bonding)。

- 绑定步骤是蓝牙安全管理器的第三个阶段。在你的设备上会出现一个提示,询问你是否信任已配对的设备,并希望在看到设备广播时与之连接。而前两个阶段就是配对和生成STK密钥。

- 由于两个设备已经配对(通过STK有一个安全的连接),绑定过程将不需要进一步的安全检查。这个阶段要做的是生成一个LTK(Long-term key / 长期密钥)和一个IRK(Identify Resolve Key / 身份解析密钥)。然后,两个设备将使用这些密钥来解密数据,并在蓝牙开启时自动识别你的设备。

- LTK是一种类似于STK的加密密钥,设备使用它来加密和解密数据。不同的是,LTK是通过ECC而不是AES-120生成的,并且是长期使用的。

为了理解IRK,让我们简单地谈谈蓝牙MAC地址。所有具有蓝牙功能的设备都配备了一个网络接口控制器(Network Interface Controller / 网络接口控制器)。每个网络接口控制器都有一个独特的MAC地址(Media Access Control)。你不能改变这些MAC地址,因为给定的地址是硬编码在网络接口控制器的物理硬件中。

这个MAC地址也可以通过软件来修改,但如果希望绑定过的设备能够识别当前设备,那就不要随便修改MAC地址。考虑到这一点,为了能够使用可变的蓝牙地址,防止设备被别人追踪,但又能被可信任方发现,Bluetooth SIG增加了一个IRK系统,允许你的设备被绑定的设备识别,而对未知的蓝牙设备则无法识别。

蓝牙是一种复杂的技术组合,提供了广泛的设备兼容性、便利性和可靠性。应用广泛的蓝牙技术使得其安全成为一个不小的话题。

参考:

What Is Bluetooth Encryption and How Does It Work?

相关文章:

蓝牙 - 如何实现安全性

蓝牙技术在加密上做了很多工作,来保证你的数据安全。 这些年来,我们的许多电子设备都转向了使用无线技术进行连接。我们的鼠标、键盘、耳机和扬声器上不再有长长的纠缠的电线,而使用了简单方便的无线技术,科技进步改善了我们的生活…...

深入理解顺序io和随机io(全网最详细篇)

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…...

面试准备知识点与总结——(基础篇)

目录Java基础Java面向对象有哪些特征ArrayList和LinkedList有什么区别高并发的集合有哪些问题迭代器的fail-fast和fail-safeArrayList底层扩容机制HashMap面试合集解答设计模式单例设计模式哪些地方体现了单例模式Java基础 Java面向对象有哪些特征 Java面向对象有三大特征&am…...

Linux共享库,静态库与相关系统调用,工具的使用总结

tags: Linux C Syscall 写在前面 总结Unix/Linux操作系统的共享库/静态库部分, 以及一些系统调用. 参考Linux/UNIX系统编程手册41-42章. 测试程序均在Ubuntu下使用cc(gcc-9)运行成功. $ gcc -v Using built-in specs. COLLECT_GCCgcc COLLECT_LTO_WRAPPER/usr/lib/gcc/x86_64…...

「JVM 编译优化」javac 编译器源码解读

Java 的编译过程 前端编译: 编译器的前端,将 Java 文件转变成 Class 文件的过程;如 JDK 的 javac、Eclipse JDT 中的增量式编译器 ECJ;即使编译: JIT,Just In Time Compiler,在运行期将字节码转变成本地机器码的过程&…...

Leetcode DAY 34: K次取反后最大化的数组和 and 加油站 and 分发糖果

1005.K次取反后最大化的数组和 class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:nums sorted(nums, key abs, reverse True)for i in range(len(nums)):if nums[i] < 0:nums[i] -nums[i]k - 1else:continueif k 0:return sum(…...

2023美赛A题思路

在线解析 https://kdocs.cn/l/ccNGjN9sGugL​kdocs.cn/l/ccNGjN9sGugL A题思路&#xff1a;&#xff08;具体以题目解决问题顺序为主&#xff09; 这道题分析植被就行&#xff0c;主要涉及不同植被间的相互作用&#xff0c;有竞争有相互促进&#xff0c;我查了下“植物科学数…...

前端上传文件

前言 以 vue 举例&#xff0c;原生 html css js 现在应该很少有人去写了 一、绘制样式 绘制两个标签&#xff0c;一个 <div></div> &#xff0c;一个 <input type"file" />&#xff1b; 为 <div></div>添加 css 样式&#xff0c…...

后台管理系统中选项卡的动态渲染

动态渲染选项卡其中router-link是为了当点击选项卡时跳转到选项卡所在的列表选项卡需要动态渲染&#xff0c;其中active是当选中后激活选中的样式为图标添加点击删除事件在状态机配置tabMenu&#xff08;为了动态渲染&#xff09;需要在tabMenu添加&#xff1a;active、title、…...

网络层重点协议之IP协议(IPv4)

网络层的作用就是来路由的选择&#xff0c;规划传输的路径&#xff0c;其中网络层的重点协议就是IP协议。4位版本号版本号的取值只有4和64位首部长度描述了IP报头有多长&#xff0c;报头中有一个选项部分&#xff0c;是变长的&#xff0c;是可有可无的部分&#xff0c;所以IP报…...

CentOS Stream 8配置DNS

1&#xff1a;用CentOS搭建DNS的目的是想解析一台下载服务器&#xff0c;IP地址172.18.0.58&#xff0c;现在是用IP地址方的式访问&#xff0c;想搭建DNS服务器用域名的方式访问。 使用下面的命令查看一下当前系统的Bind版本。 yum info bind 版本是9.11.36.我的CentOS是最小…...

【roLabelImg】windows下旋转框标注软件安装、使用、rolabelimg打包成exe

主要参考&#xff1a; roLabelImg安装、使用、数据格式roLabelImg在Win10系统下打包成exe - 问雪的文章 - 知乎 一、安装 1.1 直接下载exe运行 劝大家直接去下别人编译好的吧&#xff0c;本来是训练模型标记的&#xff0c;结果搞了半天去了解这个软件了&#xff0c;哎~ 我…...

2023美赛F题:绿色经济

文章目录背景要求词汇表背景 国内生产总值&#xff08;GDP&#xff09;可以说是最知名且最常用的衡量一个国家经济健康的指标之一。它通常用于确定一个国家的购买力和贷款能力&#xff0c;为国家提出提高GDP的政策和项目提供了动力。GDP “衡量一个国家在一段特定时间内生产的…...

华为OD机试 - 剩余可用字符集 | 备考思路,刷题要点,答疑 【新解法】

最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…...

“笨办法”学Python 3 ——练习 40. 模块、类和对象

练习40 模块、类和对象 知识点&#xff1a; 40.1.0 模块就像字典 my_stuff[apple] #my_stuff是字典&#xff0c;访问字典apple键的值 import mystuff mystuff.apple() #mystuff是模块&#xff0c;模块访问函数apple() print(mystuff.tangerine) #模块访问变量tangerine说明P…...

自动驾驶:BEVDet

自动驾驶&#xff1a;BEVDetIntroductionMethodoloData AugmentationNetwork StructureScale-NMS实验Introduction 作者通过现有的算法&#xff08;LSS&#xff09;、独特的数据增强方案与新的NMS方案整合了一个BEV框架&#xff08;BEVDet&#xff09;。 如下图&#xff1a; …...

vue的组件通信

文章目录3. 组件通信3.1 父组件-->子组件3.3组件自定义事件&#xff08;子->父&#xff09;3.4.全部事件总线&#xff08;两代以上&#xff09;3.5消息的订阅与发布3. 组件通信 3.1 父组件–>子组件 <Student name"张三" :age"18"></St…...

Typescript的定义及使用优势

编程语言的类型&#xff1a; 动态类型语言 (Dynamically Typed Language&#xff09;静态类型语言 (Statically Typed Language&#xff09; 两种语言的含义及区别&#xff1a; 比如JS、python就是动态类型语言&#xff0c;什么是动态类型语言&#xff0c;通俗的讲&#xff0…...

正则验证:手机号码验证

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> </head> <body> 手机号码<input type"text" id"phone"> <span…...

视频融合 flv流格式对接(上)

FLV 是FLASH VIDEO的简称&#xff0c;FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快&#xff0c;使得网络观看视频文件成为可能&#xff0c;它的出现有效地解决了视频文件导入Flash后&#xff0c;使导出的SWF文件体积庞大&#xf…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...