蓝牙的地址问题

From

蓝牙的地址问题

1 地址分类

就像Ethernet MAC (Media Access Control)地址一样,每个蓝牙设备有一个基本标识符,即蓝牙设备地址,其是一个48位(6-byte)的唯一标识,蓝牙建立连接时使用的就是这个地址。

蓝牙有两类地址:

  • Public deviceaddress 

  • Random device address


Public deviceaddress:相当于固定的BR / EDR,工厂编程的设备地址。它必须向IEEE注册机构注册,并且在设备的生命周期内不会变化。

蓝牙random地址又进一步分类如下:

蓝牙的地址问题

对于一个蓝牙设备,可以使用public,static, resolvable 或者non-resolvable类型的蓝牙地址,地址类型通过广播包中的一个bit来区分,这个bit就是TxAddr和RxAddr。

  • Public address: 全球唯一性地址,前3个字节体现了OUI(Organizationallyunique identifier),表明制造商,定义如下

蓝牙的地址问题

  • Static random address: 当OUI无法获取时,可以使用静态随机地址来替换Public address,定义如下:

    蓝牙的地址问题

  • Private addresses: 可以周期性的变化,因此可以避免设备被跟踪。这类地址又分为可以解析的地址和不可解析的私有地址。

  • Resolvable private address: 双方设备可以通过一个共享的key来解析的地址,BLE双方在经过配对以后,会产生一个用于解析私有地址的key,在后续的连接中,即使BLE设备地址发生了变化,也能被信任的设备识别,但对其他设备来说,则是随机变化和不可跟踪的,定义如下:

蓝牙的地址问题

  • Non-resolvable privateaddress: 不可解析的地址,一般不希望使用这类型的地址,定义形式如下:

 蓝牙的地址问题

2 私有地址生成与解析

Resolvable private address的生成方法和解析方法

在蓝牙的pairing/bonding流程中,双方会产生交换两个参数(IPK,prand),其中IPK是地址解析用的密钥,prand是一个随机数,私有地址的解析会用到这两个参数以及一个哈希函数ah。

生成方法:

 蓝牙的地址问题

蓝牙的地址问题

可以看到这类地址有两部分组成,24位的pand以及24位的hash值。因此,对方设备只要根据这个地址信息,使用相同的key就能解析出该地址:

 蓝牙的地址问题

上面公式中的prand是从对方地址中获取的,只要localhash与对方的hash值相同,就可以认为,这个设备是之前配对过可信的设备,从而实现双方设备的通信。

蓝牙的地址问题

相关推荐