BLE Privacy(三)

BLE Privacy(三)

        提到Privacy策略,就离不开对蓝牙地址的深入理解。

Address

概述

        蓝牙地址是蓝牙设备在无线通信中用于唯一标识自身的地址,通常是一个48位的唯一标识符,采用EUI-48(Extended Unique Identifier 48-bit)格式。一般显示为以十六进制书写的六个字节,中间用冒号分隔(例 -- AA:BB:33:44:FF:EE)

        为区分不同蓝牙设备,一般使用蓝牙地址类型和蓝牙地址来标识设备。地址类型分为public device addressrandom device address.其中,经典蓝牙只有public地址。而random地址,又分为static addressprivate address,private address又分为resolvable private addressnon-resolvable private address。而标识设备身份的identity address就是其中的public address或static address.

        看到这里,对蓝牙地址分这么多层可能会比较懵。但简单来说,如果不涉及到Privacy,那么对BLE来说,就只需要考虑是使用Public Address 还是 Random Address。如果使用Privacy,那么就只需要考虑是Identity Address 还是 Private Address

Public Address

        在经典蓝牙中,baseband的逻辑复杂又难以理解,但是只有一个地址,也就是Public Address,这样基于地址的相关逻辑处理就相对更好理解了,不容易混淆。而Public Address是需要花钱找SIG购买的,制造商只能使用从IEEE注册机构购买的注册表段中的值,关于如何获得MAC地址块的相关信息,以及如何使用MAC地址,可以查看IEEE的指南:

        IEEE SA - REGISTRATION AUTHORITY

        IEEE分配的MAC地址块类型有三种:MA-L、MA-M、MA-S,这里不展开,常用的是MA-L

        下图是蓝牙BD_ADDR,public地址的组成,说明了LAP、UAP和NAP如何映射到EUI-48的,示例地址:AC:DE:48:00:00:80

        注意,Spec中定义了一块Reserved address,为了经典蓝牙的inquiry,在LAP中保留了一块连续的64个值,这一块的LAP值用户蓝牙地址不能使用。保留的LAP地址是0x9E8B00 - 0x9E8B3F,分为1个GIAC和63个DIACs,详细可阅读Assigned Numbers文档,其中有两个特殊LAP值:

Limited Inquiry Access Code(LIAC):0x9E8B00

General Inquiry Access Code(GIAC):0x9E8B33

        此外,在Spec HCI协议中并没有可以设置Public Address的接口,一般而言,每颗Controller芯片的public address出厂时都是固定且唯一的。虽然没有标准的指令可以修改Controller的Public Address,但一般蓝牙芯片原厂都会提供一个Vendor Command用于设置Public Address。

Random Address

        区别于Public地址,在BLE中,Host可以通过LE Set Random Address指令配置Random Address。其中Random Address分为Static Address 和Private Address

如图,地址的最高两位[47:46]

        00,表示Non-resolvable private address

        01,表示Resolvable private address

        10,未使用,预留

        11,表示Static Address

Static Address

        如图,Static address由46bits Random值2bits-subtype(11)组成。Random Part不能全为0,也不能全为1        一般情况下,每次上电都会生成一个新的Static Address(即下电不保存),且在工作期间该地址一般不会改变。有些设备为了兼容回连的场景,在第一次上电时会指定一个Static Address,之后只要记录没有删除,可能就不重新指定了。

        注意:如果设备的Static Address改变了,那么存储在peer devices的地址会失效,且使用前一个Static Address做回连功能也会失效

Private Address

        Private Address与public/static address(identity address)不同,是在设备工作运行状态下,动态变化的,因此具备更高的随机性和隐私性。Private Address分为Resolvable和Non-Resolvable两种类型

Non-resolvable

        如图Figure 1.3,由最高2bits-subtype(00)46bits Random值组成,Random Part不能全为0,也不能全为1。该地址类型不提供被其他设备解析身份的能力,适用于一些特殊场景,例如广播中使用的地址

Resolvable       

        如图Figure 1.4,48bits分为24bits的prand24bits的hash组成,其中prand最高2bits-subtype值为10。prand剩余的22bits不能全为0,也不能全为1。该地址类型允许其他设备在一定条件下解析出设备的真实身份。设备要生成一个Resolvable Private Address,必须要有一个IRK(local or peer)。24bits的hash是由设备先前配对过程中交互的IRKprand分别作为function ah的输入参数 k r 计算得出的。

        randomAddress = prand || hash

        此外,RPA地址可以周期变化一般默认为15分钟,Host可以通过LE Set Resolvable Private Address Timeout command来配置该周期。

        Resolution,解析RPA地址需要将收到的prand部分和本地存储的peer IRK做同样的function ah运算,并把结果和RPA地址中的hash部分做比对,如果结果一致,则解析成功。

Identity Resolving Key

        可以把identity address理解成真实身份,而private address就是“伪装身份”。前文已经讲解了在启用Privacy的情况下,如何使用RPA以及如果如何通过RPA解析获取到Identity address,现在补充说明一下,IRK是在哪里交互获取的。

        请详细阅读Spec 《Vol 3,Part H Security Manager Specification》

       交互Identity Address和IRK信息,需要双方设备通过SMP流程 ,在如图 Figure C.24,TRANSPORT SPECIFIC KEY DISTRIBUTION流程可以看到,Identity Information(Identity Rsolving Key)和Identity Address Information(AddrType,BD_ADDR),两个用于privacy的关键信息交互。注意,为了安全,这两个information都应在encrypted or re-encrypted后交互。

总结

        Privacy策略总体围绕BLE的Random Address做文章,具体原理及实现方式也较为详尽的陈述给了大家。Privacy本质还是为了安全考虑,希望大家从原理出发,深入理解到每一处细节里去!

        如果对文中还有疑惑的地方或有笔者错漏之处,欢迎指正!可以留言评论或私信,谢谢。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值