ble -蓝牙地址及RPA详解

蓝牙地址

public address

  • 一般写在 固件中,不能改变的地址
  • BR/EDR也同样使用该地址
  • 在log 中为BD_ADDR参数

random address

  • 另一种类型的地址,可以分为两种,static address和private address
  • random static address 一般是开机自动产生,有host通过set random address传递给control
  • private address 分为resolvable 和Non-resolvable两种类型
  • 重点关注resolvable private address,这类地址可以被解析。
  • 当设备同时拥有对端IRK和本地IRK的时候,就可以将resolvable private address解析成indentify address。

indentify address

  • 这类地址是一个抽象的概念,故名思意,其作用就是识别设备的地址
  • 如果一个设备仅支持public address, 那么该public address 可以作为这个设备的indentify address,在配对过程中使用
  • 如果一个设备支持random static address,同样可以作为indentify address使用
  • 如果一个设备使用的是resolvable private address, 通过IRK解析之后的地址,才是indentify address。

RPA(resolvable private address)

IRK

  • IRK是设备配对过程中,SMP 交换的信息
  • 自己的IRK和对端的IRK,用来解析私有地址
  • 所有已经配对过设备的IRK,在resolving list这个表中维护

RPA产生

  • 为了连接过程中的安全,我们可以用RPA地址与对端设备连接
  • 每次连接,RPA地址并不是固定的地址,但是拥有IRK的设备,能够解析RPA地址,指向相同的设备
  • RPA通过IRK和pRand 产生
  • 可以产生自己的RPA,也可以产生对端设备的RPA
    在这里插入图片描述

RPA解析

  • localHash = ah(IRK,pRand)
  • 接收到对端的RPA之后,可以计算出对端的peerHash值,前24bit 即为对端的hash
  • localHash 与peerHash对比,就能解析出是否是曾经配对过的设备
  • RPA解析的目的是:将random address转化为indetify address, 然后获取到正确的LTK或者GATT cache

resolving list

  • 这个列表保护一些列对端和自己的IRK配对记录
  • 列表维护在controller中,可以不经过host,完成解析RPA功能
  • 此列表中的地址是inditify address,一个设备一个地址,通过确定的地址,找到正确的IRK

RPA flow

在这里插入图片描述

注意事项

此次bluedroid 有一个google bug
在enable RPA 之前,应该停掉所有adv,包括mutil adv
不然enable RPA 会出现错误error:command disallow,导致RPA功能不能正常启动

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章