zigbee加密技术

  ZigBee安全和加密 

作者:wxl  发布时间:2009-05-22  已阅读:283次

 
在ZigBee技术中,采用对称密钥的安全机制,密钥由网络层和应用层根据实际应用需要生成,并对其进行管理、存储、传送和更新等。 
 

安全机制由安全服务提供层提供。然而值得注意的是,系统的整体安全性是在模板级定义的,这意味着模板应该定义某一特定网络中应该实现何种类型的安全。 
 

每一层(MAC、网络或应用层)都能被保护,为了降低存储要求,它们可以分享安全钥匙。SSP是通过ZD0进行初始化和配置的,要求实现高级加密标准(AES)。ZigBee规范定义了信任中心的用途。信任中心是在网络中分配安全钥匙的一种令人信任的设备。 
 

大部分ZigBee解决方案将需要某种级别的安全性。ZigBee提供了一套基于128位AES算法的安全类和软件,并集成了802.15.4的安全元素。ZigBee协议栈类为MAC、网络和应用层定义了安全性。它的安全服务包括针对关键进程建立和传输、设备管理和框架保护的方法。 
 

如果开发人员选择使用一个公共的ZigBee类,那么就已经为其应用做出了安全决策,因为在该类中已经对安全性进行了预定义。即使开发人员打算创建一个专有类的应用,他仍可以在若干个ZigBee预定义的栈类中挑选一种安全模式。 
 

在这个层上,开发人员需要决定这样一些问题:是否需要对数据帧的载荷进行加密,以及附着在数据帧末尾的认证码长度(8、16或64位,等等)。基本的应用也许不需要认证,因而可以受益于一个较小的数据包载荷。这些数据完整性方面的选项使得开发人员可以在消息保护和额外开销之间进行权衡。 
 

开发人员还必须决定在哪个层上施加安全机制:在MAC层、网络层还是应用层。如果应用需要尽可能强大的安全保护,那么就在应用层保护它。此处实施的安全措施采用了一个会话密钥,它只能被另一个拥有该钥匙的设备所认证和解密。这种方法既能防止内部攻击也能防止外部攻击,但需要更多的存储器来实现它。 
 

在MAC层和网络层的安全性实质上服务于相同的目的:确保单跳传输的安全。MAC层仲裁对共享媒介的访问并控制相邻设备之间的单跳传输。ZigBee联盟添加了一个网络层安全选项以便加入在MAC层无法实现的功能,包括拒绝不能被验证的数据帧的能力。这两个安全层采用的是该网络上所有ZigBee设备都共享的全局密钥。MAC层和网络层的安全性适合需要防止对特定基础设施攻击的应用,例如防止一个非法设备恶意侵入网络。如果开发人员需要在两个设备之间建立路由,而该网络层的框架又是不安全的,那么非法设备可能会截取数据包。 
 

设备在ZigBee安全模式下工作时,可能使用安全方案。安全方案由一组在MAC层的帧上所执行的操作组成,以提供安全服务。安全方案的名称表明对称加密算法、模式和完整性码的长度。对于ZigBee技术标准中的所有安全方案,将使用的是高级加密标准(AES)算法。每一个实现安全的设备都将支持AES-CCM-64安全方案,并且可附加或者不附加其它安全方案,第一个安全方案都由一个字节表示。 
 

ZigBee技术规定的安全方案将使用以下几种方法: 
 

位顺序、串接、整数编码和计时器增加、计数模式(CTR)加密、密码链块-信息鉴权码(CBC-MAC)验证、计数模式和密码链块-信息鉴权码(CCM)的加密和验证、高级加密标准(AES)加密、个域网信息库(PIB)的安全要素。 
 

下面我们来看看什么是AES高级加密标准。 
 

AES的全称是Advanced Encryption Standard,即高级加密标准。该项目由美国国家标准技术研究所(NIST)于1997年开始启动并征集算法,在2000年确定采用Rijndael作为其最终算法,并于2001年被美国商务部部长批准为新的联邦信息加密标准(FIPS PUB 197)。
FIPS PUB 197中说明该标准的正式生效日期是2002年5月26日。该标准将被NIST每5年重新评估一次。 
 

AES采用的Rijndael算法的设计者是Joan Daemen(Proton World Int.l)和Vincent Rijmen(Katholieke Universiteit Leuven, ESAT-COSIC),算法的名字来自两人名字中字母的组合。Rijndael是一个对称的分组加密算法,分组长度和密钥长度都可变,可分别单独指定为128比特,192比特和256比特。但AES中的数据分组长度只采用了Rijndael中的128比特,而不使用192和256比特,密钥长度和Rijndael的一致,也分别为128比特,192比特和256比特,并分别被称为AES-128,AES-192,AES-256。 
 

AES和传统的分组密码算法不同的是它不采用Feistel结构(比如DES中采用的),而是采用了三个不同的可逆一致变换层:线性混合层、非线性层、密钥加层。 
 

70年代的数据加密标准(DES)加密。在安全领域,一个协议的生命周期这样长一般来说是件好事。但是,在数据加密标准的案例中,由于其瑕疵将多次重复地显示出来,这样长的生命期并不是件好事。 
 

它的后续标准来得太晚了。这些瑕疵是各种类型的攻击利用的基本的安全漏洞,其较短的密码长度意味着蛮力攻击可以在很短的时间内奏效。 
 

高级加密标准算法从很多方面解决了这些令人担忧的问题。实际上,攻击数据加密标准的那些手段对于高级加密标准算法本身并没有效果。如果采用真正的128位加密技术甚至256位加密技术,蛮力攻击要取得成功需要耗费相当长的时间。 
 

虽然高级加密标准也有不足的一面,但是,它仍是一个相对新的协议。因此,安全研究人员还没有那么多的时间对这种加密方法进行破解试验。我们可能会随时发现一种全新的攻击手段会攻破这种高级加密标准。至少在理论上存在这种可能性。 
 

当你考虑性能需求的时候,高级加密标准具有理论上的优势,因为这种算法效率更高,特别是与3DES加密标准相比更是如此。然而,需要指出的是,在这种协议应用的早期阶段,在硬件中对这种加密算法的支持还没有像硬件支持老式的3DES算法那样成熟。因此,你可能会发现在某些平台上,3DES在数据吞吐量方面仍比AES-256速度快。在有些平台上,AES-256的速度快一些。正如你怀疑的那样,AES-128总是比AES-256速度快一些。在对各类厂商的市场营销材料进行了快速调查之后发现,数据吞吐量的差别通常在10%至30%之间。 
 

所以同以往一样,各个机构采用这个新标准的合适的时间都是不同的。一些机构认为,额外的安全功能值得牺牲一点性能。有些机构需要做好预算才能购买新的支持高级加密标准的硬件产品。要记住,升级将会提高性能。在任何情况下,你在选择一个产品之前都要做好充分的准备。 

===========================================

===============================================

 

文章发表于:2008-09-09 09:33

 

Zigbee2006的加密算法实现

作者:hxl

关键字:无线龙c51RF-3-pk,AES,z-stack,zigbee2006

软硬件准备:

1.         无线龙Zigbee开发工具               C51RF-3-PK

2.         IAR集成开发工具                    IAR-EW51-7.20H 或IAR-EW51-7.30B

3.         zigbee2006协议栈(无线龙验证版)    Z-stack1.4.2或1.4.3(TI网站下载)

 

Z-stack对Zigbee2006提供了全面的支持,功能之强大,性能稳定、安全性高,说到安全性是我们今天的主题。CC2430硬件支持128bit的AES加密算法,在协议栈中为了避开相同设备的干扰,和防止被其他设备监听,我们就采用这个技术将数据加密来提高数据的安全性。

AESThe Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128192  256 位密钥,并且用128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。要了解更多请参阅http://blog.csdn.net/guo2777/archive/2007/09/19/1791399.aspx 该博主使用C#完成了加密的模拟而且有很详细的阐述。

在Z-stack中采用的是128bit的加密,首先需要一个128bit的key,这个KEY不同,加密出来的内容也不同在Z-stack中是通过DEFAULT_KEY="{0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0D}"这种方式来定义的。

在Z-stack中已经在协议栈中实现了这个加密算法,如果需要使用直接开启这个服务就可以了,下面我们主要将Z-stack的加密算法的开启。

我使用的z-stack的版本是1.4.3,这个版本功能更完善,而且编程的方式已经和以前的版本有很大的不同,他的风格更加接近于Zigbee pro。

Z-stack1.4.3加密算法的功能开启方法:

1.将f8wConfig.cfg文件中设置为-DSECURE=1,这句话的意思是SECURE=1,这个变量在协议栈中作为if语句的条件使用,条件为真的语句中就是开启加密算法的函数。所以要使用第一步是要将这个参数设置为1。

2.将ZGlobals.c中的uint8 zgPreConfigKeys = FLASE;修改为uint8 zgPreConfigKeys = TRUE;

3.准备一个key,这个可以在函数nwk_global.c中修改:

CONST byte defaultKey[SEC_KEY_LEN] =

{

#if defined ( APP_TP ) || defined ( APP_TP2 )

  // Key for ZigBee Conformance Testing

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  0x89, 0x67, 0x45, 0x23, 0x01, 0xEF, 0xCD, 0xAB

#else

  // Key for In-House Testing

  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,

  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F

#endif

};

到这里整个加密过程已经结束了,值得注意的是,如果使用了加密算法后,网络中所有的设备都需要开启这个算法,而且各个设备中的key必须相同。否则后果是很严重的,这会导致你的网络不能正常通讯,因为没有加密的数据或者相同key加密,这些数据网络是不认识的,根本就不会传到网络层。

加密算法开启以后,如果你需要修改代码,就必须改变你的key,或者是擦除一次你的flash,否则会出现不可逾期的错误,而且没有规律。通常的做法是擦除flash一次,这样可以保证和整个网络的key相同。

好了,做个测试吧,分别对一个协调器和一个路由器加密,并构成网络,并使用协调器广播数据,如果顺利的话,他们可以正常通讯了,然后你改变一下key,然后在写一个路由器,会出现什么结果呢?你会发现,key不同的路由器根本接收不到协调器广播的数据,路由器发送的数据网络也无法接收。然后再用协议分析仪查看一下,发现监听的数据和发送的数据根本就不同,因为我们加了密。

你可能感兴趣的:(zigbee加密技术)