1.3 Clusters
在每個(gè)Endpoint中,我們可以配置幾個(gè)Clusters。ZigBee Cluster實(shí)際上是一種通信模型。它基于客戶端/服務(wù)器模式,用于描述兩個(gè)設(shè)備之間的應(yīng)用協(xié)議。每個(gè)Cluster都有一個(gè)Cluster ID,該ID在ZigBeeCLuster Library(ZCL)中定義。Cluster中可以定義多個(gè)屬性和命令。
例如,我們需要實(shí)現(xiàn)一個(gè)帶有兩個(gè)燈泡的燈。我們可以在其中定義兩個(gè)Endpoint。每個(gè)Endpoint代表一個(gè)燈泡。
對(duì)于基本功能,例如打開(kāi)/關(guān)閉,我們可以使用打開(kāi)/關(guān)閉 Cluster。燈是服務(wù)器端,而開(kāi)關(guān)是客戶端。服務(wù)器端定義了一個(gè)屬性“ on / off”,指示燈是打開(kāi)還是關(guān)閉。還定義了諸如“打開(kāi)”,“關(guān)閉”,“切換”之類(lèi)的命令,這些命令應(yīng)從客戶端發(fā)送到服務(wù)器端。
如果我們需要更多功能,例如我們需要支持亮度級(jí)別控制。我們可以使用亮度級(jí)別控制Cluster。在此Cluster中,服務(wù)器端定義了一個(gè)屬性“Level”,指示燈泡的亮度。還定義了諸如“逐漸變化亮度級(jí)別”之類(lèi)的命令,這些命令應(yīng)從客戶端發(fā)送到服務(wù)器端。
而且,如果我們需要更多功能,例如需要支持顏色控制,則可以使用顏色控制Cluster。對(duì)于ZCL規(guī)范中沒(méi)有定義的一些功能,開(kāi)發(fā)者可以添加一些自定義的Cluster,自己去定義屬性、命令等,就成了一個(gè)私有的協(xié)議。
1.4 安全加密
1.4.1 安全威脅
由于ZigBee是一種無(wú)線技術(shù),因此安全性非常重要,因?yàn)?a href="http://wenjunhu.com/v/tag/10353/" target="_blank">黑客可以通過(guò)無(wú)線檢測(cè)到這些數(shù)據(jù)包。想象您有一個(gè)智能門(mén)鎖。如果黑客捕獲了打開(kāi)您的門(mén)的數(shù)據(jù)包,那么他可以重發(fā)該文件以打開(kāi)您的門(mén)。這是很危險(xiǎn)的。
(1) 偽造 :比如黑客捕獲到無(wú)線報(bào)文,進(jìn)行篡改之后,偽造一個(gè)假的報(bào)文,再發(fā)送到這個(gè)ZigBee網(wǎng)絡(luò)中,從而去控制網(wǎng)絡(luò)里的設(shè)備;
(2) 重播 :捕獲到這個(gè)報(bào)文后,不進(jìn)行編輯,直接重新播放一下,
為了防止這種情況發(fā)生,ZigBee定義了許多安全功能。下面將會(huì)做簡(jiǎn)要介紹。
1.4.2 Zigbee安全
1、加密流程
APS層和網(wǎng)絡(luò)層的加密流程,如下圖所示。
它顯示了如何在網(wǎng)絡(luò)層中保護(hù)不安全的網(wǎng)絡(luò)幀:首先,網(wǎng)絡(luò)有效負(fù)載將被加密。之后,將在加密的有效負(fù)載之前添加安全標(biāo)頭。然后根據(jù)網(wǎng)絡(luò)標(biāo)頭,安全標(biāo)頭和加密的有效負(fù)載來(lái)計(jì)算哈希值。最后,將32位哈希值附加到幀的末尾。如果更改了網(wǎng)絡(luò)標(biāo)頭,安全標(biāo)頭和加密的有效負(fù)載中的任何字節(jié),則哈希值將不同。我們將此值稱(chēng)為MIC(mandatory integrity control),是消息完整性檢查的縮寫(xiě)。
2、加密算法
APS層和網(wǎng)絡(luò)層的兩個(gè)加密環(huán)節(jié)使用的都是AES128對(duì)稱(chēng)加密算法,這意味著需要使用相同的密鑰進(jìn)行加密和解密。
3、完整性檢查
4、重播攻擊保護(hù)
添加了幀計(jì)數(shù)器以防止重發(fā)攻擊。讓我們看看它是如何工作的。
1、在發(fā)送方
(1)每發(fā)送一次FrameCounter的值都需要增加1;
(2)Frame Counter的值需要保存在non-volatile memory中,便于重啟后恢復(fù)Frame Counter。
2、在接收方
(1)首先,將記錄接收到幀的節(jié)點(diǎn)的Eui64和Frame Counter的值;
(2)來(lái)自同一節(jié)點(diǎn)的下一條消息的FrameCounter必須大于記錄的Frame Counter值。如果此次的Frame Counter比上一次的小或者相等,該消息都將被視為重發(fā)并將被丟棄;
(3)由于資源有限,接收方只保存所有鄰居的Frame Counter。
由于Frame Counter是一個(gè)32位值,因此如果設(shè)備長(zhǎng)時(shí)間保持運(yùn)行狀態(tài),它可能會(huì)自動(dòng)溢出。顯然,如果幀計(jì)數(shù)器被覆蓋,可能會(huì)出現(xiàn)問(wèn)題。為防止這種情況發(fā)生,必須在溢出之前更新Network Key。如果更新了Network Key,幀計(jì)數(shù)器則可以再次從零開(kāi)始。對(duì)于End Device來(lái)說(shuō),它通常只需要保存其父節(jié)點(diǎn)的Frame Counter即可。
1.4.3 APS層安全
在APS層用來(lái)加密的密鑰被稱(chēng)為L(zhǎng)ink key。在ZigBee網(wǎng)絡(luò)中,雖然APS層和網(wǎng)絡(luò)層都有加密,但是絕大部分通信都只是在網(wǎng)絡(luò)層的加密。一般來(lái)說(shuō),只有在傳輸NetworkKey的時(shí)候需要在應(yīng)用層被加密,并且這僅在Trust Center和新設(shè)備之間發(fā)生。因此,在這種情況下,我們也將其稱(chēng)為T(mén)rust Center Link key。
新設(shè)備和Trust Center之間必須要在組網(wǎng)之前就使用哪一個(gè)Link Key達(dá)成共識(shí),所以新設(shè)備和Trust Center之間是不需要一個(gè)Link Key的傳輸過(guò)程的。
網(wǎng)絡(luò)中的設(shè)備可以使用相同的Linkkey或不同的Link key,只要新設(shè)備和TrustCenter之間達(dá)成共識(shí)即可。
一般來(lái)說(shuō)有四種Link Key,但是我們以前兩種為主。后兩種目前可能用得很少了,這里僅作簡(jiǎn)要描述,不做深入探討。
(1)DefaultGlobal Trust Center Link Key又被稱(chēng)為the well-known linkkey,其內(nèi)容如下:
Default global Trust Center link key (0:15)= 0x5a 0x69 0x67 0x42 0x65 0x65 0x41 0x6c 0x6c 0x69 0x61 0x6e 0x63 0x65 0x300x39
其實(shí)就是字符串“ZigBeeAlliance09 ”。這個(gè)是在ZigBee 3.0之前就一直在廣泛使用的一個(gè)相同的默認(rèn)的密鑰,如今得以保留主要是為了保持向后的兼容性。
所有的ZigBee設(shè)備都會(huì)有這個(gè)Default Global Trust Center Link Key。如果沒(méi)有指定其他的link key的話,Default Global Trust Center LinkKey就是設(shè)備在入網(wǎng)過(guò)程中第一個(gè)被嘗試使用的密鑰。
如果希望能保證和其他的ZigBee3.0的設(shè)備之間互聯(lián)互通的話,這個(gè)密鑰是不能改變的。
(2)Install CodeDerived Preconfigured Link Key
Install Code并不是一個(gè)Key,而是一個(gè)Key的輸入。InstallCode是16字節(jié)多項(xiàng)式+ 2字節(jié)CRC,再通過(guò)固定的算法,計(jì)算可以得出Link Key。這種Link Key的傳輸是由人工來(lái)完成的,Install Code的實(shí)際應(yīng)用場(chǎng)景如下圖所示:
首先,在產(chǎn)品生產(chǎn)的時(shí)候,由廠家在產(chǎn)線隨機(jī)生成一個(gè)Install Code;
●然后將這個(gè)Install Code燒錄到產(chǎn)品里面;
●然后把這個(gè)Install Code和Eui64打到標(biāo)簽上面,貼在這個(gè)產(chǎn)品表面;
●在安裝的時(shí)候,安裝人員利用手持設(shè)備的掃描功能,從產(chǎn)品標(biāo)簽上掃描獲取InstallCode和Eui64;
●將獲取到的Install Code和Eui64告訴Trust Center(一般是協(xié)調(diào)器);
●然后在Trust Center上通過(guò)這個(gè)Install Code得到Link Ley,讓Trust Center知道IEEE地址為Eui64的這個(gè)新設(shè)備必須使用這個(gè)Link Key進(jìn)行組網(wǎng);
●待入網(wǎng)的新設(shè)備這邊,從flash中讀取出預(yù)先燒錄的Install Code,然后使用相同的算法得出Link key。
●待入網(wǎng)的新設(shè)備這邊計(jì)算得出的Link Key應(yīng)與Trust Center端的派生Link Key相同。這樣,即使消息已加密,他們也可以在應(yīng)用程序?qū)舆M(jìn)行通信。接下來(lái)就開(kāi)始組網(wǎng)的過(guò)程了。
An Install Codeis a sequence of 16 bytes followed by 2 bytes of CRC. A complete 18 bytessequence is needed to generate a unique TCLK. The usage of install codesdefined in Z3.0 was added to allow a generalized out-of-band key deliverymethod for network commissioning. It works as follows:
·TC gets the install code and the 64-bitIEEE address of the device that will use this install code to join, via anyuser interface (serial, display and switches, etc.). The install code must bephysically provided with the joining device.
·TC validates the CRC of the install codeintroduced. If this is valid then a TCLK entry is added into the TC with thederived key and the address of the corresponding device.
·The joining device is instructed to useits install code to generate the corresponding TCLK.
·The network is open by any means.
·The joining device performs associationand the Trust Center delivers the network key encrypted in APS layer with theinstall code derived key.
·After this, the joining device mustperform the update of its TCLK as BDB specification requires.
For further details on how to generate theinstall codes, see the Base Device Specification [7]. This is supported only byR21 or later revisions, so to allow backwards compatibility the applicationmust have a way to attempt joining networks without the usage of Install Codes.
(3)DistributedSecurity Global Link Key
在DistributedSecurity Network中,沒(méi)有Trust Center,每個(gè)Router都可以分發(fā) network key。由Router父節(jié)點(diǎn)向新入網(wǎng)設(shè)備分發(fā)的network key,在APS層是使用Distributed Security Global Link Key進(jìn)行加密的。如果希望能保證和其他的ZigBee 3.0的設(shè)備之間互聯(lián)互通的話,這個(gè)密鑰是不能改變的。
Distributed Security Global Link Key (0:15)= 0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde0xdf
(4)Touchlink PreconfiguredLink Key
如果新設(shè)備是要通過(guò)touchlink的方式進(jìn)行組網(wǎng)的話,就需要使用Touchlink Preconfigured Link Key。
Touchlink Preconfigured Link Key (0:15) =0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7 0xc8 0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf
1.4.4 網(wǎng)絡(luò)層安全
1、總覽
該密鑰稱(chēng)為Network Key。由于它是一種對(duì)稱(chēng)加密算法,因此同一ZigBee網(wǎng)絡(luò)中的所有設(shè)備都將使用相同的Network Key。
在網(wǎng)絡(luò)安全標(biāo)頭中,添加了“幀計(jì)數(shù)器”的字段和加密信息節(jié)點(diǎn)的源Eui64,以防止重發(fā)攻擊。還添加了密鑰序列號(hào)以支持Network Key更新。
2、逐跳安全
APS層的安全性,是端到端安全性。在APS層,是節(jié)點(diǎn)A加密好了之后一直得等到達(dá)目的地(節(jié)點(diǎn)C)之后才去解密。這中間的加密/解密密鑰(Link Key)只要A和C兩個(gè)知道,B不知道這個(gè)密鑰,不能去進(jìn)行加密解密,所以B不關(guān)心通信的內(nèi)容。在這種情況下,我們可以有很多的Link Key,只要通信的雙方知道即可。
網(wǎng)絡(luò)層的安全性,是逐跳安全性。A加密好了在發(fā)給C的過(guò)程中要經(jīng)過(guò)B,B收到這個(gè)報(bào)文后要先解密再加密,加密完了之后再發(fā)給下一跳。由于所有的中間節(jié)點(diǎn)都要參與解密和重新加密的過(guò)程,所以所有的節(jié)點(diǎn)都必須使用相同的Network Key。
路由器節(jié)點(diǎn)需要解密該消息,然后對(duì)其進(jìn)行加密,然后替換安全標(biāo)頭中的信息,再將其發(fā)送出去。如果解密失敗,該消息將立即被丟棄。這樣的好處是可以盡快丟棄攻擊消息。
3、Network Key
Network Key是一個(gè)16字節(jié)的八位位組。通常,它是在網(wǎng)絡(luò)創(chuàng)建時(shí)由協(xié)調(diào)器隨機(jī)生成的。當(dāng)新設(shè)備加入網(wǎng)絡(luò)時(shí),它們必須獲得Network Key的副本。
在ZigBee網(wǎng)絡(luò)中,將Network Key分發(fā)給新設(shè)備的角色稱(chēng)為T(mén)rust Center。有兩種典型的安全模型,即集中式安全網(wǎng)絡(luò)和分布式安全網(wǎng)絡(luò)。
在集中式安全網(wǎng)絡(luò)中,只有一個(gè)TrustCenter,通常是協(xié)調(diào)器。所有新設(shè)備將從協(xié)調(diào)器獲取Network Key。
在分布式安全網(wǎng)絡(luò)中,沒(méi)有一個(gè)固定的Truster Center,也就是說(shuō)每個(gè)路由器都是一個(gè)Trust Center。新設(shè)備可以從每個(gè)路由器父節(jié)點(diǎn)那里獲取Network Key。
DistributedSecurity Model目前主要就是在飛利浦的Touch Link上在使用。ZigBee 3.0中最主要的還是Centralized Security Model的模式。
由于需要將Network Key從一個(gè)設(shè)備傳輸?shù)搅硪慌_(tái)設(shè)備,因此在傳輸過(guò)程中需要對(duì)密鑰值進(jìn)行加密。此加密在應(yīng)用程序?qū)又型瓿?。我們稍后再討論?/p>
1.5 網(wǎng)絡(luò)建立與組網(wǎng)
1.5.1 創(chuàng)建網(wǎng)絡(luò)
首先,由協(xié)調(diào)器創(chuàng)建一個(gè)網(wǎng)絡(luò),您必須準(zhǔn)備4個(gè)參數(shù):
(1)PAN ID
(2)擴(kuò)展 PAN ID
(3)工作頻道
(4)發(fā)射功率
您需要指定這四個(gè)參數(shù)。如果您不這樣做,協(xié)調(diào)器將隨機(jī)選擇一個(gè)PAN ID和一個(gè)擴(kuò)展的PAN ID。如果您未指定頻道,則協(xié)調(diào)器將掃描并選擇一個(gè)相對(duì)安靜的頻道進(jìn)行工作。
1.5.2 加入網(wǎng)絡(luò)
1、使用Well-KnownLink Key加入
網(wǎng)絡(luò)創(chuàng)建后,新設(shè)備可以開(kāi)始加入。
(1)新設(shè)備將開(kāi)始查找可連接的網(wǎng)絡(luò)。在此階段,新設(shè)備不知道可加入的網(wǎng)絡(luò)處于哪個(gè)信道,所以它將通過(guò)掃描的方式來(lái)發(fā)現(xiàn)可加入的網(wǎng)絡(luò)。它將在每個(gè)信道上都發(fā)送Beacon Request,等待一會(huì)兒如果沒(méi)有回應(yīng)的話,就跳到下一個(gè)信道繼續(xù)發(fā)BeaconRequest。
(2)路由器和協(xié)調(diào)器將使用Beacon中攜帶的網(wǎng)絡(luò)信息來(lái)響應(yīng)Beacon Request。這些信息包括PAN ID,擴(kuò)展PAN ID以及路由器或協(xié)調(diào)器的其他一些屬性,例如設(shè)備是否允許連接,設(shè)備是否具有允許新設(shè)備連接的能力。
(3)新設(shè)備可以從不同設(shè)備接收多個(gè)Beacon。它將選擇信號(hào)質(zhì)量最好的一個(gè),并開(kāi)始發(fā)送Association Request。在該Association Request中,將PAN ID設(shè)置為所選的PAN,并將目標(biāo)節(jié)點(diǎn)ID設(shè)置為所選設(shè)備的節(jié)點(diǎn)ID。在這個(gè)報(bào)文里面,將會(huì)攜帶這個(gè)新設(shè)備的設(shè)備類(lèi)型等信息。
(4)當(dāng)路由器或協(xié)調(diào)器收到此AssociationRequest時(shí),它將為新設(shè)備選擇一個(gè)節(jié)點(diǎn)ID,并以AssociationResponse進(jìn)行響應(yīng)。然后,新設(shè)備獲得了其N(xiāo)ode ID,但由于未獲得Network Key而無(wú)法與其他節(jié)點(diǎn)通信。
(5)協(xié)調(diào)器會(huì)將當(dāng)前的Network Key傳輸?shù)叫略O(shè)備。該傳輸消息在應(yīng)用程序?qū)又惺褂肳ell-Known Link Key加密。
(6)當(dāng)新設(shè)備收到此消息時(shí),它將使用Well-KnownLink Key對(duì)消息解密并獲取Network Key。之后,該設(shè)備實(shí)際上已加入網(wǎng)絡(luò),并能夠與網(wǎng)絡(luò)中的所有其他節(jié)點(diǎn)通信。
(7)設(shè)備將發(fā)送一條DeviceAnnounce,以通知網(wǎng)絡(luò)的其他節(jié)點(diǎn),以通知他們我已加入。
2、使用Install CodeDerived Link Key加入
(1)在出廠之前,應(yīng)該已經(jīng)將InstallCode燒錄到新設(shè)備里面了。
(2)在加入之前,用戶需要獲取新設(shè)備的InstallCode和Eui64,然后在協(xié)調(diào)器上對(duì)其進(jìn)行配置。
(3)然后,協(xié)調(diào)器從InstallCode中獲取Link Key,并將協(xié)調(diào)器設(shè)置為使用此LinkKey來(lái)加密此新設(shè)備的傳輸Network Key消息。
(4)當(dāng)協(xié)調(diào)器開(kāi)始將NetworkKey傳輸?shù)叫略O(shè)備時(shí),它將對(duì)消息使用Install Code Derived Link Key進(jìn)行加密并將其傳輸?shù)叫略O(shè)備。
(5)當(dāng)新設(shè)備收到此消息時(shí),它將從閃存中讀取Install Code并計(jì)算得出應(yīng)和協(xié)調(diào)器端相同的Link Key,然后使用此密鑰對(duì)消息進(jìn)行解密并獲取Network Key。
其余過(guò)程類(lèi)似于使用Well-Known Link Key進(jìn)行組網(wǎng)的過(guò)程。
-
ZigBee
+關(guān)注
關(guān)注
158文章
2270瀏覽量
242794 -
通信模型
+關(guān)注
關(guān)注
0文章
10瀏覽量
7821 -
EndPoint
+關(guān)注
關(guān)注
0文章
3瀏覽量
2149
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論