【導(dǎo)讀】無線通信設(shè)備中包含MAC地址是常見的。因為MAC地址具有唯一性,MAC地址在網(wǎng)絡(luò)通信中是作為設(shè)備符存在的。MAC地址是在網(wǎng)絡(luò)通信中是至關(guān)重要的。本文就介紹藍牙4.2與MAC地址之間的關(guān)系,以及如何在應(yīng)用藍牙的同時保護隱私安全?
如果我們希望獲取設(shè)備的MAC地址也非常的簡單,當(dāng)我們打開智能手機或者是平板電腦,你可以非常簡單的在類似于“設(shè)備管理”的界面找到設(shè)備的MAC地址,而有些設(shè)備,比如說無線路由器,它們的MAC地址就打印在設(shè)備的背面。同時,我們還可以通過其他的方式來獲取設(shè)備的MAC地址。
我們可以試想一下,當(dāng)我們每天搭乘公共交通穿行了整個城市,當(dāng)我們在商場購物或是和朋友在餐廳聚餐的時候,你的智能手機可以幫助你付費、點單和導(dǎo)航。如果你的智能手機接入到網(wǎng)絡(luò)熱點當(dāng)中進行互聯(lián)網(wǎng)訪問的時候,它就可能會在這一系列的過程當(dāng)中來廣播其MAC地址。我們前面提到了MAC地址在網(wǎng)絡(luò)通信當(dāng)中的唯一性,你又是智能手機的使用者,那么這部智能手機的MAC地址從某一角度來講,就代表了你在無線通信過程當(dāng)中的身份認證。因此就存在這樣一種可能,一些懷有惡意的人通過一些其他的無線通信設(shè)備,可以獲取你的智能手機進行數(shù)據(jù)交互時的MAC地址并且記錄了MAC地址出現(xiàn)的日期、時間和相關(guān)的位置,那么你的行蹤就可以被監(jiān)控,如下圖所示。
使用藍牙技術(shù),也可能面對上面的這種問題。因此在藍牙4.2核心規(guī)范當(dāng)中,對上述問題提出了一種解決方法。要了解這個解決的方法,首先要現(xiàn)從藍牙設(shè)備的地址說起。和其他的無線通信技術(shù)類似,藍牙設(shè)備也有自身的設(shè)備地址,我們在藍牙的核心規(guī)范當(dāng)中,通常稱其為BD_ADDR(BluetoothDeviceAddress),BD_ADDR將會在藍牙設(shè)備諸如連接和配對的過程當(dāng)中起到設(shè)備識別的作用。對于藍牙設(shè)備,可以使用公有地址(PublicDeviceAddress),也可以使用隨機地址(RandomDeviceAddress),但無論是使用公有地址,還是隨機地址,它們的地址長度都是48比特,也就是6個字節(jié)。
公有地址的構(gòu)成包含了兩個部分,一部分是公司識別碼(CompanyID),其需要通過IEEE注冊機構(gòu)付費獲得,公司識別碼長度為24比特,處于48比特設(shè)備地址的高24比特;另外一部分是公司分配碼(CompanyAssignedID),其長度也為24比特,處于48比特設(shè)備地址的低24bit,如下圖所示。
公有地址
除了公有地址,藍牙設(shè)備也可以使用隨機地址進行相關(guān)的網(wǎng)絡(luò)操作。藍牙的隨機地址有包含兩種:靜態(tài)地址(StaticDeviceAddress)和私有地址(PrivateDeviceAddress)。由于靜態(tài)地址和本文的主題—如何使用藍牙4.2保護隱私關(guān)系不大,這里我們重點介紹一下私有地址。在私有地址的定義當(dāng)中,又包含了兩個子類:不可解析私有地址(Non-resolvablePrivateAddress)和可解析私有地址(ResolvablePrivateAddress,RPA)。所謂不可解析的私有地址,就是藍牙設(shè)備地址在周期性的變化,并且這個地址無法被其他設(shè)備所解析,我們可以認為它就是一個隨機數(shù)。不可解析的私有地址可以保護用戶的隱私,因為不斷變化的設(shè)備地址使得任何設(shè)備都無法通過記錄藍牙設(shè)備地址的方式來對用戶進行跟蹤,但這樣的保護方式也意味著可信任的設(shè)備也無法這個藍牙設(shè)備的真實身份,因此我們著重介紹可解析的私有地址。如下圖所示,智能手機的設(shè)備地址在不斷的變化,因此即便是設(shè)備地址被獲取,也無法解析出設(shè)備的真實身份,除非具有某種解析密鑰。
可解析的私有地址意味著藍牙設(shè)備地址BD_ADDR在周期性的不斷變化,可以保護用戶的隱私不被跟蹤;同時由于其是可解析的,因此配對設(shè)備(PairDevice)可以通過這個私有地址解析出藍牙設(shè)備的真實身份。因此,我們要了解可解析的私有地址是如何產(chǎn)生的?
假設(shè)有兩個藍牙設(shè)備,分別是設(shè)備A和設(shè)備B,在兩個藍牙設(shè)備A、B建立連接之后,這兩個藍牙設(shè)備可以通過配對的方式交換各自的身份解析密鑰IRK(IdentityResolvingKey,IRK),設(shè)備A的身份解析密鑰IRK-A,設(shè)備B的身份解析密鑰IRK-B。假設(shè)設(shè)備B采用了可解析的私有地址機制,那么設(shè)備B就需要周期性的產(chǎn)生可解析的私有地址。下圖是可解析隨機地址的結(jié)構(gòu),其中可解析隨機地址的高兩個比特分別為0和1,作為可解析地址的標(biāo)識符。
可解析私有地址
當(dāng)設(shè)備B需要生成隨機地址的時候,其內(nèi)部會首先生成一個隨機數(shù)prand,基于prand隨機數(shù),設(shè)備B需要利用哈希hash算法生成可解析隨機地址的另外一部分,hash。prand隨機數(shù)和哈希hash分別占用24比特,計算公式為:
哈希hash=ah(IRK-B,prand隨機數(shù))
其中函數(shù)ah在藍牙4.2核心規(guī)范第3卷H部分2.2.2章節(jié)有詳細介紹,此處不再贅述。當(dāng)設(shè)備B具有了prand隨機數(shù)和基于prand隨機數(shù)生成的哈希hash之后,通過移位相與的方式,就可以生成可解析隨機地址RPA。
RPA=hash||prand
那么設(shè)備A該如何解析RPA呢?當(dāng)設(shè)備A收到一個藍牙設(shè)備地址BD_ADDR,并且這個地址的地址標(biāo)識符表明其是一個可解析隨機地址,設(shè)備A首先將這個地址拆分為prand隨機數(shù)和哈希hash。接下來其利用之前與設(shè)備B配對時獲取的IRK-B,通過函數(shù)ah來生成一個本地哈希localHash。
localHash=ah(IRK-B,prand)
如果生成的本地哈希localHash與拆分得到的哈希hash相等,說明這個地址是設(shè)備B所產(chǎn)生的可解析隨機地址;如果不等,代表解析失敗。設(shè)備A可以利用其獲取的其他設(shè)備的IRK對這個地址就行解析。下圖是一個地址解析的流程圖。
地址解析流程
因此,對于可解析隨機地址的解析,我們可以認為它是一個窮舉的過程。任何設(shè)備在收到一個可解析隨機地址的時候,都會利用其本地所存儲的所有IRK對這個可解析隨機地址進行哈希比對,如果相符,解析過程終止,這個地址的真實身份可解析;如果所有的IRK都無法對這個地址進行解析,那么解析失敗。
通過上述的方法,藍牙設(shè)備可以通過采用可解析隨機地址的方式來對設(shè)備隱私進行保護,進而對設(shè)備使用者的隱私進行保護。采用了可解析隨機地址之后,藍牙設(shè)備的地址是周期性不斷變化的,所以即使通過其他方式獲取了藍牙設(shè)備的地址,也無法通過設(shè)備地址出現(xiàn)的時間和地址來對設(shè)備進行跟蹤。只有那些經(jīng)過配對過程完成了身份解析密鑰IRK交互的可信設(shè)備,才能對可解析隨機地址進行解析。
相關(guān)閱讀:
5大藍牙誤解,物聯(lián)網(wǎng)開發(fā)者眼里的刺!
吊炸天!一款低功耗的藍牙空中鼠標(biāo)的設(shè)計電路
藍牙技術(shù)開發(fā)者會犯的5大錯誤,很有必要知道