0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Zigbee 3.0基礎(chǔ)02

汽車電子技術(shù) ? 來源:滑小稽筆記 ? 作者: 電子技術(shù)園地 ? 2023-03-01 14:17 ? 次閱讀

1.3 Clusters

在每個Endpoint中,我們可以配置幾個Clusters。ZigBee Cluster實(shí)際上是一種通信模型。它基于客戶端/服務(wù)器模式,用于描述兩個設(shè)備之間的應(yīng)用協(xié)議。每個Cluster都有一個Cluster ID,該ID在ZigBeeCLuster Library(ZCL)中定義。Cluster中可以定義多個屬性和命令。

例如,我們需要實(shí)現(xiàn)一個帶有兩個燈泡的燈。我們可以在其中定義兩個Endpoint。每個Endpoint代表一個燈泡。

圖片

對于基本功能,例如打開/關(guān)閉,我們可以使用打開/關(guān)閉 Cluster。燈是服務(wù)器端,而開關(guān)是客戶端。服務(wù)器端定義了一個屬性“ on / off”,指示燈是打開還是關(guān)閉。還定義了諸如“打開”,“關(guān)閉”,“切換”之類的命令,這些命令應(yīng)從客戶端發(fā)送到服務(wù)器端。

圖片

如果我們需要更多功能,例如我們需要支持亮度級別控制。我們可以使用亮度級別控制Cluster。在此Cluster中,服務(wù)器端定義了一個屬性“Level”,指示燈泡的亮度。還定義了諸如“逐漸變化亮度級別”之類的命令,這些命令應(yīng)從客戶端發(fā)送到服務(wù)器端。

圖片

而且,如果我們需要更多功能,例如需要支持顏色控制,則可以使用顏色控制Cluster。對于ZCL規(guī)范中沒有定義的一些功能,開發(fā)者可以添加一些自定義的Cluster,自己去定義屬性、命令等,就成了一個私有的協(xié)議。

1.4 安全加密

1.4.1 安全威脅

由于ZigBee是一種無線技術(shù),因此安全性非常重要,因?yàn)?a href="http://www.ttokpm.com/v/tag/10353/" target="_blank">黑客可以通過無線檢測到這些數(shù)據(jù)包。想象您有一個智能門鎖。如果黑客捕獲了打開您的門的數(shù)據(jù)包,那么他可以重發(fā)該文件以打開您的門。這是很危險的。

(1) 偽造 :比如黑客捕獲到無線報文,進(jìn)行篡改之后,偽造一個假的報文,再發(fā)送到這個ZigBee網(wǎng)絡(luò)中,從而去控制網(wǎng)絡(luò)里的設(shè)備;

(2) 重播 :捕獲到這個報文后,不進(jìn)行編輯,直接重新播放一下,

為了防止這種情況發(fā)生,ZigBee定義了許多安全功能。下面將會做簡要介紹。

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ù)載來計(jì)算哈希值。最后,將32位哈希值附加到幀的末尾。如果更改了網(wǎng)絡(luò)標(biāo)頭,安全標(biāo)頭和加密的有效負(fù)載中的任何字節(jié),則哈希值將不同。我們將此值稱為MIC(mandatory integrity control),是消息完整性檢查的縮寫。

2、加密算法

圖片

APS層和網(wǎng)絡(luò)層的兩個加密環(huán)節(jié)使用的都是AES128對稱加密算法,這意味著需要使用相同的密鑰進(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)來自同一節(jié)點(diǎn)的下一條消息的FrameCounter必須大于記錄的Frame Counter值。如果此次的Frame Counter比上一次的小或者相等,該消息都將被視為重發(fā)并將被丟棄;

(3)由于資源有限,接收方只保存所有鄰居的Frame Counter。

由于Frame Counter是一個32位值,因此如果設(shè)備長時間保持運(yùn)行狀態(tài),它可能會自動溢出。顯然,如果幀計(jì)數(shù)器被覆蓋,可能會出現(xiàn)問題。為防止這種情況發(fā)生,必須在溢出之前更新Network Key。如果更新了Network Key,幀計(jì)數(shù)器則可以再次從零開始。對于End Device來說,它通常只需要保存其父節(jié)點(diǎn)的Frame Counter即可。

1.4.3 APS層安全

在APS層用來加密的密鑰被稱為Link key。在ZigBee網(wǎng)絡(luò)中,雖然APS層和網(wǎng)絡(luò)層都有加密,但是絕大部分通信都只是在網(wǎng)絡(luò)層的加密。一般來說,只有在傳輸NetworkKey的時候需要在應(yīng)用層被加密,并且這僅在Trust Center和新設(shè)備之間發(fā)生。因此,在這種情況下,我們也將其稱為Trust Center Link key。

新設(shè)備和Trust Center之間必須要在組網(wǎng)之前就使用哪一個Link Key達(dá)成共識,所以新設(shè)備和Trust Center之間是不需要一個Link Key的傳輸過程的。

網(wǎng)絡(luò)中的設(shè)備可以使用相同的Linkkey或不同的Link key,只要新設(shè)備和TrustCenter之間達(dá)成共識即可。

一般來說有四種Link Key,但是我們以前兩種為主。后兩種目前可能用得很少了,這里僅作簡要描述,不做深入探討。

(1)DefaultGlobal Trust Center Link Key又被稱為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 ”。這個是在ZigBee 3.0之前就一直在廣泛使用的一個相同的默認(rèn)的密鑰,如今得以保留主要是為了保持向后的兼容性。

所有的ZigBee設(shè)備都會有這個Default Global Trust Center Link Key。如果沒有指定其他的link key的話,Default Global Trust Center LinkKey就是設(shè)備在入網(wǎng)過程中第一個被嘗試使用的密鑰。

如果希望能保證和其他的ZigBee3.0的設(shè)備之間互聯(lián)互通的話,這個密鑰是不能改變的。

(2)Install CodeDerived Preconfigured Link Key

圖片

Install Code并不是一個Key,而是一個Key的輸入。InstallCode是16字節(jié)多項(xiàng)式+ 2字節(jié)CRC,再通過固定的算法,計(jì)算可以得出Link Key。這種Link Key的傳輸是由人工來完成的,Install Code的實(shí)際應(yīng)用場景如下圖所示:

圖片

首先,在產(chǎn)品生產(chǎn)的時候,由廠家在產(chǎn)線隨機(jī)生成一個Install Code;

●然后將這個Install Code燒錄到產(chǎn)品里面;

●然后把這個Install Code和Eui64打到標(biāo)簽上面,貼在這個產(chǎn)品表面;

●在安裝的時候,安裝人員利用手持設(shè)備的掃描功能,從產(chǎn)品標(biāo)簽上掃描獲取InstallCode和Eui64;

●將獲取到的Install Code和Eui64告訴Trust Center(一般是協(xié)調(diào)器);

●然后在Trust Center上通過這個Install Code得到Link Ley,讓Trust Center知道IEEE地址為Eui64的這個新設(shè)備必須使用這個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)行通信。接下來就開始組網(wǎng)的過程了。

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中,沒有Trust Center,每個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)互通的話,這個密鑰是不能改變的。

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è)備是要通過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、總覽

該密鑰稱為Network Key。由于它是一種對稱加密算法,因此同一ZigBee網(wǎng)絡(luò)中的所有設(shè)備都將使用相同的Network Key。

在網(wǎng)絡(luò)安全標(biāo)頭中,添加了“幀計(jì)數(shù)器”的字段和加密信息節(jié)點(diǎn)的源Eui64,以防止重發(fā)攻擊。還添加了密鑰序列號以支持Network Key更新。

2、逐跳安全

APS層的安全性,是端到端安全性。在APS層,是節(jié)點(diǎn)A加密好了之后一直得等到達(dá)目的地(節(jié)點(diǎn)C)之后才去解密。這中間的加密/解密密鑰(Link Key)只要A和C兩個知道,B不知道這個密鑰,不能去進(jìn)行加密解密,所以B不關(guān)心通信的內(nèi)容。在這種情況下,我們可以有很多的Link Key,只要通信的雙方知道即可。

網(wǎng)絡(luò)層的安全性,是逐跳安全性。A加密好了在發(fā)給C的過程中要經(jīng)過B,B收到這個報文后要先解密再加密,加密完了之后再發(fā)給下一跳。由于所有的中間節(jié)點(diǎn)都要參與解密和重新加密的過程,所以所有的節(jié)點(diǎn)都必須使用相同的Network Key。

路由器節(jié)點(diǎn)需要解密該消息,然后對其進(jìn)行加密,然后替換安全標(biāo)頭中的信息,再將其發(fā)送出去。如果解密失敗,該消息將立即被丟棄。這樣的好處是可以盡快丟棄攻擊消息。

3、Network Key

Network Key是一個16字節(jié)的八位位組。通常,它是在網(wǎng)絡(luò)創(chuàng)建時由協(xié)調(diào)器隨機(jī)生成的。當(dāng)新設(shè)備加入網(wǎng)絡(luò)時,它們必須獲得Network Key的副本。

在ZigBee網(wǎng)絡(luò)中,將Network Key分發(fā)給新設(shè)備的角色稱為Trust Center。有兩種典型的安全模型,即集中式安全網(wǎng)絡(luò)和分布式安全網(wǎng)絡(luò)。

圖片

在集中式安全網(wǎng)絡(luò)中,只有一個TrustCenter,通常是協(xié)調(diào)器。所有新設(shè)備將從協(xié)調(diào)器獲取Network Key。

在分布式安全網(wǎng)絡(luò)中,沒有一個固定的Truster Center,也就是說每個路由器都是一個Trust Center。新設(shè)備可以從每個路由器父節(jié)點(diǎn)那里獲取Network Key。

DistributedSecurity Model目前主要就是在飛利浦的Touch Link上在使用。ZigBee 3.0中最主要的還是Centralized Security Model的模式。

由于需要將Network Key從一個設(shè)備傳輸?shù)搅硪慌_設(shè)備,因此在傳輸過程中需要對密鑰值進(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)建一個網(wǎng)絡(luò),您必須準(zhǔn)備4個參數(shù)

(1)PAN ID

(2)擴(kuò)展 PAN ID

(3)工作頻道

(4)發(fā)射功率

您需要指定這四個參數(shù)。如果您不這樣做,協(xié)調(diào)器將隨機(jī)選擇一個PAN ID和一個擴(kuò)展的PAN ID。如果您未指定頻道,則協(xié)調(diào)器將掃描并選擇一個相對安靜的頻道進(jìn)行工作。

1.5.2 加入網(wǎng)絡(luò)

1、使用Well-KnownLink Key加入

圖片

網(wǎng)絡(luò)創(chuàng)建后,新設(shè)備可以開始加入。

(1)新設(shè)備將開始查找可連接的網(wǎng)絡(luò)。在此階段,新設(shè)備不知道可加入的網(wǎng)絡(luò)處于哪個信道,所以它將通過掃描的方式來發(fā)現(xiàn)可加入的網(wǎng)絡(luò)。它將在每個信道上都發(fā)送Beacon Request,等待一會兒如果沒有回應(yīng)的話,就跳到下一個信道繼續(xù)發(fā)BeaconRequest。

(2)路由器和協(xié)調(diào)器將使用Beacon中攜帶的網(wǎng)絡(luò)信息來響應(yīng)Beacon Request。這些信息包括PAN ID,擴(kuò)展PAN ID以及路由器或協(xié)調(diào)器的其他一些屬性,例如設(shè)備是否允許連接,設(shè)備是否具有允許新設(shè)備連接的能力。

(3)新設(shè)備可以從不同設(shè)備接收多個Beacon。它將選擇信號質(zhì)量最好的一個,并開始發(fā)送Association Request。在該Association Request中,將PAN ID設(shè)置為所選的PAN,并將目標(biāo)節(jié)點(diǎn)ID設(shè)置為所選設(shè)備的節(jié)點(diǎn)ID。在這個報文里面,將會攜帶這個新設(shè)備的設(shè)備類型等信息。

(4)當(dāng)路由器或協(xié)調(diào)器收到此AssociationRequest時,它將為新設(shè)備選擇一個節(jié)點(diǎn)ID,并以AssociationResponse進(jìn)行響應(yīng)。然后,新設(shè)備獲得了其Node ID,但由于未獲得Network Key而無法與其他節(jié)點(diǎn)通信。

(5)協(xié)調(diào)器會將當(dāng)前的Network Key傳輸?shù)叫略O(shè)備。該傳輸消息在應(yīng)用程序?qū)又惺褂肳ell-Known Link Key加密。

(6)當(dāng)新設(shè)備收到此消息時,它將使用Well-KnownLink Key對消息解密并獲取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)器上對其進(jìn)行配置。

(3)然后,協(xié)調(diào)器從InstallCode中獲取Link Key,并將協(xié)調(diào)器設(shè)置為使用此LinkKey來加密此新設(shè)備的傳輸Network Key消息。

(4)當(dāng)協(xié)調(diào)器開始將NetworkKey傳輸?shù)叫略O(shè)備時,它將對消息使用Install Code Derived Link Key進(jìn)行加密并將其傳輸?shù)叫略O(shè)備。

(5)當(dāng)新設(shè)備收到此消息時,它將從閃存中讀取Install Code并計(jì)算得出應(yīng)和協(xié)調(diào)器端相同的Link Key,然后使用此密鑰對消息進(jìn)行解密并獲取Network Key。

其余過程類似于使用Well-Known Link Key進(jìn)行組網(wǎng)的過程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ZigBee
    +關(guān)注

    關(guān)注

    158

    文章

    2262

    瀏覽量

    242111
  • 通信模型
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    7801
  • EndPoint
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    2127
收藏 人收藏

    評論

    相關(guān)推薦

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-02 技術(shù)原理和基本概念-1

    ZigBee
    水管工
    發(fā)布于 :2022年10月23日 13:49:39

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-02 技術(shù)原理和基本概念-2

    ZigBee
    水管工
    發(fā)布于 :2022年10月23日 13:50:00

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-02 技術(shù)原理和基本概念-3

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 13:50:20

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-09 基于AF單播發(fā)送數(shù)據(jù)-1

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 13:57:54

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-09 基于AF單播發(fā)送數(shù)據(jù)-3

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 13:58:36

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-09 基于AF單播發(fā)送數(shù)據(jù)-4

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 13:58:58

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-09 基于AF單播發(fā)送數(shù)據(jù)-5

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 13:59:21

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-11 基于AF組播發(fā)送數(shù)據(jù)-2

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 14:01:08

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-13 ZCL基本原理講解-1

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 14:02:58

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-13 ZCL基本原理講解-3

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 14:03:38

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-14 ZCL命令收發(fā)控制和獲取地址-2

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 14:04:25

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-14 ZCL命令收發(fā)控制和獲取地址-3

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 14:04:49

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-14 ZCL命令收發(fā)控制和獲取地址-4

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 14:05:12

    #硬聲創(chuàng)作季 #ZigBee ZigBee3.0-14 ZCL命令收發(fā)控制和獲取地址-5

    ZigBeeZigBee3.0
    水管工
    發(fā)布于 :2022年10月23日 14:05:36

    ZigBee3.0數(shù)據(jù)包解析

    ZigBee3.0ZigBee聯(lián)盟推出的可以互聯(lián)互通的標(biāo)準(zhǔn)協(xié)議,用之前的Packet Sniffer抓包工具是無法解析ZigBee3.0的數(shù)據(jù)包,因ZigBee3.0的安全機(jī)制所有的
    發(fā)表于 02-28 11:48 ?2568次閱讀
    <b class='flag-5'>ZigBee3.0</b>數(shù)據(jù)包解析