1. 程式人生 > >ZigBee Network Key & Trust Center Link Key等

ZigBee Network Key & Trust Center Link Key等

ZigBee中各種用於加密的Key理解

文章涉及到的變數和函式均可在Z-Stack-3.0.2中找到。

1. Network Key
在Z-Stack中就是其實就是DEFAULT_KEY,128位,用來保證網路層的安全傳輸。所有ZigBee網路中的裝置都會對Network Key進行備份。Trust Center可以週期性的更新Network Key,如果設定為0,那麼將由Coordinator生成一個隨機值,通過APSME_TransportKeyReq()傳輸給入網的裝置,如果變數zgPreConfigKeys為false,那麼傳送的就是生成的隨機值或者不為0的值,如果變數zgPreConfigKeys為true,DEFAULT_KEY必須不為0,否則Coordinator生成的值和其他裝置的值不一樣,導致不能通訊,兩個變數的組合:

a、DEFAULT_KEY為0,zgPreConfigKeys為false:Network Key由Coordinator生成並傳送給入網的裝置;

b、DEFAULT_KEY不為0,zgPreConfigKeys為true,每個裝置的DEFAULT_KEY和zgPreConfigKeys都必須一樣,那麼入網時Coordinator傳送的Network Key為0(流程不可缺,但傳到裝置端後被丟棄,因為已經有了預設的Network Key)。

2. Trust Center Link Key
Trust Center Link Key,預設值為:5A 69 67 42 65 65 41 6C 6C 69 61 6E 63 65 30 39 (ZigBeeAlliance09),用於集中式網路的加密傳輸,在Z-Stack中,如果需要使用Trust Center Link Key 加密傳輸,那麼需要新增TC_LINKKEY_JOIN這個巨集,在以下情況下使用Trust Center Link Key:

a、當節點初次加入網路時,需加密傳輸Network Key到加入節點。

b、當Network Key更新時,有些節點因未接收到新的Network Key,因此需要Rejoin。此時,Trust Center使用Trust Center Link Key加密 Network Key傳送給該重新入網節點。

c、路由器傳送給Trust Center,或從Trust Center接收APS安全訊息時,需要使用Trust Center Link Key。比如路由器傳送節點加入或Rejoin的更新給Trust Center時,或由Trust Center傳送到路由器以執行一些安全功能的命令時, 需要使用Trust Center Link Key。

d、啟用APS加密的應用程式單播訊息,其中傳送或接收裝置是Trust Center。

由Trust Center決定如何管理Trust Center Link Key的選項。它可以為每個裝置選擇唯一的金鑰 (從裝置的IEEE地址匯出的金鑰),或者對於所有的裝置採用相同的全域性金鑰。
如果不使用預設的Link Key那麼標準裝置是加不進這個網路的。

3. Distributed security global link key
和Trust Center Link Key一樣,只不過不是用在集中式網路而是用在分散式網路。

4. Install code link key
所有終端裝置的Install code link key(128位)可以不同,用於生成Link Key,這個生成的Link Key和Trust Center Link Key的全域性性(所有裝置)不一樣,取決於Install code link key。

所以如果採用不同的Install code link key,那麼在裝置端和Trust Center需要設定一樣的Install code link key,現在能實現這種方式入網的最佳方法應該是掃碼入網,出廠時給每個裝置貼一個二維碼,入網時通過手機掃碼將獲取的Install code link key傳送到Trust Center。

5. Application link key
用於兩個裝置之間的應用層加密。

6. Device Specific trust center link key
裝置專用trust center link key,只能用於Trust Center和某個裝置,應該也可以將所有裝置的Device Specific trust center link key設定為一樣。

注意:
ZigBee 3.0中,無論是使用 Preconfigured Trust Center Link Key還是Install code link key,裝置入網後都需要更新 Trust center link key,而且這個新的Key是唯一的,在Z-Stack-3.0.2中這個Key生成的程式碼如下:

//Generate key from the seed, which would be the unique key
ZDSecMgrGenerateKeyFromSeed(TCLKDevEntry.extAddr,TCLKDevEntry.SeedShift_IcIndex,req.key);

更新失敗則退出網路,如下圖所示:
Request key failed更新Key的流程如下圖:
update link key