|
本帖最后由 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
|