ZigBee3.0安全探究ZigBee3.0ZigBee已经成为低功耗、低数据传输率无线网络的领先标准之一。ZigBee3.0在现有ZigBee标准的基础上构建,旨在帮助最终用户更加轻松地选择、设置和操作产品。ZigBeeStandardSecurity在ZigBee协议栈架构中,安全是一个非常重要的关注点。StandardSecurity是所有的ZigBee应用规范都使用的安全模型,包括ZigBee3.0。StandardSecurity分别使用NetworkKey和LinkKey在网络层和APS层加密数据。APS层安全允许TrustCenter来安全传输NetworkKey给加入节点或拒绝节点加入,并且它允许应用来增加可选的安全加密消息。网络层安全用来保证所有的ZigBee网络中发送消息的安全性。StandardSecurity不包括MAC层的通信(比如association,数据请求polling,MACACKs)。DifferentKeysinStandardSecurityStandardSecurity定义了不同类型的Keys,使用不同的方式来保证数据的安全。所有的Keys都是用128位对称密钥(AES-128)来解密和加密数据包。NetworkKeyNetworkKey用来保证网络层的安全传输。所有StandardSecurity网络中的设备都会对NetworkKey进行备份。TrustCenter可以周期性的更新NetworkKey。TrustCenter通过两种方式进行更新:广播更新或单播更新。在广播更新的情况下,TrustCenter首先广播新的NetworkKey,此时使用旧的NetworkKey来对广播消息进行加密。在单播更新的情况下,TrustCenter发送新的NetworkKey给每一个设备,此时使用TrustCenterLinkKey来对其进行加密。当新的NetworkKey发送给各网络节点之后,TrustCenter再发送一条转换命令告诉所有的设备转换为新的NetworkKey。新NetworkKey对应一个序列码,这个序列码在旧的NetworkKey序列码基础上加1。•所有的ZigBee相关的Key的长度都是128Bit。•所有加入安全网络中的设备都拥有一个对NetworkKey的备份。TrustCenterLinkKeyTrustCenterLinkKey用于两个节点(其中有一个节点是Trustcenter)之间的端到端的安全通信。在以下情况下使用TrustCenterLinkKey:当节点初次加入网络时,需加密传输NetworkKey到加入节点。当NetworkKey更新时,有些节点因未接收到新的NetworkKey,因此需要Rejoin。此时,TrustCenter使用TrustCenterLinkKey加密NetworkKey发送给该重新入网节点。路由器向发送给TrustCenter,或从TrustCenter接收APS安全消息时,需要使用TrustCenterLinkKey。比如路由器发送节点加入或Rejoin的更新给TrustCenter时,或由TrustCenter发送到路由器以执行一些安全功能的命令时,需要使用TrustCenterLinkKey。启用APS加密的应用程序单播消息,其中发送或接收设备是TrustCenter。由TrustCenter决定如何管理TrustCenterLinkKey的选项。它可以为每个设备选择唯一的密钥(从设备的IEEE地址导出的密钥),或者对于所有的设备采用相同的全局密钥。InstallationCodeKeysZigBee3.0支持InstallationCodeKey,在之前只用于SmartEnergyNetwork(智能能源网络),SmartEnergyNetwork必须使用installcode。现在所有ZigBee3.0认证设备都需要支持installcode,但是由Trustcenter决定是否在网络中使用。Installcode用来预配置TrustCenterLinkKey,其用于加入ZigBee网络时对NetworkKey的传输进行加密。在进入网络时,加入设备和TrustCenter都必须知道这个唯一的密钥,所以installcode用于在两端导出密钥。Installcode可以是6,8,12或16字节的任意值,再末尾加上这些字节的16位CRC(最低有效字节优先)。Installcode用作Matyas-Meyer-Oseas(MMO)Hash散列函数的输入,其散列长度等于128位。该AES-MMO哈希函数的128位(16字节)结果就是用作该设备的预配置TrustCenterLinkKey的值,并且TrustCenter可以安装密钥表条目(该密钥和加入设备的EUI64),其然后允许在加入网络期间成功地进行认证,加入设备可以成功地接收和解密NetworkKey。作为此过程的一部分,Installcode和加入设备的EUI64必须在带外传送(目标ZigBee之外网络,因为新节点尚未加入)到网络的TrustCenter。JoiningaNetwork设备加入ZigBeeStandardSecurity网络时,首先向父节点发送MAC关联请求。如果关联成功,则设备处于已加入但未认证状态,此时它不具有NetworkKey。父节点给设备发送MAC关联成功的响应之后,再向TrustCenter发送更新设备消息,指示新节点希望加入ZigBee网络。然后由TrustCenter决定是否允许设备加入。如果不允许设备加入,则向父节点发送移除设备(Removedevice)请求。如果允许该设备加入,TrustCenter则向父节点发送NetworkKey,TrustCenter的行为取决于设备是否具有预配置的TrustCenterLinkKey。PreconfiguredLinkKeysTrustCenter规定了如何处理新设备和确定设备是否应该具有PreconfiguredLinkKey。如果新设备没有PreconfiguredLinkKey,它将无法加入网络。TrustCenter可以选择该密钥是DefaultglobalLinkKey(ZigBeeAlliance09)还是installationcode。下图说明了使用PreconfiguredLinkKey的加入网络的过程。为了允许设备加入到网络,TrustCenter发送NetworkKey(使用PreconfiguredLinkKey加密)给父节点。ZigBee3.0和所有ZigBee应用程序配置文件需要PreconfiguredLinkKey才能加入。PreconfiguredLinkKeysorInstallationCodeTrustCenter是使用Well-KnownKey(例如ZigBeeAlliance09)还是InstallationCode,取决于易用性和安全性之间的平衡。使用Well-KnownKey使设备能够更容易地加入网络,而无需大量的用户交互。然而,Well-KnownKey加密NetworkKey提供了一个脆弱的时刻,直到该Well-KnownKey被替换为新的密钥。使用InstallationCode为NetworkKey到设备的初始交换提供了安全性,代价是用户和TrustCenter之间增加了交互。用户必须以某种方式将密钥从设备传输到TrustCenter。这是通过ZigBee网络之外的机制来完成,例如从列出加入设备上的代码的标签将代码输入到TrustCenterGUI中;在加入设备上运行的主应用程序。在网络上运行的主要应用程序将帮助决定是否易于使用与更好的安全性谁更重要。JoiningaZigBee3.0NetworkZigBee3.0设备成功加入网络后,设备需要请求更新的TrustCenterLinkKey以替换它们现有的PreconfiguredLinkKey。即使使用Installationcode的设备,也将替换成新的TrustCenterLinkKey。下图说明了ZigBee3.0设备如何更新TrustCenterLinkKey。只有在TrustCenter和加入设备都支持ZigBee3.0的情况下,才能更新TrustCenterLinkKey。如果其中一个不是ZigBee3.0设备,则保留原始的PreconfiguredLinkKey。如果是一个ZigBee3.0网络,将会更新替换默认的TrustCenterLinkKey相同一个已经入网的设备重新Rejoin网络,使用之前更新后的LinkKey。由于不使用众所周知的PreconfiguredLinkKey,更好保护了ZigBee3.0的安全性。ZigBee3.0设备在加入网络后,需要在EEPROM中保存更新后的LinkKeyB,用于后续重新入网。如果在开发、测试过程中擦除了整个EEPROM内容,将会导致设备无法重新入网。