像LAN连接设备的MAC地址一样,蓝牙设备也具有与每个设备关联的标识地址。对于每个BLE开发人员而言,了解蓝牙地址的工作方式都是至关重要的,尤其是当设备隐私受到关注时。

那么,什么是蓝牙地址?

蓝牙地址有时被称为蓝牙MAC地址,是一个48位值,该值唯一地标识一个蓝牙设备。在蓝牙规范中,它称为BD_ADDR

根据Bluetooth Core规范文档,Bluetooth地址主要有两种类型:公共地址和随机地址。

蓝牙设备必须使用这些类型的地址之一,并且在某些情况下,它包含两种类型的地址。

让我们看一下一个图,该图总结了可用的不同蓝牙地址类型:

蓝牙地址类型

上图显示了蓝牙地址类型的层次结构。总而言之,四种蓝牙地址类型是:

  • 公开地址
  • 随机私人地址
  • 随机静态可解析静态地址
  • 随机静态不可解析静态地址

如图所示,“随机地址”和“静态地址”仅是分类,不是实现中本身使用的类型。

公开地址

蓝牙公共地址是必须在IEEE中注册的全局固定地址。它遵循与MAC地址相同的准则,并且应为48位扩展的唯一标识符(EUI-48)。

要创建有效的EUI-48,需要从IEEE注册机构获得以下MAC地址块类型之一:

  • MAC地址块大(MA-L)
  • MAC地址块中(MA-M)
  • 小型MAC地址块(MA-S)

此地址永不更改,并保证对于蓝牙设备唯一。然而,与通过IEEE获得/保留块相关的费用。

下图表示公共蓝牙地址的简化格式。

公共地址格式

  • 公司ID:由IEEE公开分配的地址部分
  • 公司已分配:内部分配的ID,作为分配块的一部分。

要了解有关IEEE分配的MAC地址块的详细信息,请参考以下链接:

  • https://standards.ieee.org/products-services/regauth/index.html
  • https://standards.ieee.org/products-services/regauth/mac.html
  • https://standards.ieee.org/content/dam/ieee-standards/standards/web/documents/tutorials/eui.pdf

随机地址

随机地址比公共地址更受欢迎,因为它们不需要向IEEE注册。随机地址是已编程到设备中或在运行时生成的标识符(取决于子类型)。

随机地址的两个子类型是:

  • 随机静态地址
  • 随机私人地址

让我们更详细地研究每种类型。

随机静态地址

这种特定类型的蓝牙地址可作为公共地址的一种流行替代方法,因为使用它无需付费。

随机静态地址可以通过以下两种方式之一使用:

  • 可以在设备的使用寿命内分配和固定它
  • 可以在启动时更改

但是,无法在运行时更改它。

随机静态地址的格式如下:

随机静态地址格式

  • 1和1固定在最低有效位
  • 剩余的46位由开发人员/制造商随机选择

重要说明:所有蓝牙设备都必须使用以下两种类型之一:公共地址随机静态地址
下一种地址类型(Private Addres)是可选的,仅用于解决隐私问题(即,设备可以使用“公共地址”或“随机静态地址”之外的任何一种)。

随机私人地址

随机专用地址有两种类型:可解析的不可解析的。随机专用地址专门用于保护蓝牙设备的隐私,隐藏身份并防止对该设备进行跟踪。

让我们看一下以下每种类型:

可解析的随机私人 地址

可解决的随机专用地址的目的是防止恶意第三方跟踪蓝牙设备,同时仍然允许一个或多个受信任方识别感兴趣的蓝牙设备。

使用与可信设备共享的密钥,可解析的随机专用地址是“可解析的”。该密钥称为IRK(身份解析密钥)。

该地址最初是使用此IRK和一个随机数生成的。

那么,是什么使一个设备被另一个设备“信任”呢?

在这种情况下,可信设备是绑定设备。绑定是两个BLE器件配对后发生的可选步骤。绑定过程涉及由彼此绑定的每个设备存储密钥。绑定还允许两个设备在配对后在原始连接之后无缝地配对连接。由两个绑定的BLE设备交换的密钥之一是所涉及的每个设备的IRK。

这类地址会定期更改。根据蓝牙规范的建议是每15分钟更改一次(在所有iOS设备中都很明显)。

可解析的随机专用地址由以下字段组成:

可解析的随机专用地址格式

  • 0和1固定在最低有效位
  • 接下来的22位是随机生成的
  • 所述prand这些至少显著24位构成
  • 高24位表示使用prandIRK生成的哈希值

不可解析的随机专用地址

另一种类型的随机专用地址是不可解析的随机专用地址

这类地址也会定期更改。但是,与可解析地址不同,它不能被任何其他设备解析。这类地址的唯一目的是防止任何其他BLE设备进行跟踪。

这种类型不是很常见,但有时在信标应用中使用。

不可解析的随机专用地址的格式如下:

不可解析的随机专用地址格式

  • 0和0固定在最低有效位
  • 其余46位是随机选择的

BLE中的隐私

隐私是蓝牙设备用户的主要关切,因此必须予以认真对待。在这种情况下,隐私是指确保不受信任的各方无法通过其蓝牙地址来跟踪设备。

如果没有采取适当的措施,此地址可用于跟踪用户。幸运的是,BLE提供了隐私功能来防御此类攻击。

蓝牙设备的隐私是通过使用可解析的私有地址来实现的。这种地址类型需要将两个蓝牙设备绑定在一起,以便一个设备解析另一个设备的地址。

以下是实现BLE设备隐私的步骤:

  • 称为IRK(身份解析密钥)的密钥用于生成和解析可解析的随机私有地址。
  • 由每个设备在本地随机生成或在制造期间分配的IRK。
  • 在绑定期间,每个设备都将其对等方的IRK存储在一个解析列表中
  • 然后使用IRK解析对等设备的专用地址。例如,当它稍后接收到对等方的广告包时。
  • 通过根据以下等式验​​证专用地址中包含的哈希与本地哈希计算的输出匹配来完成此操作:

    hash = ah(IRK,prand)

  • 由于设备将IRK存储在本地,并且可以访问作为BLE数据包中包含的私有地址一部分而包含的Prand,因此它可以执行此计算。

重要的是要注意,IRK不是用来显示对等方的身份地址,它是公共地址还是随机静态地址,而是仅用于验证目的。

低功耗蓝牙中的蓝牙地址和隐私相关推荐

  1. 蓝牙协议分析_BLE地址类型

    SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机.32位ARM Cortex-M0处理器.128kB Flash存储器.以及丰富的数字接口.SYD8801片上集成了 ...

  2. android蓝牙获取mac地址,如何获得蓝牙连接设备的MAC地址在android中

    我在android中通过蓝牙发送图像,并且想要获取图像发送到的设备的MAC地址.如何获得蓝牙连接设备的MAC地址在android中 请在下面找到我的代码. private void bluetooth ...

  3. Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别

    找到一篇介紹BT与BLE使用差别的文章, 写的很清晰,看完基本明白了 ----------------------------------------------------------------- ...

  4. MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描

    项目背景 MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI 是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单.但是MAUI对于平台相关 ...

  5. Android笔记---蓝牙开发经典蓝牙和低功耗蓝牙

    目录 前言 一般开发步骤 相关API介绍 一.通用API 1.BluetoothAdapter 2.BluetoothDevice 二.经典蓝牙(BT)API 1.BluetoothSocket 2. ...

  6. CC2541-修改蓝牙名称和mac地址

    使用的蓝牙芯片是CC2541, 本文章介绍修改蓝牙名称和蓝牙MAC地址的方法. 修改蓝牙名称: 在数组scanRspData[ ]里,存放的就是蓝牙名称,你可以自己设置.GAPRole_SetPara ...

  7. android中的蓝牙通信协议,android 蓝牙SPP协议通信

    准备 1.蓝牙串行端口基于SPP协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输 2.SPP的UUID:00001101-0000-1000-8000-00805F ...

  8. Android中的蓝牙技术

    随着智能化生活的发展,手机成为人们生活的必需品,而蓝牙技术也随之应运而生.蓝牙技术作为现代移动设备与设备之间传输数据的一种主流方式,已经广泛应用于手表.耳机.车载系统等多种设备.在Android设备中 ...

  9. HS6621系列低功耗国产蓝牙芯片 支持蓝牙5.1

    HS6621CxC是一个功耗优化的蓝牙低功耗和专有的2.4 ghz应用真正的芯片上系统(SOC)解决方案.它集成了一个具有蓝牙基带和丰富外设的低功耗射频收发器I0扩展.HS6621CxC还集成了电源管 ...

  10. 低功耗(BLE)蓝牙模块开发之路

    2020/7/16更新:项目翻盘 一 项目流程概览:(已经将本项目中的敏感技术剔除,转化成通用的技术方案) 申请权限(位置权限.提示使用蓝牙需要打开位置信息.打开蓝牙的权限,) 扫描蓝牙 连接/断开蓝 ...

最新文章

  1. linkin大话面向对象--多态
  2. 面向侧面的程序设计AOP-------《二》本质
  3. 【安卓开发 】Android初级开发(二)Activity启动模式
  4. 常用容器(Collection)实现类总结(四)——HashSet
  5. “约见”面试官系列之常见面试题之第九十七篇之怎么定义vue-router的动态路由(建议收藏)
  6. Apollo进阶课程 ① | 带你纵览无人车
  7. 浅析 Go IO 的知识框架
  8. xdebug调试时出错 --mxp
  9. 使用密码字典暴力破解加密rar、zip压缩文件
  10. MySQL 数据恢复 —— 使用 data 目录
  11. Web前端课程设计-疫情解读网页
  12. 携程机票业务数据仓库实践
  13. 山东理工acm非专业-顺序结构
  14. opencv处理函数记录_转自opencv中文网站
  15. 数据库原理-几种数据模型
  16. 计算机毕业设计(2)python毕设作品之旅游景点景区售票系统
  17. 天亮说晚安,我们回家
  18. 深入解析String intern
  19. IEEE论文搜索方法
  20. pocketSphinx Android 离线语音识别

热门文章

  1. matlab gui双音拨号,电子信息毕业设计---双音多频拨号系统的MATLAB仿真实现
  2. stm32wb55 flash
  3. kibana Percentile Ranks计算的逻辑
  4. 基于Java实现的定时给微信好友发送消息
  5. 掌握五个元组的用法,让python代码飞得更快
  6. for循环后面的分号
  7. linux sbit用法,Linux Stick BIT(SBIT)文件特殊权限用法详解
  8. 【资源分享】云计算 CRM 等网上搜集资料
  9. linux 云计算 python web和http协议
  10. UVM-phase机制