zigbeeAES加密实验

更新时间:2024-06-11 20:35:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

4.8对网络传输内容用AES加密

AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。AES是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16 字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。

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

4.8.1 实验目的与器材

1)实验目的

本实验将利用Z-Stack2007协议栈构建一个简单的无线传感网络,对网络上传输的数据用AES进行加密,并且通过抓包软件对加密之前和之后的数据进行分析对比。 2)实验器材

? 3个CC2530开发模块(1个终端节点,1个协调器,1个抓包节点);

4.8.2 实验原理与步骤

本实验以SensorDemo为实例程序,说明如何对传输的数据进行AES加密。 1)实验原理

AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16 字节)分组加密和解密数据。Z-STACK中采用的是128bit的加密方式,并且在协议栈中实现了AES加密算法。因此,如果需要对数据进行加密,仅需要在协议栈的配置文件中提供一个密钥,并且使能AES加密即可。通过观察发现,加密后数据的长度和原始数据的长度是相关的。例如,当原始数据长度为1~15字节时,加密后的数据所对应的长度相同;当原始数据长度为16~31字节时,加密后的数据所对应的长度相同,以此类推。 2)实验步骤 1.创建密钥

Z-STACK协议栈在配置文件f8wConfig.cfg定义了密钥:

/* Default security key. */

-DDEFAULT_KEY=\0x06, 0x08, 0x0A, 0x0C, 0x0D}\

所以用户只需要修改-DDEFAULT_KEY的值就可以定义自己使用的密钥。 2. 将ZGlobals.c 中的uint8 zgPreConfigKeys = FLASE;修改为TRUE;

如果这个值为真,那么默认的密钥必须在每个节点程序的配置文件中配置。如果这个值为假,那么默认的密钥只需配置到协调器设备当中,并且通过协调器节点发送给其他的节点。

// If true, preConfigKey should be configured on all devices on the network // If false, it is configured only on the coordinator and sent to other // devices upon joining.

uint8 zgPreConfigKeys = TRUE;

3. 将f8wConfig.cfg 文件中设置为-DSECURE=1使能AES加密

/* Set to 0 for no security, otherwise non-0 */ -DSECURE=1

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

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

4.8.3 实验结果

为了能截取到经过AES加密过的网络传输内容,下面需要三个节点进行实验:一个协调器,一个终端,一个抓包。下面为网络抓包后的结果,网络传输内容为“Y”,其十六进制表示为“59”。

由于加密过程仅作用在各层的“有效数据段”中,所以只注重每层的数据段。 1)终端,协调器都没加密

终端,协调器都没加密时,mac层数据如图4-8-1所示

图4-8-1终端,协调器都没有加密时,mac层抓包的数据

终端,协调器都没加密时,网络层数据如图4-8-2所示

图4-8-2终端,协调器都没有加密时,网络层抓包的数据

终端,协调器都没加密时,应用层数据如图4-8-3所示

图4-8-3终端,协调器都没有加密时,应用层抓包的数据

2) 终端,协调器都加密.:

终端,协调器都加密时,mac层数据如图4-8-4所示

图4-8-4终端,协调器都加密时,mac层抓包的数据

终端,协调器都加密时,网络层数据如图4-8-5所示

图4-8-5终端,协调器都加密时,网络层抓包的数据

终端,协调器都加密时,应用层数据如图4-8-6所示

图4-8-6终端,协调器都加密时,应用层抓包的数据

3) MAC层有效数据分析如图4-8-7所示。

图4-8-7 MAC层有效数据分析

4) 网络层有效数据段分析如图4-8-8所示。

图4-8-8网络层有效数据段分析

5) 应用层有效数据段分析如图4-8-9所示。

图4-8-9应用层有效数据段分析

通过分析以上的报文可以得出如下的结论:在进行加密之后,应用层的负载变为了加密后的格式,如上图所示。之后,加上网络层的帧头和相应的控制字段。交付给MAC层,MAC层再加上自己的帧头和控制字段将该数据包发送出去。因此,如果通信双方的密钥不同或者某方未使能加密,则无法进行通信,终端节点根本就无法与协调器建立连接,从而,达到了数据保护的目的。

经过测试,还发现了关于AES配置的如下规律:

1. 若通信双方的任意一方未使能-DSECURE=1,则无法终端节点无法加入协调器的网络。 2. 若zgPreConfigKey=FALSE,无论双方设定的密钥(即DEFAULTKEY)是否相同,都可

以进行通信,因为当zgPreConfigKey=FALSE时,整个加密的配置都将由协调器节点控制,并且由协调器发送给其他的终端节点或路由节点。

3. 若zgPreConfigKey=TRUE,如果双方设定的密钥不同,则无法进行通信。

问题1:当设置zgPreConfigKey=FALSE时,理论上密钥由协调器节点发送给每个终端节点,你能否通过抓包观察这个过程?

问题2:若zgPreConfigKey=FALSE,这样的加密过程是否是安全的?

问题3:当双方设置的密钥不同时,为什么不能进行通信?你能否通过抓包解释这一现象? 问题4:加密算法在协议栈的那一层实现?你是否可以使用自己的加密算法对数据进行加

密?

问题5:当数据量过大时,对数据的加密和解密是否会影响到整个网络的效率?

本文来源:https://www.bwwdw.com/article/xrr6.html

Top