【XBEE手冊】ZigBee安全
@(ZigBee)[ZigBee, XBEE手冊]
[轉載
請註明出處,謝謝!]
安全模式
Zigbee標準級支持三種安全模式:家居級(residental),標準級(standard)和高級安全性(high security)。
- 家居級安全性要求在設備之間共享網絡密鑰。
- 標準級安全性在家居級安全性方面增加了許多可選的安全增強功能,包括APS層鏈接密鑰。
- 高級安全性增加了實體身份驗證和許多其他未得到廣泛支持的功能。
XBee ZB模塊主要支持標準級安全性,但支持家居級安全的終端設備可以加入標準級安全設備並與之互操作。本節重點介紹與標準級安全性相關的材料。
Zigbee安全模型
Zigbee安全性應用於NWK層(網絡層)和APS層。數據包使用128位AES加密進行加密。網絡密鑰和可選鏈接密鑰可用於加密數據。只有具有相同密鑰的設備才能在網絡中一起通信。將在安全網絡上通信的路由器和終端設備必須獲取正確的安全密鑰。
網絡層安全性
網絡密鑰用於加密APS層和應用程序數據。除了加密應用程序消息之外,網絡安全性還應用於路由請求和回覆消息,APS命令和ZDO命令。網絡加密不應用於諸如信標傳輸的MAC層傳輸。如果在網絡上啓用安全性,則使用網絡密鑰加密所有數據包。
幀計數
加密包的網絡頭包括32位幀計數。網絡中的每個設備都維護一個32位幀計數,該計數器針每次傳輸遞增一次。此外,設備跟蹤每個鄰居最後已知的32位幀計數。如果設備從鄰居接收到包,這個包的幀計數比之前的要小,則丟棄該包。該設備使用幀計數來防止重放攻擊(replay attack)。
注意
重放攻擊(Replay Attacks)又稱重播攻擊、回放攻擊,是指攻擊者發送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。重放攻擊可以由發起者,也可以由攔截並重發該數據的敵方進行。攻擊者利用網絡監聽或者其他方式盜取認證憑據,之後再把它重新發給認證服務器。重放攻擊在任何網絡通過程中都可能發生,是計算機世界黑客常用的攻擊方式之一。
如果幀計數達到最大值0xFFFFFFFF,則它不會轉換到0並且不能再發送任何傳輸。由於幀計數的大小,達到最大值對於大多數應用來說並不常見。下表顯示了幀計數達到其最大值所需的時間。
平均傳輸率 | 直到32位幀計數到期的時間 |
---|---|
1次/秒 | 136年 |
10次/秒 | 13.6年 |
要在不影響安全性的情況下清除幀計數,可以更改網絡中的網絡密鑰。更新網絡密鑰後,所有設備上的幀計數將重置爲0.有關詳細信息,請參閱網絡密鑰更新。
消息完整性代碼(Message integrity code)
網絡標頭,APS標頭和應用程序數據均使用128位AES進行身份驗證。設備在這些字段上執行散列(hash),並作爲4字節消息完整性代碼(MIC)附加到數據包的末尾。MIC使接收設備可以確保消息未被更改。MIC在Zigbee安全模型中提供消息完整性。如果設備收到數據包並且MIC與設備自己的數據哈希值不匹配,則會丟棄數據包。
網絡層加密和解密
具有網絡層加密的數據包由路由中的每個躍點加密和解密。當設備收到帶有網絡加密的數據包時,它會對數據包進行解密並對數據包進行身份驗證。如果設備不是目的地,則它使用網絡頭部分中自己的幀計數和源地址對數據包進行加密和驗證。
由於設備在每一跳都執行網絡加密,因此加密網絡中的數據包延遲比非加密網絡中的數據包延遲略長。此外,安全性需要18個字節的開銷來包括32位幀計數,8字節源地址,4字節MIC和2個其他字節。這減少了可以在數據包中發送的有效負載字節數。
網絡密鑰更新
Zigbee支持用於更改網絡中的網絡密鑰的機制。更改網絡密鑰後,所有設備中的幀計數將重置爲0。
APS層安全性
APS層安全性使用源和目標設備之間共享的密鑰加密應用程序數據。在網絡層安全性應用於所有數據傳輸並且逐跳解密和重新加密的情況下,APS安全性是可選的,並且使用僅由源和目標設備知道的APS鏈路密鑰來提供端到端安全性。APS安全性不能應用於廣播傳輸。
如果啓用APS安全性,則APS標頭和數據有效負載將使用128位AES進行身份驗證,如下圖所示:
消息完整性代碼
如果啓用APS安全性,則使用128位AES對APS標頭和數據有效負載進行身份驗證。設備在這些字段上執行散列(hash),並作爲4字節消息完整性代碼(MIC)附加到數據包的末尾。該MIC與網絡層附加的MIC不同。MIC允許目標設備確保消息未被更改。如果目標設備收到數據包且MIC與目標設備自己的數據哈希值不匹配,則會丟棄該數據包。
APS鏈接密鑰
有兩種APS鏈接密鑰:信任中心鏈接密鑰和應用程序鏈接密鑰。在設備和信任中心之間建立信任中心鏈路密鑰,在網絡中設備與設備之間建立應用鏈路密鑰,其中兩個設備都不是信任中心。
APS層加密和解密
具有APS層加密的數據包在源處加密,並且僅由目標解密。由於APS加密需要5字節標頭和4字節MIC,因此當使用APS加密時,最大數據有效負載減少9個字節。
網絡層和APS層加密
網絡和APS層加密都可以應用於數據。下圖演示了在應用兩者時對最終Zigbee數據包執行的身份驗證和加密。
信任中心
Zigbee定義了一個信任中心設備,負責驗證加入網絡的設備。信任中心還管理網絡中的鏈路密鑰分發。
啓動或加入安全網絡
協調器負責選擇網絡加密密鑰。此密鑰可以預先配置或隨機選擇。此外,協調器通常作爲信任中心運行,並且必須選擇信任中心鏈路密鑰。信任中心鏈接密鑰也可以預先配置或隨機選擇。
加入網絡的設備必須在加入時獲取網絡密鑰。當設備加入安全網絡時,可以將網絡密鑰和鏈接密鑰發送到加入設備。如果加入設備具有預先配置的信任中心鏈接密鑰,則網絡密鑰將被髮送到由鏈接密鑰加密的加入設備。否則,如果加入設備沒有預配置鏈接密鑰,則設備只能在未加密發送網絡密鑰時加入網絡(“明文”)。
信任中心必須決定是否將未加密的網絡密鑰發送到未預先配置鏈接密鑰的加入設備。我們不建議發送未加密的網絡密鑰,因爲它可能會在網絡中打開安全漏洞。要最大限度地提高安全性,請使用正確的鏈接密鑰預配置設備。
在XBee / XBee-PRO Zigbee RF模塊上實現安全性
如果在XBee Zigbee固件中啓用安全性,則設備在加入網絡時會獲取網絡密鑰。數據傳輸始終使用網絡密鑰加密,並且可以選擇使用APS鏈接密鑰進行端到端(end-to-end)加密。
啓用安全性
要在設備上啓用安全性,必須將加密啓用(Encryption Enable,EE)參數設置爲1.當參數值更改時,XBee模塊將離開其正在運作的網絡(PAN ID和通道)並嘗試啓動或加入新的網絡。
如果將EE設置爲1,則使用網絡密鑰加密所有數據傳輸。啓用安全性時,單個RF傳輸中的最大字節數將減少。有關更多信息,請參閱NP(最大數據包有效負載字節數)。
注意
在一個網絡中所有設備的EE參數必須是設置相同的。應使用WR命令將對EE命令的更改寫入非易失性存儲器(將保留設置直到重啓電源或重置)。
設置網絡安全密鑰
協調器使用NK(Network Encryption Key,網絡加密密鑰)參數(只寫)選擇網絡的網絡安全密鑰(Network security key)。如果NK = 0(默認值),協調器將選擇隨機網絡密鑰。否則,將NK設置爲非零值,它將此值用作網絡安全密鑰。
NK僅受協調器支持。啓用安全性(EE = 1)的路由器和終端設備在加入網絡時獲取網絡密鑰。如果它們與協調器共享預配置的鏈接密鑰,則它們接收使用鏈接密鑰加密的網絡密鑰。
注意在Zigbee中,如果EE和EO設置爲0x01,則設備在關聯時以明文(未加密)發送帶有鏈接密鑰的網絡密鑰。這在開發環境中可能是一個有用的設置,但出於安全原因,我們不鼓勵它進行產品部署。
設置APS信任中心鏈接密鑰
協調器還必須使用KY(Link Key,鏈接密鑰)選擇信任中心鏈接密鑰。如果KY = 0(默認值),協調器將選擇隨機信任中心鏈接密鑰(不推薦)。否則,如果KY設置爲大於0,則設備將此值用作預配置的信任中心鏈接密鑰。KY是隻寫的,無法讀取。
注意
Zigbee固件不支持在未包含協調器的兩個設備之間發送的應用程序鏈接密鑰。
隨機信任中心鏈接密鑰
如果協調器選擇隨機信任中心鏈路密鑰(KY = 0,默認),則它允許設備加入網絡而無需預先配置的鏈路密鑰。但是,這會將未加密的網絡密鑰通過空中發送到加入設備,不建議這樣做。
預配置的信任中心鏈接密鑰
如果協調器使用預先配置的鏈接密鑰(KY > 0),則它不會將未加密的網絡密鑰發送到加入設備。只有具有正確預配置鏈接密鑰的設備才能在加入並在網絡上通信。
啓用APS加密
APS加密是一個可選的安全層,它使用鏈接密鑰加密數據有效負載。與逐跳解密和加密的網絡加密不同,APS加密僅由目標設備解密。必須將XBee / XBee-PRO Zigbee RF模塊配置爲啓用安全性(EE設置爲1)以使用APS加密。
在API固件中可以基於每個數據包啓用APS加密。要爲給定傳輸啓用APS加密,請在API傳輸幀中設置“啓用APS加密”傳輸選項位。啓用APS加密會將最大有效負載大小減少9個字節。
使用信任中心
使用加密選項(Encryption Options,EO)參數將協調器定義爲信任中心。如果協調器是信任中心,則它會收到網絡中所有新連接嘗試的警報。信任中心還可以更新或更改網絡上的網絡密鑰。
在ZB固件中,用戶可以建立具有或不具有信任中心的安全網絡。無論用戶是否使用信任中心,都支持網絡層和APS層加密。
使用信任中心更新網絡密鑰。
如果信任中心已啓動網絡並且NK值發生更改,則協調器將更新網絡中所有設備上的網絡密鑰。對NK的更改不會強制設備離開網絡。網絡繼續在相同的信道和PAN ID上運行,但網絡中的設備會更新其網絡密鑰,增加其網絡密鑰序列號,並將其幀計數恢復爲0。
在沒有信任中心的情況下更新網絡密鑰。
如果協調器未作爲信任中心運行,則可以使用網絡重置(**NR**1)命令強制網絡中的所有設備離開當前網絡並在另一個通道上重新加入網絡。設備離開並改造網絡後,幀計數被重置爲0. 這種方式即協調器啓動其餘設備應該加入的新網絡。以這種方式重置網絡會使網絡中的協調器和路由器停機大約十秒鐘,並導致16位PAN ID和設備的16位地址發生變化。
安全示例
本節介紹了一些XBee設備配置示例,以支持不同的安全模式,並列出了幾個帶有建議參數值的AT命令。
在AT命令模式下,發出的每個命令需使用前綴“AT”並去掉“=”符號:例如,**EE**1。在API中,在命令字段中使用雙字節命令,並且在參數字段中將參數填充爲二進制值。
示例1
:形成具有安全性的網絡(預配置的鏈接密鑰)
1.使用以下設置啓動協調器:
a. ID = 2234(任意選擇)
b, EE = 1
c. NK = 0
d. KY = 4455
e. WR(保存網絡參數並保持它們直到重啓電源)
2.使用以下設置配置一個或多個路由器或終端設備:
a. ID = 2234
b. EE = 1
c. KY = 4455
d. WR(保存網絡參數並保持它們直到重啓電源)
3.讀取協調器和加入設備上的AI設置,直到它們返回0(成功啓動或加入網絡的標誌)。
此示例在所有設備上設置EE,ID和KY命令相同。在成功加入安全網絡之後,網絡密鑰加密所有應用程序數據傳輸。由於NK在協調器上設置爲0,因此設備選擇隨機網絡密鑰。由於鏈接密鑰(KY)在所有設備上配置爲非零值,因此預配置的鏈接密鑰(KY)會在設備加入時發送加密的網絡密鑰。
示例2
:形成具有安全性的網絡(在加入期間獲取密鑰)
1.使用以下設置啓動協調器:
a. ID = 2235
b. EE = 1
c. NK = 0
d. KY = 0
e. WR(保存網絡參數以通過電源循環保持)
2.使用以下設置配置一個或多個路由器或終端設備:
a. ID = 2235
b. EE = 1
c. KY = 0
d. WR(保存網絡參數以通過電源循環保持)
3.讀取協調器和加入設備上的AI設置,直到它們返回0(成功啓動或加入網絡的標誌)。
此示例在所有設備上設置EE,ID和KY命令相同。由於NK在協調器上設置爲0,因此設備選擇隨機網絡密鑰。由於KY在所有設備上都設置爲0,因此當設備加入時,網絡密鑰以未加密的方式發送(“明文”)。
注意
此方法會在網絡中引入安全漏洞,不建議這樣做。