轉載_藍牙協議分析(6)_BLE地址類型

原文鏈接:http://www.wowotech.net/bluetooth/ble_address_type.html

1. 前言

也許關注BLE的同學都注意到了,BLE設備有多種類型的設備地址,如Public Device Address、Random Device Address、Static Device Address、Private Device Address等等。如果不瞭解內情,大家肯定會被它們繞暈。不過存在即合理,這樣看似奇怪的設計,實際上反映了BLE的設計思路以及所針對的應用場景。讓我們通過本文一窺究竟。

2. BLE設備的地址類型

一個BLE設備,可以使用兩種類型的地址(一個BLE設備可同時具備兩種地址):Public Device Address和Random Device Address。而Random Device Address又分爲Static Device Address和Private Device Address兩類。其中Private Device Address又可以分爲Non-resolvable Private Address和Resolvable Private Address。它們的關係如下所示:

 


 
  1. Public Device
  2. +---> Address
  3. +-------------+ |
  4. | | |
  5. | BLE | |
  6. | Device +---+ or/and Static Device
  7. | | | +--> Address
  8. +-------------+ | |
  9. | Random Device |
  10. +----> Address +-+ or Non-resolvable
  11. | +-> private address
  12. | |
  13. | Private Device | or
  14. +--> Address +--+
  15. | Resolvable
  16. +-> private address

3. Public Device Address

在通信系統中,設備地址是用來唯一識別一個物理設備的,如TCP/IP網絡中的MAC地址、傳統藍牙中的藍牙地址等。對設備地址而言,一個重要的特性,就是唯一性(或者說一定範圍內的唯一),否則很有可能造成很多問題。藍牙通信系統也不例外。

對經典藍牙(BR/EDR)來說,其設備地址是一個48bits的數字,稱作"48-bit universal LAN MAC addresses(和電腦的MAC地址一樣)“。正常情況下,該地址需要向IEEE申請(其實是購買[1],呵呵!)。企業交錢,IEEE保證地址的唯一性,皆大歡喜。

當然,這種地址分配方式,在BLE中也保留下來了,就是Public Device Address。Public Device Address由24-bit的company_id和24-bit的company_assigned組成,具體可參考藍牙Spec中相關的說明[2]。

4. Random Device Address

但是,在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兩類。

4.1 Static Device Address

Static Device Address是設備在上電時隨機生成的地址,格式如下:


 
  1. LSB MSB
  2. +------------------------------------+---+---+
  3. | Random part of static address | 1 | 1 |
  4. +------------------------------------+---+---+
  5. static address
  6. <--------------+ (48 bits) +--------------->

 

Static Device Address的特徵可總結爲:

1)最高兩個bit爲“11”。

2)剩餘的46bits是一個隨機數,不能全部爲0,也不能全部爲1。

3)在一個上電週期內保持不變。

4)下一次上電的時候可以改變。但不是強制的,因此也可以保持不變。如果改變,上次保存的連接等信息,將不再有效。

Static Device Address的使用場景可總結爲:

1)46bits的隨機數,可以很好地解決“設備地址唯一性”的問題,因爲兩個地址相同的概率很小。

2)地址隨機生成,可以解決Public Device Address申請所帶來的費用和維護問題。

4.2 Private Device Address

Static Device Address通過地址隨機生成的方式,解決了部分問題,Private Device Address則更進一步,通過定時更新和地址加密兩種方法,提高藍牙地址的可靠性和安全性。根據地址是否加密,Private Device Address又分爲兩類,Non-resolvable private address和Resolvable private address。下面我們分別描述。

4.2.1 Non-resolvable private address

Non-resolvable private address和Static Device Address類似,不同之處在於,Non-resolvable private address會定時更新。更新的週期稱是由GAP規定的,稱作T_GAP(private_addr_int) ,建議值是15分鐘。其格式如下:


 
  1. LSB MSB
  2. +----------------------------------------+---+
  3. |Random part of nonresolvable address| 0 | 0 |
  4. +----------------------------------------+---+
  5. nonresolvable address
  6. <--------------+ (48 bits) +--------------->

 

特徵可總結爲:

1)最高兩個bit爲“00”。

2)剩餘的46bits是一個隨機數,不能全部爲0,也不能全部爲1。

3)以T_GAP(private_addr_int)爲週期,定時更新。

注1:Non-resolvable private address有點奇怪,其應用場景並不是很清晰。地址變來變去的,確實是迷惑了敵人,但自己人不也一樣被迷惑了嗎?因此,實際產品中,該地址類型並不常用。

4.2.2 Resolvable private address

Resolvable private address比較有用,它通過一個隨機數和一個稱作identity resolving key (IRK) 的密碼生成,因此只能被擁有相同IRK的設備掃描到,可以防止被未知設備掃描和追蹤。其格式如下:


 
  1. LSB MSB
  2. +--------------------------+----------------------+---+---+
  3. | | Random part of prand | 1 | 0 |
  4. +--------------------------+----------------------+---+---+
  5.  
  6. <--------+ hash +---------> <-----------+ prand +------->
  7. (24 bits) (24 bits)

 

特徵如下:

1)由兩部分組成: 
     高位24bits是隨機數部分,其中最高兩個bit爲“10”,用於標識地址類型; 
     低位24bits是隨機數和IRK經過hash運算得到的hash值,運算的公式爲hash = ah(IRK, prand)。

2)當對端BLE設備掃描到該類型的藍牙地址後,會使用保存在本機的IRK,和該地址中的prand,進行同樣的hash運算,並將運算結果和地址中的hash字段比較,相同的時候,才進行後續的操作。這個過程稱作resolve(解析),這也是Non-resolvable private address/Resolvable private address命名的由來。

3)以T_GAP(private_addr_int)爲週期,定時更新。哪怕在廣播、掃描、已連接等過程中,也可能改變。

4)Resolvable private address不能單獨使用,因此需要使用該類型的地址的話,設備要同時具備Public Device Address或者Static Device Address中的一種。

5. Resolvable private address應用場景及HCI命令介紹

BLE Resolvable private address的解析和過濾操作是在Link Layer實現的,因而爲BLE的廣播通信提供了一個相對安全的加密環境。Link Layer以Resolving List的形式,通過HCI向Host提供相關的控制API,以實現相應的功能,相關的HCI命令介紹如下:

LE Set Random Address Command,設置一個新的Random地址,包括Resolvable private address類型的地址。

 

LE Add Device to Resolving List Command,將指定的設備添加到本機的Resolving List中,需要指定的參數包括:需要添加設備的地址(包括地址類型)、需要添加設備的IRK、本設備的IRK。

LE Remove Device From Resolving List Command,將指定設備從本機的Resolving List中刪除。

LE Clear Resolving List Command,清除本機的Resolving List。

LE Read Resolving List Size Command,讀取本機Resolving List的大小。

LE Read Peer Resolvable Address Command,讀取對端設備解析後的Resolvable private address。

LE Read Local Resolvable Address Command,讀取本機設備解析後的Resolvable private address。

LE Set Address Resolution Enable Command,禁止/使能地址解析功能。

總結和說明:

1)Resolvable private address的生成,是Host以T_GAP(private_addr_int)爲週期,主動進行的,並通過“LE Set Random Address Command”告知Controller的Link Layer。因此,如果本地設備需要安全的環境,可以使用Resolvable private address作爲廣播和連接地址。

2)如果本地設備需要和某一個使用Resolvable private address的設備通信(掃描、連接等),則需要將該設備添加到Resolving List中,並使能地址解析功能。只有地址解析正確的時候,Link Layer纔會繼續後續的通信動作。

3)如果地址解析不正確,本地設備向對方發送的所有的數據包(掃描請求、連接請求等),都不能被正確接收(因爲目的地址不正確)。但有一個例外,如果本地設備直接關閉地址解析功能,還是能收到對方的廣播包,因此,Resolvable private address並不能保護廣播包的數據。如果有敏感信息,放到scan response packet中應該是一個不錯的選擇。

4)上面分析是否正確?我也不是十分有把握,後續可以做個實驗看看。

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