藍(lán)牙 BLE 地址類(lèi)型解析

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ò)的選擇实蓬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茸俭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子安皱,更是在濱河造成了極大的恐慌调鬓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酌伊,死亡現(xiàn)場(chǎng)離奇詭異腾窝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)居砖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)虹脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人奏候,你說(shuō)我怎么就攤上這事循集。” “怎么了蔗草?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵暇榴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蕉世,道長(zhǎng),這世上最難降的妖魔是什么婆硬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任狠轻,我火速辦了婚禮,結(jié)果婚禮上彬犯,老公的妹妹穿的比我還像新娘向楼。我一直安慰自己,他們只是感情好谐区,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布湖蜕。 她就那樣靜靜地躺著,像睡著了一般宋列。 火紅的嫁衣襯著肌膚如雪昭抒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天炼杖,我揣著相機(jī)與錄音灭返,去河邊找鬼。 笑死坤邪,一個(gè)胖子當(dāng)著我的面吹牛熙含,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播艇纺,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼怎静,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邮弹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蚓聘,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腌乡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后或粮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體导饲,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年氯材,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渣锦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氢哮,死狀恐怖袋毙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冗尤,我是刑警寧澤听盖,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站裂七,受9級(jí)特大地震影響皆看,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恩伺。 院中可真熱鬧,春花似錦毛雇、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至壳繁,卻和暖如春震捣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闹炉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工伍派, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剩胁。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓诉植,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親昵观。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晾腔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理舌稀,服務(wù)發(fā)現(xiàn),斷路器灼擂,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 最近項(xiàng)目需求要做藍(lán)牙自動(dòng)配對(duì)壁查,也就是在首次配對(duì)的時(shí)候跳過(guò)用戶輸入PIN碼。網(wǎng)上有很多分享的如何實(shí)現(xiàn)自動(dòng)配對(duì)剔应。以下做...
    Mr_Tu閱讀 12,552評(píng)論 2 7
  • 安卓4.3(API 18)為BLE的核心功能提供平臺(tái)支持和API睡腿,App可以利用它來(lái)發(fā)現(xiàn)設(shè)備、查詢服務(wù)和讀寫(xiě)特性峻贮。...
    風(fēng)雨byt閱讀 14,047評(píng)論 3 43
  • 今天再讀《愛(ài)表?yè)P(yáng)》課程席怪,心里又多了一些感悟、體會(huì)纤控」夷恚回顧三個(gè)月的亮點(diǎn)記錄及入群一個(gè)多月的學(xué)習(xí)經(jīng)歷,感觸良多船万。剛...
    xj蘭草閱讀 267評(píng)論 4 6
  • 想寫(xiě)這篇文字很久了,感觸源于阿根廷和西班牙合作的電影《荒蠻故事》耿导。120分鐘的電影由六個(gè)既反叛又娛樂(lè)的復(fù)仇小故事組...
    Super_Hellen閱讀 566評(píng)論 0 3