查看: 21322|回复: 13

葵花宝典--ZigBee Wireless Networks and Transceivers中文版,第三章(3.6节)

[复制链接]
wwh199169 发表于 2011-10-30 17:52:42 | 显示全部楼层 |阅读模式
本帖最后由 wwh199169 于 2011-10-30 18:01 编辑

本节Word文档见上一帖:http://www.feibit.com/bbs/viewthread.php?tid=3423&extra=page%3D1
3.6  安全服务
无线网络中,被发送的消息会被人和附近的ZigBee设备所接收。尽管在非常简单的应用中安全问题不足为虑,但在其它应用中入侵设备监听消息或篡改并重发消息,会造成诸如侵犯他人隐私或者关闭系统运行之类的问题。以员工跟踪系统为例,如果未经授权人员获得员工的确切位置,员工的隐私则随时会被侵犯。为了避免此类问题,ZigBee标准支持加密和认证协议的使用,详见本节。

3.6.1  加密(Encryption)
加密是一种采用替代和交换顺序的手段来修改消息的操作。ZigBee标准支持使用高级加密标准(AES)[7]。图3.53显示了加密的基本概念。消息发送者使用在发送前使用一种运算法则对消息进行加密,并且只目标接收者知道如何恢复原始消息。未加密消息被称为明文(plaintext)。被加密的消息被称作密文(ciphertext)。如果加密操作在一段数据上,该运算法则即被称为分组密码(block cipher)。ZigBee使用一个128位的分组密码。加密和解密消息行为称为密码使用法(cryptography)。

AES算法中,每个加密运算法则都与一个密钥相关联。法则本身就是一个任何人可获知的公开知识,但每次传送中密钥的值是秘密保留的。密钥是二进制数字。有几种不同的方法可以获取安全密钥。例如,密钥可由制造商嵌入设备本身。或者,加入网络的新设备可从网络中某个指定的设备获得其安全密钥。详细的获取安全密钥的几种不同方法将在本节继续讨论。
密钥中位的数量决定了安全等级。如果密钥只有8位,入侵者需要尝试最多28=256次不同的密钥来恢复原始消息。ZigBee支持使用128位的密钥,这意味着有2128(≈3,4x1038)可能的密钥。尝试2128种不同的密钥在计算上是不可行的。
图3.53中,接收者使用与发送者完全相同的密钥来执行解密,该方法被称作对称密钥法(symmetric key)。ZigBee标准仅支持对称密钥方式。ZigBee标准提供了建立密钥和在两个或更多设备之间共享密钥的方法。考虑到运算法则本身即被潜在入侵者所获知,主要任务就是确保密钥不会泄露到目标接收者之外。
安全通信使用两种密钥类型:链接密钥(link key)和网络密钥(network key)。链接密钥在两个设备之间共享,并能用在单播通信中。网络密钥在整个网络中被共享,当消息为广播时被使用。任何安全的ZigBee网络拥有一个指定的被称为信托中心(trust center)的设备,它为其它设备分配链接密钥和网络密钥。ZigBee协调器通过设置AIB属性apsTrustCenterAddress来决定信托中心的地址。
AES算法自身是一系列优化定义的步骤,这些步骤使用提供的密钥转换并混合数据段,以便创建出同一数据段的加密版本。AES中,该数据段的长度总是128位的。但是密钥可能为128,196或256位。ZigBee标准使用128位这一项。所有这些步骤是可反转的,拥有正确密钥的接收者可以执行这些反转步骤来恢复原始消息。AES已被国家标准与技术协会(NIST)[7]宣布为一种标准。据国家安全系统委员会称,AES算法的设计和强度甚至足以保护达到SECRET级别的机密信息。
获取链接密钥有三种方式:预加载(preinstallation),密钥传输(key transport)和密钥制定(key establishment)。预加载方法中,制造商在设备自身嵌入密钥。例如,DIP开关会被用以从预编程的密钥组中选择其一。通过这种方法,当设备加入网络时,无需向信托中心请求安全密钥。在许多应用中,这是最为安全的获取密钥途径。若使用密钥传输方式,设备向信托中心请求密钥。这一请求使用用一条APS子层命令以被发送至信托中心(详见本节下文)。信托中心可能以一种非安全的链接向请求设备发送密钥。在该方式下,如果这种无保护的传送被入侵设备所接收,则系统会在某一时段易受攻击。解决办法是使用一种密钥传输密钥,它被用来保障任何密钥从信托中心到请求设备的传输安全,而不仅仅是万能密钥(master key)的安全。
密钥制定是指不通过无保护的无线连接传送密钥,而是在两个设备上创建随机密钥。ZigBee的密钥制定服务基于对称密钥密钥制定协议(SKKE)[3]。建立密钥的设备事先有了一个被称为万能密钥(master key)的公共密钥。万能密钥通过预加载,密钥传输或用户输入数据(如密码)的方式提供给设备。万能密钥必须在运行密钥制定协议之前被加载到每个设备上。密钥加载密钥(key-load key)是一种用来在网络中从信托中心传送万能密钥到设备的专用密钥。密钥制定只是用以获取链接密钥而非产生网络密钥。
SKKE协议中有两类设备,启动设备(initiator device)和应答设备(responder device)。启动设备使用可用的万能密钥来建立连接,并传送某一指定数据到应答设备。应答设备使用该数据以获取链接密钥。启动设备也会从同一数据中获得链接密钥。如果获取正确,两种设备就拥有了相同的可用于对称密钥密码运算的链接密钥。SKKE详见ZigBee规范[3]。
在ZigBee无线网络中实现安全特性的主要限制之一是有限的资源。节点主要由电池供电,且计算能力和内存容量有限。ZigBee致力于低成本应用,节点硬件或许无抗干扰措施。如果入侵者从一个无抗干扰措施的网络中劫持了某个节点,则其只要从该设备的内存中就可以获得真实密钥。抗干扰的节点如果检测到干扰,能够删除包括安全密钥在内的敏感信息。
信托中心有两种运行模式:商业模式(commercial mode)和家居模式(residential mode)。商业模式下,信托中心必须保存一个列表,其中包含有设备、万能密钥、链接密钥和网络密钥。所有输入的NWK帧都要检查其新旧。若其非重复帧,则被认为是新帧。商业模式下的信托中心所要求的内存容量随网络中设备数量的增长而增加。相反,家居模式是为低安全度的家居应用而设计的。家居模式下,信托中心唯一需要保存的密钥就是网络密钥。保存设备和其他安全密钥的列表作为可选项,也无须检查所有NWK帧的新旧。该模式下,信托中心所要求的内存容量也不随设备数量而增加。
在ZigBee网络中,每个协议层(APS,NWK及MAC)负责由其所初始化的帧的安全性。考虑到所有的协议栈层都位于同一节点中,简便起见,在一个节点中APS、NWK和MAC层所使用的安全密钥是相同的。

3.6.2  验证
ZigBee标准支持设备验证和数据认证。设备验证是确认加入网络的新设备是否可信。该新设备必须能够接收网络密钥,并能在给定时间内设置适当的属性,才能被认为是可信的。在数据验证中,接收者核对数据本身是否已被篡改。

3.6.2.1  设备验证
设备验证过程由信托中心执行。当设备加入一个安全的网络时,其处于“joined, but unauthenticated.”(已加入,但尚未经验证)状态。若信托中心不打算验证该新加入设备,它会请求将其移除网络。
商业模式和家居模式下的验证过程有所不同。家居模式下,若加入网络的新设备没有网络密钥,信托中心需要通过一种无保护的链接发送网络密钥,这会引起暂时的易受攻击。若该新设备已有了网络密钥,它必须等待以从信托中心那里接收一个傀儡网络密钥(全为0),这是验证过程中的一步。新设备不知道信托中心的地址,它使用该接收消息中的源地址在它的APS信息库(apsTrustCenterAddress)设置信托中心的地址。至此家居模式下的该新加入设备就被认为经过了验证。
相反地,商业模式中的信托中心不会经由无保护的链接向新加入设备发送网络密钥。但如果新设备没有与信托中心共享的万能密钥,该模式下万能密钥可能会被不安全的发送出去。新设备接收到万能密钥后,信托中心和新设备启动密钥制定协议。新设备要在一个受限的时间(apsSecurityTimeOutPeriod)内与信托中心建立一个链接密钥。如果新设备在超时前未能完成密钥定制,则其必须离开网络,然后重试连接和验证过程。当心的链接密钥被认证,信托中心会通过安全的连接向新设备发送网络密钥。至此,商业模式下的新加入设备才被认为经过了验证。

3.6.2.2  数据验证
数据验证的目的在于确保数据在传输中不被篡改。为此,发送者在帧中加入一种被称为消息完善编码(MIC)的特定编码。MIC有一种能够接受着和发送者都知道的方式所产生。未经验证的设备无法创建此MIC。该帧的接收者会重复相同的步骤,且若接收者计算出的MIC与发送者所提供的MIC相一致,数据就会被认为经过了验证。数据的验证等级随MIC中的位数增加而增加。ZigBee和IEEE 802.15.4标准支持32位、64位和128位的MIC可选项。
数据可靠性不同于数据机密性。在机密数据的传输中,数据在传送前被加密,因此只有期望的接收者能恢复该数据。机密数据可能会被加入MIC,但不是必须的。期望的无MIC机密数据接收者确信该数据尚未被入侵者恢复过,但可能在传输过程中被篡改。另一方面,数据可能未经加密地被传送,但却被加入了MIC。这种情况下,数据虽非机密,但其可靠性会得到证实。
MIC也称为消息验证码(MAC)或验证标签。ZigBee和IEEE 802.15.4标准文件使用MIC替代MAC以避免MAC与媒体访问控制(Medium Access Control)之间的相互混淆。ZigBee中的MIC由增强的密码段链接消息验证编码协议计数器(CCM*)产生。CCM*被设定与128位的AES联合使用,且与其共享同一安全密钥。
图3.54显示了AES-CCM*在数据验证和机密性中所扮演的角色。在发送者一端,128位数据格式的明文进入AES-CCM*。AES-CCM*的职能是加密该数据并产生相关联的MIC,此MIC与该帧一起被发送至接收者。接收者使用AES-CCM*来解密数据,并从接收到的帧中产生自己的MIC,以便与接收到的MIC相比较。CCM*被作为一种融合了加密和数据验证的操作模式。CCM*则只提供加密和完善功能。

在图3.54中,AES-CCM*有三个输入:数据自身,安全密钥和临时数(nonce)。临时数是一种使用安全控制,帧计数器和辅助帧头的源地址域所构造的13位8进制字符串。辅助帧头域和CCM*临时数见于图3.55。AES-CCM*使用临时书作为算法的一部分。使用相同安全密钥的两个不同消息的临时数的值从不会一样,因为每当新帧被传送时,帧计数器就会被加1。临时数的使用保证了接收帧的更新。使用临时数的目的在于,使得无安全密钥的入侵者能够就收到受保护的消息,却只能在一段时间后重发完全相同的消息。这条重发的消息会保有有效消息全部的正确安全特性,但帧计数器会显示出该帧之前已被接收过。这样,帧计数器就有助于识别并阻止重复帧的处理。这就叫帧的新旧检测。如果入侵设备在重发该帧前篡改了与其相关连的帧计数器,接收设备在比较计算所得的和接收到的MIC时,会察觉到这一未授权的改动(图3.54)。
3.3.5.1.1小节讨论的循环冗余校验(CRC),有助于识别接收帧中的错误。CRC只被设计用以探测接收数据中的偶然错误,且其可被任何入侵者所再现。MIC相对于CRC则提供了更强有力的可靠性保障。产生自CCM*的MIC能同时探测有意且未经授权的数据篡改和偶然的错误。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| wwh199169 发表于 2011-10-30 17:58:21 | 显示全部楼层
本帖最后由 wwh199169 于 2011-10-30 18:00 编辑

回复 1# wwh199169


3.6.3  辅助帧头格式(The Auxiliary Frame Header Format)
帧的安全特性可在附加到发送帧的可选辅助帧头里加以识别。图3.55说明了辅助帧头的格式。安全等级子域定义了表3.14所列的8个专用安全选项。如果安全等级设置为000,则数据不会被加密,且无MIC会被加入发送帧。除000和100外的所有安全等级都会加入MIC以供数据验证。MIC的长度可为32位、64位或128位。表3.14中的M值取决于8进制的MIC长度。数据加密只有一个表征密钥长度(128位)的选项。如果安全属性包含ENC,则表明数据已被加密。简便起见,网络中的所有设备都有着相同的安全等级。如果某个特殊的设备需要更高的安全等级,则其必须在适当的等级下创建自己的网络。

图3.54中的密钥标识符子域指明用以保护帧的密钥类型。源地址域属于可选域,其只在扩展的临时数子域被置为1时才会被包含。帧计数器表征了帧的新旧,且每当一个新帧被发送时就会被加1。密钥序列号仅在网络密钥被用来保障帧的安全时才会呈现。源地址、帧计数器和辅助帧头的安全控制域之间的结合创建了CCM*临时数,这个CCM*协议所使用的输入数据被用在被验证的加密操作中。
图3.56显示出帧安全性可被添加在APS、NWK和MAC层中。每一层的安全性设置都在其相对应的信息库(IB)中作为属性被储存。在每一层中,CCM*提供了加密了的载荷和MIC。MIC提供对载荷、辅助帧头以及安全性生效了的层的层头的验证性检验。例如,若帧只在APS子层被保护,则APS层头被用作产生MIC的输入数据,而NWK层头和MAC层头不包含在内。安全性的原始数据,如密钥、帧计数器和安全等级被存储在一个访问控制列表(ACL)中。该ACL被用以阻止未经验证的设备加入网络。ACL被存储在MAC PAN信息库(PIB)中,可像其它MAC属性一样可被访问和修改。


3.6.4  APS子层安全命令
表3.51列出了ZigBee-2006的APS安全命令。这些命令的帧格式见于图3.57。前四条命令用在SKKE协议中。启动者和应答者地址是指参与密钥定制的两种设备的地址。SKKE协议请回顾ZigBee规范[3]。传送密钥命令运送真实密钥到网络中的某个设备。该命令所能运送的密钥类型有4种。信托中心万能密钥(trust center master key)是被用来在信托中心和网络中任意其他之间设备建立链接密钥的一种密钥。与某个密钥相关联的密钥描述(key descriptor)包含了万能密钥本身,目的地址和源地址。网络密钥(network key)密钥描述包含了目的地址和源地址,以及一个序列号。万能密钥申请(application master key)被用来在两个设备之间建立链接密钥。万能密钥申请和链接密钥的密钥描述包括密钥接收者的地址和一个标志。在该帧接收者请求了密钥的情况下该标志被置为1。

设备更新命令(update device)改变网络中的设备状态。有三种状态选项:设备连接安全,设备连接不安全,或设备已离开网络。移除设备命令(remove device)要求移除网络中的某个子设备。请求密钥命令(request key)被用来请求一个特定的密钥。该密钥类型域和传送密钥命令的相似。协同地址域(partner address field)只在链接密钥申请被发送的情况下才会出现。一旦链接密钥申请被请求,信托中心就会就会发送密钥给启动该密钥申请的设备,同时也发送协同地址域提供的地址。转换密钥命令(switch key)被用以激活设备中的网络密钥。该密钥由一个序列号来识别。
在ZigBee-Pro版本中,除了表3.51所示的命令外还有5条命令。这些附加命令中的四条被用在实体验证(Entity Authentication)中,该验证允许两个设备相互验证。第五条附加命令允许一个设备发送命令到另一个缺少当前网络密钥的设备。详见ZigBee规范文档[3]。


3.6.5  安全攻击示例
本节介绍了两个AES-CCM*协议可能存在的安全缺陷示例:相同临时数攻击和服务拒绝攻击。
当临时数被用作AES-CCM*的一部分时,加密同一明文两次会出现两种不同的密文,因为即使同一个密钥被重用,临时数也不会相同。这一特性叫做语义安全性(semantic security)。若由于某种原因,若ACL为两个连续的消息提供了相同的临时数和相同的密钥,则偷听者就可以恢复明文中的部分信息。这被称为“相同临时数攻击”。例如,若用于产生两段密文的临时数和密钥都相同,则这两段密文的XOR就会和与其相对应的明文的XOR完全一样[9]。
相同临时数攻击可能发生的情况之一是,电源失效导致的ACL被清空[9]。若最后一个临时数状态在电源失效后未知,系统可能会重设临时数状态为一个默认数值。若使用电源失效前已被使用的密钥,则该重设操作增加了重用同一个临时数的可能性,进而导致相同临时数攻击缺陷。在一个非易失性内存(NVM)中存储临时数状态,并在电源失效后加以恢复,是避免系统由于电源实效而遭受相同临时数攻击的方法之一。
服务拒绝(DoS)攻击引起节点丢弃所有接收到的消息[9]。即便传送的消息已被加密,系统也会在消息完善性未经检验的情况下存在DoS攻击缺陷。攻击者虚构一条包含随机内容的消息作为加密载荷(其并未获知安全密钥),并设置帧计数器为最大值。该消息被入侵者发送到接收设备。消息接收设备会将该载荷解密为一条随机明文,次明文可能对下一个较高的层无任何意义。这种攻击的主要危害在于把帧计数器设置为了最大值。接收到的帧计数器一直被用以设置另一帧计数器的顶点,而另一计数器是与经授权的该帧创建者相关联的。通过设置帧计数器的顶点为最大值,任何在DoS攻击之后到达的合法帧都会被接收设备自动丢弃,因为如果假设接收到的帧是重复的,则已接收消息的帧计数器就会小于DoS攻击所设立的顶点值。使消息可靠性生效有助于阻止DoS攻击。

3.6.6  安全服务总结
ZigBee标准支持使用下列可选安全服务:
●  数据机密性加密
    ●  设备和数据验证
●  重现(即重复的帧)保护
5种不同的密钥可用于安全网络中:
●  链接密钥(link key)在两个设备之间共享,且可用于单播通信
    ●  网络密钥(network key)在整个网络中被共享,且可用于消息的广播
●  万能密钥(master key)用于在两个设备之间创建作为蜜月创建协议一部分的链接密钥
●  密钥传送密钥(key-transport key)用以确保除万能密钥外任何密钥从信托中心到请求设备的安全传输
●  密钥加载密钥(key-load key)用于确保万能密钥的安全传输

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
cfqz11234 发表于 2011-11-7 15:55:00 | 显示全部楼层
LZ,能继续更新不呵呵
nich2010 发表于 2011-12-4 10:43:12 | 显示全部楼层
内容翔实,谢谢
630722 发表于 2012-2-5 14:22:40 | 显示全部楼层
楼主 不更新了吗?
sentmail 发表于 2012-3-7 16:27:58 | 显示全部楼层
十分感谢,新手学习中
bq402 发表于 2012-4-12 15:14:05 | 显示全部楼层
已经下载学习了。楼主辛苦了!
yjwpm 发表于 2012-8-13 16:38:32 | 显示全部楼层
十分感谢,新手学习中
lizheng86312 发表于 2012-8-29 11:57:14 | 显示全部楼层
学到东西了。顶。。。
linjiawei 发表于 2012-10-9 09:22:41 | 显示全部楼层
非常感谢呀!如果有应用实例介绍一下就好了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表