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功能不能正常啓動

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