1. 前言
也許關(guān)注 BLE 的同學(xué)都注意到了艇棕,BLE 設(shè)備有多種類(lèi)型的設(shè)備地址,如 Public Device Address趾撵,Random Device Address铝条,Static Device Address糖荒,Private Device Address杉辙。如果不了解內(nèi)情,大家肯定會(huì)被它們繞暈捶朵。不過(guò)存在即合理蜘矢,這樣看似奇怪的設(shè)計(jì),實(shí)際上反映了 BLE 的設(shè)計(jì)思路以及所針對(duì)的應(yīng)用場(chǎng)景综看。讓我們通過(guò)本文一窺究竟品腹。
2. BLE設(shè)備的地址類(lèi)型
一個(gè) BLE 設(shè)備,可以使用兩種類(lèi)型的地址(一個(gè) BLE 設(shè)備可同時(shí)具備兩種地址):Public Device Address 和 Random Device Address红碑。而 Random Device Address 又分為 Static Device Address 和 Private Device Address 兩類(lèi)舞吭。其中 Private Device Address 又可以分為 Non-resolvable Private Address 和 Resolvable Private Address。它們的關(guān)系如下所示:
+--> Public Device Address?
+-------------+? |?
|???????????? |? |?
|???? BLE???? |? |?
|??? Device?? +--+??? or/and?
|???????????? |? |???????????????????????????? +--> Static Device Address?
+-------------+? |???????????????????????????? |?
|???????????????????????????? |?
+--> Random Device Address +--+??? or??????????????????????? +-> Non-resolvable private address?
?????????????????????????????????????????????? |????????????????????????????? |
|????????????????????????????? |?
+--> Private Device Address +--+?? or?
|?
|?
+-> Resolvable private address?
Public Device Address
在通信系統(tǒng)中析珊,設(shè)備地址是用來(lái)唯一識(shí)別一個(gè)物理設(shè)備的羡鸥,如 TCP/IP 網(wǎng)絡(luò)中的 MAC 地址、傳統(tǒng)藍(lán)牙中的藍(lán)牙地址等忠寻。對(duì)設(shè)備地址而言,一個(gè)重要的特性奕剃,就是唯一性(或者說(shuō)一定范圍內(nèi)的唯一)衷旅,否則很有可能造成很多問(wèn)題。藍(lán)牙通信系統(tǒng)也不例外纵朋。對(duì)經(jīng)典藍(lán)牙(BR/EDR)來(lái)說(shuō)柿顶,其設(shè)備地址是一個(gè) 48bits 的數(shù)字,稱作"48-bit universal LAN MAC addresses“(和電腦的 MAC 地址一樣)操软。正常情況下嘁锯,該地址需要向 IEEE 申請(qǐng)(其實(shí)是購(gòu)買(mǎi),呵呵)。企業(yè)交錢(qián)猪钮,IEEE 保證地址的唯一性品山,皆大歡喜。當(dāng)然烤低,這種地址分配方式,在 BLE 中也保留下來(lái)了笆载,就是 Public Device Address扑馁。Public Device Address 由 24-bit 的 company_id 和 24-bit 的 company_assigned 組成,具體可參考藍(lán)牙 Spec 中相關(guān)的說(shuō)明凉驻。
Random Device Address
但是腻要,在 BLE 時(shí)代,只有 Public Device Address 還不夠涝登,有如下原因:
Public Device Address 需要向 IEEE 購(gòu)買(mǎi)雄家。雖然不貴,但在 BLE 時(shí)代胀滚,相比 BLE IC 的成本趟济,還是不小的一筆開(kāi)銷(xiāo)。
Public Device Address 的申請(qǐng)與管理是相當(dāng)繁瑣咽笼、復(fù)雜的一件事情顷编,再加上 BLE 設(shè)備的數(shù)量眾多(和傳統(tǒng)藍(lán)牙設(shè)備不是一個(gè)數(shù)量級(jí)的),導(dǎo)致維護(hù)成本增大剑刑。
安全因素媳纬。BLE 很大一部分的應(yīng)用場(chǎng)景是廣播通信,這意味著只要知道設(shè)備的地址施掏,就可以獲取所有的信息钮惠,這是不安全的。因此固定的設(shè)備地址七芭,加大了信息泄漏的風(fēng)險(xiǎn)素挽。
為了解決上述問(wèn)題,BLE 協(xié)議新增了一種地址:Random Device Address抖苦,即設(shè)備地址不是固定分配的毁菱,而是在設(shè)備設(shè)備啟動(dòng)后隨機(jī)生成的。根據(jù)不同的目的锌历,Random Device Address 分為 Static Device Address 和 Private Device Address 兩類(lèi)贮庞。
Static Device Address
Static Device Address是設(shè)備在上電時(shí)隨機(jī)生成的地址,格式如下:
LSB??????????????????????????????????????? MSB?
+------------------------------------+---+---+?
|??? Random part of static address?? | 1 | 1 |?
+------------------------------------+---+---+?
static address?
<--------------+? (48 bits)? +--------------->?
Static Device Address 的特征可總結(jié)為:
最高兩個(gè) bit 為“11”究西。
剩余的 46bits 是一個(gè)隨機(jī)數(shù)窗慎,不能全部為 0,也不能全部為 1。
在一個(gè)上電周期內(nèi)保持不變遮斥。
下一次上電的時(shí)候可以改變峦失。但不是強(qiáng)制的,因此也可以保持不變术吗。如果改變尉辑,上次保存的連接等信息,將不再有效较屿。
Static Device Address 的使用場(chǎng)景可總結(jié)為:
46bits 的隨機(jī)數(shù)隧魄,可以很好地解決“設(shè)備地址唯一性”的問(wèn)題,因?yàn)閮蓚€(gè)地址相同的概率很小隘蝎。
地址隨機(jī)生成购啄,可以解決 Public Device Address 申請(qǐng)所帶來(lái)的費(fèi)用和維護(hù)問(wèn)題。
Private Device Address
Static Device Address 通過(guò)地址隨機(jī)生成的方式嘱么,解決了部分問(wèn)題狮含,Private Device Address 則更進(jìn)一步,通過(guò)定時(shí)更新和地址加密兩種方法曼振,提高藍(lán)牙地址的可靠性和安全性几迄。根據(jù)地址是否加密,Private Device Address 又分為兩類(lèi)拴测,Non-resolvable private address 和 Resolvable private address乓旗。下面我們分別描述。
Non-resolvable private address
Non-resolvable private address 和 Static Device Address 類(lèi)似集索,不同之處在于屿愚,Non-resolvable private address 會(huì)定時(shí)更新。更新的周期稱是由 GAP 規(guī)定的务荆,稱作 T_GAP(private_addr_int) 妆距,建議值是 15 分鐘。其格式如下:
LSB??????????????????????????????????????? MSB?
+----------------------------------------+---+?
|Random part of nonresolvable address| 0 | 0 |?
+----------------------------------------+---+?
nonresolvable address?
<--------------+? (48 bits)? +--------------->?
特征可總結(jié)為:
最高兩個(gè) bit 為“00”函匕。
剩余的 46bits 是一個(gè)隨機(jī)數(shù)娱据,不能全部為 0,也不能全部為 1盅惜。
以 T_GAP(private_addr_int) 為周期中剩,定時(shí)更新。
注1:Non-resolvable private address 有點(diǎn)奇怪抒寂,其應(yīng)用場(chǎng)景并不是很清晰结啼。地址變來(lái)變?nèi)サ模_實(shí)是迷惑了敵人屈芜,但自己人不也一樣被迷惑了嗎郊愧?因此朴译,實(shí)際產(chǎn)品中,該地址類(lèi)型并不常用属铁。
Resolvable private address
Resolvable private address 比較有用眠寿,它通過(guò)一個(gè)隨機(jī)數(shù)和一個(gè)稱作 Identity Resolving Key (IRK) 的密碼生成,因此只能被擁有相同 IPK 的設(shè)備掃描到焦蘑,可以防止被未知設(shè)備掃描和追蹤盯拱。其格式如下:
LSB???????????????????????????????????????????????????? MSB?
+--------------------------+----------------------+---+---+?
|????????????????????????? | Random part of prand | 1 | 0 |?
+--------------------------+----------------------+---+---+?
<--------+ hash +---------> <-----------+ prand +------->?
(24 bits)???????????????????? (24 bits)?
特征如下:
由兩部分組成:?高位 24bits 是隨機(jī)數(shù)部分,其中最高兩個(gè) bit 為“10”例嘱,用于標(biāo)識(shí)地址類(lèi)型坟乾;?低位 24bits 是隨機(jī)數(shù)和 IRK 經(jīng)過(guò) hash 運(yùn)算得到的 hash 值,運(yùn)算的公式為 hash = ah(IRK, prand)蝶防。
當(dāng)對(duì)端 BLE 設(shè)備掃描到該類(lèi)型的藍(lán)牙地址后,會(huì)使用保存在本機(jī)的 IRK明吩,和該地址中的 prand间学,進(jìn)行同樣的 hash 運(yùn)算,并將運(yùn)算結(jié)果和地址中的 hash 字段比較印荔,相同的時(shí)候低葫,才進(jìn)行后續(xù)的操作。這個(gè)過(guò)程稱作 resolve(解析)仍律,這也是 Non-resolvable private address/Resolvable private address 命名的由來(lái)嘿悬。
以 T_GAP(private_addr_int) 為周期,定時(shí)更新水泉。哪怕在廣播善涨、掃描、已連接等過(guò)程中草则,也可能改變钢拧。
Resolvable private address 不能單獨(dú)使用,因此需要使用該類(lèi)型的地址的話炕横,設(shè)備要同時(shí)具備 Public Device Address 或者 Static Device Address 中的一種源内。
Resolvable private address 應(yīng)用場(chǎng)景及 HCI 命令介紹:
BLE Resolvable private address 的解析和過(guò)濾操作是在 Link Layer 實(shí)現(xiàn)的,因而為 BLE 的廣播通信提供了一個(gè)相對(duì)安全的加密環(huán)境份殿。Link Layer 以 Resolving List 的形式膜钓,通過(guò) HCI 向 Host 提供相關(guān)的控制 API,以實(shí)現(xiàn)相應(yīng)的功能卿嘲,相關(guān)的 HCI 命令介紹如下:
LE Set Random Address Command颂斜,設(shè)置一個(gè)新的Random地址,包括Resolvable private address類(lèi)型的地址腔寡。
LE Add Device to Resolving List Command焚鲜,將指定的設(shè)備添加到本機(jī)的Resolving List中,需要指定的參數(shù)包括:需要添加設(shè)備的地址(包括地址類(lèi)型)、需要添加設(shè)備的IPK忿磅、本設(shè)備的IPK糯彬。
LE Remove Device From Resolving List Command,將指定設(shè)備從本機(jī)的Resolving List中刪除葱她。
LE Clear Resolving List Command撩扒,清除本機(jī)的Resolving List。
LE Read Resolving List Size Command吨些,讀取本機(jī)Resolving List的大小搓谆。
LE Read Peer Resolvable Address Command,讀取對(duì)端設(shè)備解析后的Resolvable private address豪墅。
LE Read Local Resolvable Address Command泉手,讀取本機(jī)設(shè)備解析后的Resolvable private address。
LE Set Address Resolution Enable Command偶器,禁止/使能地址解析功能斩萌。
總結(jié)和說(shuō)明
Resolvable private address 的生成,是 Host 以 T_GAP(private_addr_int) 為周期屏轰,主動(dòng)進(jìn)行的颊郎,并通過(guò)“LE Set Random Address Command”告知 Controller 的 Link Layer。因此霎苗,如果本地設(shè)備需要安全的環(huán)境姆吭,可以使用 Resolvable private address 作為廣播和連接地址。
如果本地設(shè)備需要和某一個(gè)使用 Resolvable private address 的設(shè)備通信(掃描唁盏、連接等)内狸,則需要將該設(shè)備添加到 Resolving List 中,并使能地址解析功能升敲。只有地址解析正確的時(shí)候答倡,Link Layer 才會(huì)繼續(xù)后續(xù)的通信動(dòng)作。
如果地址解析不正確驴党,本地設(shè)備向?qū)Ψ桨l(fā)送的所有的數(shù)據(jù)包(掃描請(qǐng)求瘪撇、連接請(qǐng)求等),都不能被正確接收(因?yàn)槟康牡刂凡徽_)港庄。但有一個(gè)例外倔既,如果本地設(shè)備直接關(guān)閉地址解析功能,還是能收到對(duì)方的廣播包鹏氧,因此渤涌,Resolvable private address 并不能保護(hù)廣播包的數(shù)據(jù)。如果有敏感信息把还,放到 scan response packet 中應(yīng)該是一個(gè)不錯(cuò)的選擇实蓬。