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