使用BLE 4.2的系統(tǒng)設(shè)計(jì):更快、更安全、更節(jié)能
提到家庭和工業(yè)自動化、物聯(lián)網(wǎng)(IoT)、可穿戴設(shè)備、人機(jī)接口設(shè)備(HID)眾多應(yīng)用的無線連接協(xié)議時(shí),藍(lán)牙一定是首選。為滿足各種應(yīng)用的需求,藍(lán)牙技術(shù)聯(lián)盟(SIG)對藍(lán)牙規(guī)格進(jìn)行了持續(xù)改進(jìn)。發(fā)布4.1版大約一年后, SIG在2014年12月藍(lán)牙發(fā)布了藍(lán)牙規(guī)范4.2版。新的4.2主要包括三項(xiàng)更新 - 低功耗(LE)數(shù)據(jù)長度擴(kuò)展(DLE)、鏈路層(LL)隱私保護(hù)以及安全性加強(qiáng)。這些功能提高了BLE數(shù)據(jù)帶寬、隱私保護(hù)和安全性,同時(shí)還有助于降低功耗。本系列文章將詳細(xì)討論這些功能以及它們?nèi)绾斡绊懴到y(tǒng)性能。
藍(lán)牙低功耗(BLE)協(xié)議??梢苑殖扇齻€(gè)部分:
控制器:協(xié)議??刂破鲗?shù)據(jù)包進(jìn)行了加密,轉(zhuǎn)換為無線信號發(fā)送。在接收時(shí),控制器將對無線信號解碼,并重構(gòu)數(shù)據(jù)包。
主機(jī):主機(jī)由管理兩個(gè)或多個(gè)設(shè)備相互通信的各種協(xié)議和配置文件(安全管理器、屬性協(xié)議等)組成。
應(yīng)用:可使主機(jī)和控制器實(shí)現(xiàn)一個(gè)特定功能的用例。
鏈路層(LL)
藍(lán)牙4.2的大部分新功能都集中在鏈路層周圍。鏈路層在建立可靠物理鏈路和功能中扮演著非常重要的角色,有助于提高BLE協(xié)議穩(wěn)健性和能效。鏈路層功能包括廣播、掃描、創(chuàng)建和維護(hù)連接以建立物理鏈路。在鏈路層上定義了兩個(gè)角色:主設(shè)備和從設(shè)備。
數(shù)據(jù)長度擴(kuò)展(DLE)
數(shù)據(jù)長度擴(kuò)展能夠使兩個(gè)BLE設(shè)備之間的數(shù)據(jù)傳輸更快。為了了解DLE功能,請先讓我們來看看鏈路層上的BLE數(shù)據(jù)包。下圖所示為藍(lán)牙4.0/4.1的鏈路層數(shù)據(jù)包結(jié)構(gòu)。
如果我們仔細(xì)觀察各數(shù)據(jù)包的開銷,將發(fā)現(xiàn)存在1個(gè)字節(jié)的前導(dǎo)、4個(gè)字節(jié)的訪問地址、2個(gè)字節(jié)的數(shù)據(jù)頭、3個(gè)字節(jié)的循環(huán)冗余檢查(CRC)和一個(gè)可選的4個(gè)字節(jié)的消息完整性檢查(MIC)。當(dāng)使用加密時(shí),消息完整性檢查(MIC)將與有效負(fù)載一起發(fā)送。因此,每個(gè)包含27個(gè)字節(jié)數(shù)據(jù)的加密鏈路層數(shù)據(jù)均含有14個(gè)字節(jié)的開銷?,F(xiàn)在,讓我們來看看藍(lán)牙4.2定義的鏈路層數(shù)據(jù)包結(jié)構(gòu)。
相較于舊版本藍(lán)牙規(guī)范的27字節(jié),藍(lán)牙4.2中的有效負(fù)載量可達(dá)到251個(gè)字節(jié)。每個(gè)數(shù)據(jù)包開銷仍然保持不變,即14個(gè)字節(jié)。然而,該開銷現(xiàn)已與多達(dá)251個(gè)字節(jié)相關(guān)聯(lián),而不是27個(gè)字節(jié)。這種最小有效負(fù)載的變化提高了吞吐量并減少了處理時(shí)間。
圖4所示為當(dāng)數(shù)據(jù)需要通過藍(lán)牙4.1和藍(lán)牙4.2從一個(gè)設(shè)備傳輸至另一個(gè)設(shè)備時(shí)的吞吐量。
在上圖中,數(shù)據(jù)包時(shí)間的計(jì)算方法如下:
數(shù)據(jù)包時(shí)間= 8 *(前導(dǎo)字節(jié)的數(shù)量+訪問地址字節(jié)的數(shù)量+頭字節(jié)的數(shù)量+有效負(fù)載字節(jié)的數(shù)量+ MIC字節(jié)的數(shù)量+ CRC字節(jié)的數(shù)量)/數(shù)據(jù)速率 秒
對于接收數(shù)據(jù)包,不存在有效負(fù)載和MIC字節(jié)。因此,接收數(shù)據(jù)包時(shí)間為:
發(fā)送數(shù)據(jù)包時(shí)間= 8 *(1 + 4 + 2 + 3)/ 106 秒
=80微秒
含27個(gè)字節(jié)的有效負(fù)載的發(fā)送數(shù)據(jù)包時(shí)間為:
發(fā)送數(shù)據(jù)包時(shí)間= 8 *(1 + 4 + 2 + 27 + 4 + 3)/ 106秒
=328微秒
同樣,251個(gè)字節(jié)的有效負(fù)載的發(fā)送數(shù)據(jù)包時(shí)間為2120微秒。
另外,如上圖所示,隨著各發(fā)送/接收數(shù)據(jù)包,存在兩個(gè)相關(guān)的幀間間隔(T_IFS),一個(gè)為發(fā)送期間,一個(gè)為接收期間。如果某個(gè)事務(wù)的幀數(shù)量增加,則該事務(wù)的耗時(shí)也將成比例地增加。當(dāng)數(shù)據(jù)長度功能被啟用時(shí),相較于藍(lán)牙4.1,藍(lán)牙4.2在一個(gè)幀內(nèi)打包了更多數(shù)據(jù),從而減少了每次事務(wù)處理的總時(shí)間,并增加了吞吐量(其中,吞吐量 =有效負(fù)載尺寸/總時(shí)間)。
如上圖所示,對于藍(lán)牙4.1鏈路層,最大有效負(fù)載尺寸為27個(gè)字節(jié)(216比特)以及該交易的總時(shí)間為708微秒,意味著約 298 kbps的理論吞吐量。
而對于4.2鏈路層,最大有效負(fù)載尺寸為251個(gè)字節(jié)(2008比特)以及總時(shí)間為2500微秒,意味著約 784 kbps的理論吞吐量。因此,相較于藍(lán)牙4.1,藍(lán)牙4.2提供了大約2.6倍的更高吞吐量。
BLE 4.2允許主設(shè)備和從設(shè)備之間協(xié)商數(shù)據(jù)長度,還允許不對稱的發(fā)送和接收有效負(fù)載量。有效地利用該功能以及選擇合適的接收/發(fā)送數(shù)據(jù)長度對于實(shí)現(xiàn)最大吞吐量具有十分重要的意義。
讓我們考慮這樣一個(gè)應(yīng)用:BLE從設(shè)備需要將幾千字節(jié)傳輸至主設(shè)備、從主設(shè)備接收空包并且連接間隔為8.75毫秒。假設(shè)在以下設(shè)置中協(xié)商數(shù)據(jù)長度(從設(shè)備):
情景1 – 發(fā)送 - 251個(gè)字節(jié),接收 - 251字節(jié)
情景2 – 發(fā)送 - 251個(gè)字節(jié),接收 - 27字節(jié)
在情景1中,如圖5所示,在第一次接收/發(fā)送數(shù)據(jù)包時(shí),接收有效負(fù)載尺寸為0字節(jié)以及發(fā)送有效負(fù)載尺寸為251個(gè)字節(jié),耗時(shí)2.5毫秒(包括幀間間隔)。第二次接收/發(fā)送數(shù)據(jù)包也是一樣的。這兩個(gè)接收/發(fā)送數(shù)據(jù)包共耗時(shí)5毫秒,在此連接間隔內(nèi)剩下3.85毫秒。在理想情況下,應(yīng)該在同一連接間隔內(nèi)存在另一個(gè)接收/發(fā)送數(shù)據(jù)包。但是,主設(shè)備的調(diào)度器不會在此連接間隔內(nèi)安排另一個(gè)接收/發(fā)送數(shù)據(jù)包。這是因?yàn)檎{(diào)度器會基于協(xié)商的數(shù)據(jù)長度(本案例中發(fā)送/接收的數(shù)據(jù)長度均為251)來檢查發(fā)送/接收數(shù)據(jù)包是否具有足夠的時(shí)間。如圖所示,含有接收和發(fā)送有效負(fù)載量為251字節(jié)的接收和發(fā)送數(shù)據(jù)包需要4.54毫秒。然而,前兩個(gè)數(shù)據(jù)包之后的可用時(shí)間為3.85毫秒,這導(dǎo)致在本連接間隔內(nèi)僅2個(gè)發(fā)送數(shù)據(jù)包。
在情景2中,在該連接間隔內(nèi),調(diào)度器僅需要2.64毫秒就可調(diào)度一個(gè)數(shù)據(jù)包,因此在8.75毫秒的連接間隔內(nèi)可以容納第三個(gè)數(shù)據(jù)包,如圖6所示。如圖所示,相對于案例1,本案例將提供高于50%的吞吐量。
盡管PDU尺寸的選擇會影響吞吐量,但還存在對其產(chǎn)生影響的其他因素,比如,連接間隔和最大傳輸單元(MTU)。
數(shù)據(jù)長度的擴(kuò)展可通過任何連接設(shè)備的控制器來觸發(fā)。如果兩個(gè)設(shè)備都支持?jǐn)?shù)據(jù)長度的擴(kuò)展功能,則該設(shè)備可發(fā)送一個(gè)獲取更新數(shù)據(jù)長度的請求,而其他設(shè)備將通過其自己的參數(shù)來做出響應(yīng)。圖7所示為協(xié)商進(jìn)程。
如果一臺不支持?jǐn)?shù)據(jù)長度擴(kuò)展功能的設(shè)備接收到數(shù)據(jù)長度的更新請求時(shí),將會返回一個(gè)未知的回復(fù)。該回復(fù)將通知發(fā)起請求的設(shè)備另一臺設(shè)備不支持DLE,該設(shè)備將繼續(xù)傳輸符合藍(lán)牙4.1 PDU尺寸的數(shù)據(jù)。也就是說,數(shù)據(jù)長度擴(kuò)展支持向下兼容。
數(shù)據(jù)長度擴(kuò)展在提高吞吐量的同時(shí),也通過減少射頻活動時(shí)間從而有助于降低功耗。這是因?yàn)樵谒{(lán)牙4.2中,如果數(shù)據(jù)尺寸大于27字節(jié),所需的接收/發(fā)送數(shù)據(jù)包更少、射頻活動的時(shí)間更短)。比如說,需要傳輸 135個(gè)字節(jié),BLE4.1設(shè)備在連接時(shí)需要5個(gè)發(fā)送/接收數(shù)據(jù)包來傳輸數(shù)據(jù);然而BLE4.2設(shè)備在傳輸相同數(shù)量的數(shù)據(jù)時(shí)只需一個(gè)發(fā)送/接收數(shù)據(jù)包。在無線應(yīng)用中,射頻通信消耗了大多數(shù)的系統(tǒng)電力。使用DLE,射頻通信活動時(shí)間減少,可以顯著延長電池壽命。
在本系列文章的第一部分,我們討論了藍(lán)牙低功耗(BLE)4.2的數(shù)據(jù)長度擴(kuò)展(DLE)和低功耗。在本文中,我們將討論藍(lán)牙低功耗的隱私保護(hù)功能、藍(lán)牙4.2的新增功能以及為何這些變化能夠使BLE設(shè)備更加保護(hù)隱私和節(jié)能。
隱私保護(hù)是BLE設(shè)備防止被不受信任的設(shè)備追蹤的能力。BLE設(shè)備在廣播數(shù)據(jù)包內(nèi)使用48比特地址,如果該地址被其他設(shè)備解碼了,那么根據(jù)這個(gè)地址就可以跟蹤該BLE設(shè)備的移動。為了保護(hù)BLE設(shè)備的隱私,受信任的BLE設(shè)備將使用共享密鑰“身份解析密鑰”(Identity Resolving Key, IRK)的共享密鑰。兩個(gè)具有此共享密鑰的BLE設(shè)備可以相互識別。一臺BLE設(shè)備先利用該共享密鑰生成一個(gè)隨機(jī)的“可解析私有地址”發(fā)送出來,另一臺設(shè)備則采用同一密鑰來解析該私有地址。
藍(lán)牙設(shè)備地址
藍(lán)牙設(shè)備使用48比特的設(shè)備地址。設(shè)備地址被分類為:
• 公有設(shè)備地址
• 隨機(jī)設(shè)備地址
1. 公有設(shè)備地址:公有設(shè)備地址由每臺設(shè)備的公司ID和公司分配ID組成,遵循IEEE 802-2001標(biāo)準(zhǔn)。公司ID和公司分配ID值均為24比特,構(gòu)成總數(shù)為48比特的地址,如圖1所示。
圖1:公有設(shè)備地址
2. 隨機(jī)設(shè)備地址:顧名思義,隨機(jī)設(shè)備地址是隨機(jī)生成的地址。隨機(jī)設(shè)備地址分為兩種類型:
• 靜態(tài)隨機(jī)地址
• 私有隨機(jī)地址
2.1 靜態(tài)隨機(jī)地址:靜態(tài)隨機(jī)地址可以是出廠前在設(shè)備上預(yù)先設(shè)定好的,也可以在每次開關(guān)機(jī)循環(huán)后更改一個(gè)新值。然而,只有設(shè)備經(jīng)過一次完整的開關(guān)機(jī)循環(huán)后才可以更改此地址。如果在運(yùn)行期間更改了該地址,存儲在對端設(shè)備中的地址將失效,并且將不可再使用舊地址進(jìn)行重新連接。靜態(tài)隨機(jī)地址有以下要求:
• 兩個(gè)最高有效位恒為1
• 所有隨機(jī)位數(shù)值都不能為0
• 所有隨機(jī)位數(shù)值都不能為1
圖2:靜態(tài)隨機(jī)地址
私有隨機(jī)地址分兩種類型 - 不可解析私有地址和可解析私有地址。
2.1.1不可解析的私有地址:不可解析的私有地址隨機(jī)生成,并且每次連接都會發(fā)生變化。不可解析的私有地址有以下要求:
• 兩個(gè)最高有效位恒為0
• 所有隨機(jī)位數(shù)值都不能為0
• 所有隨機(jī)位數(shù)值都不能為1
該地址不能和靜態(tài)地址或公有地址相同。
2.1.2可解析私有地址(RPA)
可解析私有地址(RPA)是BLE設(shè)備隱私保護(hù)的重要支柱。RPA是指使用隨機(jī)數(shù)字和身份解析密鑰(IRK)所生成的地址。兩個(gè)設(shè)備在配對期間共享IRK,其存儲在設(shè)備的內(nèi)置存儲器中。兩臺配對設(shè)備除了共享IRK之外,還共享一個(gè)稱為身份地址的固定地址。該身份地址可以是公有的或是隨機(jī)的靜態(tài)地址類型。因較早進(jìn)行綁定的設(shè)備存有IRK和身份地址,因此能夠解析配對設(shè)備的私有地址。圖3所示為可解析私有地址的格式。
在RPA中,24比特的Hash是IRK和prand的函數(shù)。Prand是24比特的數(shù)字,它包含22個(gè)隨機(jī)位數(shù)值以及2個(gè)固定的最高有效位數(shù)值;如圖3所示。
圖3:可解析私有地址
可解析私有地址的生成:可解析私有地址是與IRK和prand共同生成的。
Prand是隨機(jī)生成的,有以下要求:
• prand的兩個(gè)最高有效位數(shù)值應(yīng)等于2b01
• prand的所有位元數(shù)值都不能為0
• prand的所有位元數(shù)值都不能為1
地址中的Hash部分則是利用prand和設(shè)備的128位IRK傳遞到加密函數(shù)“e”生成。此加密函數(shù)的輸出截?cái)酁?4個(gè)最低有效位數(shù)值,就是Hash數(shù)值。
Hash=e(IRK,prand *),截?cái)酁?4位
*為了使prand的長度與IRK相同,prand增加了104位數(shù)值為0的空白位,確保原有的最低有效位保持不變。
24比特prand和24比特Hash組合生成隨機(jī)地址。
可解析私有地址的解析: B設(shè)備如果具有A設(shè)備的IRK,則可以解析該A設(shè)備的可解析私有地址??山馕鏊接械刂酚?4位的prand和24位的Hash。B設(shè)備通過A設(shè)備的prand和IRK來解析地址。當(dāng)B設(shè)備接收到A設(shè)備的可解析私有地址后,會從該地址提取出Hash和prand,利用其生成本地Hash值。本地Hash的生成方式與在地址生成期間的方式完全相同。
本地Hash= e(A設(shè)備IRK、prand),截?cái)酁?4位
如果B設(shè)備生成的本地Hash值與從地址中提取的A設(shè)備 Hash值匹配,則該地址被成功解析。如果B設(shè)備有一個(gè)以上對端的IRK,則該設(shè)備將為每個(gè)存儲的IRK重復(fù)這一步驟,以確定接收到的可解析私有地址是否與存儲的某一個(gè)IRK相關(guān),直到IRK中某一個(gè)地址匹配成功或者所有地址匹配結(jié)束。
B設(shè)備在配對過程中收到對端設(shè)備的IRK和身份地址后,會將其與本地IRK一起存儲在待解析列表中,用于將來解析私有地址。
在藍(lán)牙4.1中,該解析列表保存在主機(jī)上,由主機(jī)完成地址解析,這意味著在每次收到附有可解析私有地址的廣播包時(shí),都需要主機(jī)參與解析地址。但在藍(lán)牙4.2中,該解析列表保存在控制器中,由控制器解析私有地址,無需主機(jī)干預(yù);而如果主機(jī)使用單獨(dú)的CPU控制,則意味著不需要喚醒設(shè)備中的主機(jī),從而降低了整體功耗。即使對于使用相同的CPU執(zhí)行控制器和主機(jī)的設(shè)備,因?yàn)榈刂凡辉傩枰ㄟ^不同的協(xié)議層,也可以通過減少解析地址所需的CPU循環(huán)次數(shù)而降低功耗。此外,在沒有主機(jī)參與的情況下,地址在鏈路層解析,可提供更快的連接。當(dāng)在鏈路層完成地址解析時(shí),Privacy 1.2也被稱為鏈路層(LL)隱私。
可解析私有地址(RPA)超時(shí)
隨機(jī)私有地址每隔一段時(shí)間自動更新,進(jìn)一步降低了設(shè)備被跟蹤的可能性。該時(shí)間間隔由主機(jī)設(shè)置,為RPA超時(shí)設(shè)置計(jì)時(shí)。當(dāng)計(jì)時(shí)過期時(shí),IRK和新的prand將會生成新的RPA。對于Privacy 1.1,RPA的超時(shí)時(shí)間固定為15分鐘。藍(lán)牙4.2中的Privacy 1.2將最小RPA超時(shí)時(shí)間減少為1秒,而最大超時(shí)時(shí)間可以為11.5小時(shí)。藍(lán)牙4.2中RPA不斷變化,私有設(shè)備難以被跟蹤,從而提高了隱私性。
雖然藍(lán)牙4.1和更舊的版本支持可解析私有地址,但由于對連接時(shí)間的影響和功耗的影響限制了可用性。在使用RPA時(shí),不能在Privacy1.1中使用諸如設(shè)備過濾和定向連接廣播這樣的功能。
設(shè)備過濾
設(shè)備過濾是指減少其需要響應(yīng)的同類設(shè)備數(shù)量,有助于減少功耗。設(shè)備在過濾功能啟用時(shí)需要響應(yīng)的那些同類設(shè)備地址和地址類型,存儲在白名單中。該白名單由主機(jī)配置并保持在鏈路層。配置完成后,鏈路層用其來過濾對等設(shè)備。由于在藍(lán)牙4.1中使用RPA時(shí)地址只能由主機(jī)解析,因此鏈路層不能過濾該設(shè)備。因此,對于藍(lán)牙4.1,當(dāng)使用RPA時(shí)不支持設(shè)備過濾。由于設(shè)備需響應(yīng)每個(gè)對端設(shè)備,因此增加了私有藍(lán)牙4.1設(shè)備的功耗。
在藍(lán)牙4.2中,由于地址解析在鏈路層完成,即使使用RPA仍然可以過濾設(shè)備?,F(xiàn)在,不在白名單上的設(shè)備不需要主機(jī)干預(yù),因此降低了功耗。
定向連接廣播
該定向連接廣播PDU包含傳播器的RPA,也包括想要連接至的設(shè)備RPA。這使得兩個(gè)設(shè)備之間的連接變得更快。此外,輔助設(shè)備不需要與不打算連接的對等設(shè)備共享設(shè)備的具體詳細(xì)信息。當(dāng)基于藍(lán)牙4.1的中央設(shè)備使用具備過濾隱私功能的設(shè)備時(shí),定向連接廣播不可用,因?yàn)槠洳荒茉阪溌穼咏馕龅刂?。然而,藍(lán)牙4.2支持在鏈路層解析地址,因此支持定向廣播連接。藍(lán)牙4.2包括附加掃描過濾器政策設(shè)置,允許帶可解析私有地址的定向廣播。在輔助設(shè)備采用定向連接廣播之前,必須檢查對等設(shè)備的中央地址解析特性。中央地址解析特性告知設(shè)備對等設(shè)備是否支持地址解析。
綜上所述,使用可解析私有地址時(shí),BLE設(shè)備很難被追蹤到;而RPA頻繁變換且使用定向廣播,則使得跟蹤私有藍(lán)牙4.2設(shè)備變得更加困難。在鏈路層的地址解析能夠加速連接且降低功耗。此外,在藍(lán)牙4.2中采用RPA時(shí)能夠進(jìn)行設(shè)備過濾,與使用藍(lán)牙4.1或更舊版本的設(shè)備相比,可提高私有設(shè)備的功耗利用效率。