原创 Zigbee2006的加密算法实现

2008-9-10 08:48 4079 6 6 分类: 通信

Zigbee2006的加密算法实现<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


作者:hxl


关键字:无线龙c51rf-3-pkAESz-stackzigbee2006


软硬件准备:


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


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


3.         zigbee2006协议栈(无线龙验证版)    Z-stack<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1.4.21.4.3TI网站下载)


 


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


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的加密,首先需要一个128bitkey,这个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不同的路由器根本接收不到协调器广播的数据,路由器发送的数据网络也无法接收。然后再用协议分析仪查看一下,发现监听的数据和发送的数据根本就不同,因为我们加了密。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /3 下一条