在BR/EDR设备中,其地址是一个48bits的数字,称作“48-bit universal LAN MACaddresses” (和电脑的MAC地址一样)。正常情况下,该地址需要向IEEE申请(其实是购买)。企业交钱,IEEE保证地址的唯一性,皆大欢喜。 当然,这种地址分配方式,在BLE中也保留下来了,就是PublicDevice Address。
1. PublicDevice Address Public Device Address由24-bit的company_id和24-bit的company_assigned组成,具体可参考蓝牙Spec中相关的说明。 但是,在BLE时代,只有Public Device Address还不够,有如下原因: 1)Public Device Address需要向IEEE购买。虽然不贵,但在BLE时代,相比BLE IC的成本,还是不小的一笔开销。 2)Public Device Address的申请与管理是相当繁琐、复杂的一件事情,再加上BLE设备的数量众多(和传统蓝牙设备不是一个数量级的),导致维护成本增大。 3)安全因素。BLE很大一部分的应用场景是广播通信,这意味着只要知道设备的地址,就可以获取所有的信息,这是不安全的。因此固定的设备地址,加大了信息泄漏的风险。 为了解决上述问题,BLE协议新增了一种地址:Random Device Address,即设备地址不是固定分配的,而是在设备设备启动后随机生成的。根据不同的目的,Random Device Address分为Static Device Address和Private Device Address两类。
2. StaticDevice Address Static Device Address是设备在上电时随机生成的地址 特征: 1)最高两个bit为“11”。 2)剩余的46bits是一个随机数,不能全部为0,也不能全部为1。 3)在一个上电周期内保持不变。 4)下一次上电的时候可以改变。但不是强制的,因此也可以保持不变。如果改变,上次保存的连接等信息,将不再有效。
3. Non-resolvableprivate address Non-resolvable private address和Static DeviceAddress类似,不同之处在于,Non-resolvable private address会定时更新。更新的周期称是由GAP规定的,称作T_GAP(private_addr_int),建议值是15分钟 特征: 1)最高两个bit为“00”。 2)剩余的46bits是一个随机数,不能全部为0,也不能全部为1。 3)以T_GAP(private_addr_int)为周期,定时更新。 注1:Non-resolvable private address有点奇怪,其应用场景并不是很清晰。地址变来变去的,确实是迷惑了敌人,但自己人不也一样被迷惑了吗?因此,实际产品中,该地址类型并不常用。
4. Resolvableprivate address Resolvable private address比较有用,它通过一个随机数和一个称作identityresolving key (IRK) 的密码生成,因此只能被拥有相同IRK的设备扫描到,可以防止被未知设备扫描和追踪。 特征: 1)由两部分组成: 高位24bits是随机数部分,其中最高两个bit为“10”,用于标识地址类型; 低位24bits是随机数和IRK经过hash运算得到的hash值,运算的公式为hash = ah(IRK,prand)。 2)当对端BLE设备扫描到该类型的蓝牙地址后,会使用保存在本机的IRK,和该地址中的prand,进行同样的hash运算,并将运算结果和地址中的hash字段比较,相同的时候,才进行后续的操作。这个过程称作resolve(解析),这也是Non-resolvableprivate address/Resolvable private address命名的由来。 3)以T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。 4)Resolvable private address不能单独使用,因此需要使用该类型的地址的话,设备要同时具备Public DeviceAddress或者Static Device Address中的一种。
参考网址:http://www.wowotech.net/bluetooth/ble_address_type.html(蓝牙协议分析(6)_BLE地址类型)
|