01藍牙設備地址的類型
所有藍牙設備都應具有一個藍牙設備地址 (BD_ADDR),該地址(及其地址類型)可以唯一地(一定范圍內唯一)標識該設備。使用者如果不了解其概念,看上去可能會有很多疑惑,甚至容易造成侵權問題。
藍牙的設備地址分為兩大類,一類是 Public,一類是 Random 的。其中 Random 類地址里面又分為靜態地址和私有地址。私有地址又分為不可解析的私有地址和可以解析的私有地址。這些地址類型列舉如下:
? Public Bluetooth address // 1
? Random Bluetooth address
o Static address // 2
o Private address
Non-resolvable private address // 3
Resolvable private address // 4
上述 4 種地址類型都使用 48bit 的地址長度。地址類型不同,48bit 地址的格式也會不同;設備地址類型和設備地址共同用于唯一標識該設備。另外需要注意以下幾點:
? Public 或者 Random 地址類型的標識在鏈路層的廣播包 PDU Header 中,不在48bit 地址的內容中。
? Random 類型下的三種地址類型,使用 48bit 地址的高 2bit 進行標識。
? 48bit 地址都相同的兩個設備,如果它們分別屬于 Public 或者 Random 地址類型,則它們是兩個不同身份的藍牙設備。
設備應至少使用一種類型的設備地址,也可以同時使用兩種。該設備可以通過它使用的任何設備地址來尋址。設備的身份地址是它在傳輸的數據包中使用的 Public 設備地址或Random 靜態設備地址。如果一個設備使用可解析的私有地址,它也應該有一個身份地址。每當比較兩個設備地址時,比較應包括設備地址類型(即如果兩個地址的類型不同,即使兩個 48 位地址相同,它們也不同)。
如果公司有購買 Public 地址,則建議用 Public。如果沒有購買地址,又沒有設備地址隱私需求,則建議使用 Random Static Device Address。
1.1. Public Bluetooth Address
在傳統藍牙和 BLE 中,原則上來說,使用 Public 地址需要向 IEEE 申請購買,使用未授權的 Public 地址如果和已授權的 Public 地址發生地址沖突,可能會面臨法律糾紛。使用Public 地址還需要涉及到地址的管理、購買等流程。本文的后面舉例描述了購買 Public 地址的流程。
1.2. Random Static Device Address
藍牙更新到了 BLE 版本之后,為了讓設備廠商可以節省購買 Public 地址授權的費用,引入了 Random 類型的地址。從前文可知,Random 地址類型又分為靜態(Static)類型和隱私(Private)類型。靜態類型的地址格式如下:
靜態地址是隨機生成的48位地址,應滿足以下要求 :
? 地址的隨機部分至少有一位應為 0
? 地址的隨機部分至少有一位應為 1
設備可以選擇在每次電源循環后將其靜態地址初始化為新值。設備在初始化后不得更改其靜態地址值,直到設備重新上電。
注意:如果設備的靜態地址發生更改,則存儲在對端設備中的地址將無效,并且將失去使用舊地址重新連接的能力。
1.3. Random Non-Resolvable Private Address
隱私地址主要是為了解決隱私問題。根據其是否可解析,又分成不可解析地址類型和可解析地址類型,不可解析地址類型的地址格式如下:
? 地址的隨機部分至少有一位應為 1
? 地址的隨機部分至少有一位應為 0
? 地址不得等于 Public 地址
不可解析地址會周期更新(建議值是 15 分鐘),這類地址在實際應用中比較少用。
1.4. Random Resolvable Private Address
所謂可解析地址(RPA),是指可以把一個周期變化的地址解析為唯一的身份地址。使用隨機可解析地址類型的設備應具備兩個地址,一個地址用于標識該設備,稱為身份地址(Identity Address),另一個則為隨機可解析地址(RPA)。一般情況下,設備會廣播RPA,身份地址保存在本地。對端設備可通過解析 PRA 進一步獲得其身份地址。
要生成可解析的私有地址,設備必須具有本地身份解析密鑰 (IRK) 或對端身份解析密鑰 (IRK)。可解析的私有地址應使用 IRK 和隨機生成的 24 位數字生成。隨機數稱為prand,應滿足以下要求:
? prand 的隨機部分至少有一位為 0
? prand 的隨機部分至少有一位為 1
特征如下:
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 中的一種作為其身份地址。
02MAC 地址相關函數
下面介紹兩個比較重要的和 MAC 設置相關的函數。
// 配置 MAC 地址的函數
其中不同的 offset 設置的數值不一樣,和 MAC 地址相關的主要是這兩個:
? 0x00: CONFIG_DATA_PUBADDR_OFFSET
?0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS
//配置使用哪種 MAC 地址的函數:
Identity_Address_Type :
? 0x00: Public Address
? 0x01: Static Random Address
03藍牙 Random 靜態設備地址的生成與設置參考方法
為了方便一些客戶生成免費的相對唯一的 MAC 地址,下面列舉一個使用芯片出廠唯一的 UID 來生成 MAC 地址的參考方法。基本原理是通過讀取芯片的 UID,然后再進行 Hash計算,截取需要的 46bit 作為隨機部分的靜態地址。理論上這種方法生成的 MAC 地址重復的幾率很小,在 2 的 40 多次方分之一的幾率重復,因此實際工程應用中可以認為它相對比較唯一。
Hash 計算這部分參考了開源的算法庫,鏈接地址如下:
https://github.com/B-Con/crypto-algorithms/blob/master/sha256.c
sha256.c這個庫文件在當前開發平臺上需要修改前面一個頭文件包含:
將 “#include” 更改為 “#include”
以下部分偽代碼適用于 BlueNRG 系列和 STM32WB 系列
// 生成靜態 MAC 地址參考函數
04藍牙 Public 設備地址的購買流程
全球唯一設備號,標準化組織是 IEEE,以前的網卡 Ma 地址、PC,現在藍牙設備、BLE 設備若需要認證的,官方的唯一設備標識,即藍牙地址,也是 Mac 地址,需向 IEEE申請,并登記付費。即可獲得授權。
4.1. OUI 介紹
Organizationally Unique Identifier(OUI) 被稱作“組織唯一標識符”,在任何一塊網卡中燒錄的 6 字節 MAC 地址中,前三個字節就體現了 OUI,通常情況下,該標識符是唯一的。因此,OUI 可以用來創建 MAC 地址、藍牙設備地址或以太網地址。另外,OUI 也可作為一個公司的 SNAP 協議標識符使用。
通常情況下,IEEE 標準協會將前 24 位組織唯一標識符(OUI)分配給生產企業,剩下的 24 位由廠家自行分配代碼。
目前,OUI 只能通過 IEEE 標準協會直接購買,其總價格大概在 3500 美元左右。
如果如果沒有保密需求,支付$3500 就可獲得一個 OUI(可生成 1600 萬個地址),即上述所指的 publicly registered MA-L,也就是說此類公司的名稱和地址是公開的,公眾可以訪問
https://regauth.standards.ieee.org/standards-ra-web/pub/view.html#registries
輸入公司名稱查詢該公司擁有的 MA-L,或者輸入 MA-L查詢公司的名稱和地址。
如果生產廠商希望對以上信息保密,可以選擇 Privately registered MA-L,價格會貴很多,且每年需要支付保密費用大概幾千美元。
4.2. 購買流程
如果需要購買 Public 地址,需要先申請一個 IEEE 賬號。登入后點擊如下入口開始申請。
圖1.申請購買 public 地址入口
圖2. 選擇購買的 MAC 地址數量和類型
如果申請的類型是 MA-L 大概有 1677 萬個地址,MA-M 大概有 100 多萬個。
圖3.申請過程中的 4 個步驟
主要填寫:申請人信息,包括姓名、職位、公司名稱、地址及郵箱電話等;
公司信息,如果貴公司為首次申請,initial corporate assignment request 后選擇YES,如果不是首次申請 OUI,一定要確保現有的 MAC 地址使用率已達到 95%,否則不予申請,選擇 No 之后需要在方框內填寫上次申請 OUI 的公司名稱并提供再次申請的理由,同時還需提供公司類型,是母公司還是子公司,還是兩者皆否
如果公司類型選擇了母公司或者是子公司,需要填寫至少 3 家聯營公司的具體信息,如果公司類型選擇了 neither,該部分可不填;為保密信息,如果選擇購買的是 publicly registered MA-L,該部分選擇 No,反之選擇 Yes 并提供理由;目前 IEEE 標準協會接受的付款方式包括郵寄美國銀行匯票、美元電匯及信用卡在線支付。如果需要提供形式發票,請選擇 please send a proforma invoice 之前的復選框。
完成以上內容后在線提交即可。
4.3. 購買后檢查確認
如果需要購買 public 地址,需要先申請一個 IEEE 賬號。登入后點擊如下入口開始申請。通常 IEEE 收到款后的第二天,即可郵件收到一個 Mac 地址的生成軟件,填上日期等信息后,會生成一個 6BYTE(48bits)的地址段,前 3BYTE 數據為公司名,后面 3BYTE是序號。
圖4.在更新的列表中檢查申請的地址
05小結
本文介紹了 BLE MAC 地址的類型,基于芯片 ID 生成靜態隨機 MAC 地址,以及購買Public MAC 地址的流程。
審核編輯:湯梓紅
-
Mac
+關注
關注
0文章
1107瀏覽量
51540 -
函數
+關注
關注
3文章
4338瀏覽量
62739 -
BLE
+關注
關注
12文章
660瀏覽量
59437 -
藍牙設備
+關注
關注
0文章
39瀏覽量
6754
原文標題:實戰經驗 | BLE 設備地址相關簡介
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論