|
楼主 |
发表于 2011-10-16 23:07:38
|
显示全部楼层
本帖最后由 id1563662788 于 2011-10-16 23:34 编辑
基于LX9构建文件保密系统
因工作较忙,调试时间不是很长,试用报告可能有不够详尽的地方,非常抱歉,也请多多包涵~。
本次试用主要是了解LX9设计情况,并尝试将LX9构建成一个文件加解密设备,通过串口(原拟用网口,但因时间关系,选用了较简单的串口)完成文件的加解密:加密时,明文和密钥由计算机送给LX9,LX9送密文给计算机;解密时,密文和密钥由计算机送给LX9,LX9将明文送回电脑。
为了简单起见,LX9所谓的加解密只准备进行与固定数据0xEE的异或操作,暂不实现密钥的传递过程。
1 结构框图
2 LX9硬件平台准备
这次试用尽量实现已有资源,硬件平台以AVS6LX9MBHP311_XPS_13_2_01为基础进行精简,去除不需要的模块。用XPS打开AVS6LX9MBHP311_XPS_13_2_01工程,查看原始模块,如下图所示。
1)去除不需要的模块,如Ethernet_MAC,DIP_Switches_4bit,SPI_FLASH,axi_timer_0等,保留LEDs_4Bits作为状态显示备用灯,最终模块结构如下图所示。
2)修改约束文件,打开system.ucf文件,如下图所示:
删除其中5~26行、32~37行,53~56行,即删除不用模块的约束信息。
3)生成需要的网表和bit文件。选择HARDWARE菜单,执行clean hardware命令。选择HARDWARE菜单,执行generate netlist命令,xps开始产生网表文件,不过产生过程中出现如下错误:
在C盘建立TEMP文件夹,重新执行generate netlist命令。漫长的等待。。。。。。后产生netlist完毕,执行hardware菜单generate bitstream命令,继续等待。。。。。。。产生bitstream完毕。
至此简单的硬件平台准备完毕,选择菜单project,执行export hardware design to SDK,点击export&launch SDK,导出硬件信息,开始进行软件设计。
3 LX9软件设计
Xps sdk软件初始界面如图所示。
选择菜单file—new—Xilinx C project,建立新的软件工程,设置如下图所示。
点击finish,建立软件工程。
注意上面使用Hello world 模板,可以方便测试整个平台是否正常工作。
设置串口调试助手,如下图所示。
端口号的选择在设备管理器里面查看Silinon Labs CP210X USB TO UART Bridge对应的数字,波特率与XPS 中 USB_UART中的设置对应。
执行generate linker script,方法如下图。
具体设置如图所示,设置完成后点击generate即可。
执行xilinx tools 菜单下Program FPGA 命令,设置如下所示。
FPGA编程完成后,内部程序自动执行,串口调试助手显示出hello world,说明平台工作正常。
修改helloworld.c,使其满足设计要求。修改过程简述如下:
加入引用头文件:
#include "xparameters.h"
#include "xuartlite.h"
#include "xgpio.h"
定义变量:
XUartLite ptrUart;
u8 ibuff[10];
u8 obuff[10];
XGpio ptrGpio;
u32 loop_cnt;
init_platform()下一行加入如下程序语句:
XUartLite_Initialize(&ptrUart, XPAR_USB_UART_DEVICE_ID);
XUartLite_ResetFifos(&ptrUart);
XGpio_Initialize(&ptrGpio,XPAR_LEDS_4BITS_DEVICE_ID);
XGpio_SetDataDirection (&ptrGpio,1,0);
loop_cnt = 0;
while(1)
{
loop_cnt ++ ;
loop_cnt = loop_cnt%0x3FFFF;
if(XUartLite_Recv(&ptrUart,ibuff,1)==1)
{
obuff[0] = ibuff[0] ^ 0xee;
XUartLite_Send(&ptrUart,obuff,1);
}
if(loop_cnt>0x20000)
{
XGpio_DiscreteClear(&ptrGpio,1,0x1);
}else{
XGpio_DiscreteSet(&ptrGpio,1,0x1);
}
}
修改完成后保存文件,xps SDK自动编译。
右键点击encrypt项目,修改编译配置为release版本,如下图所示。重新编译,生成release版本的encrypt.elf程序。
4 LX9固件程序生成及FLASH编程
回到XPS界面,将生成的release/encrypt.elf加入project,如下图所示。
选择菜单device configuration,执行命令update bitstream,生成download.bit文件,该文件为合并了硬件平台信息和block ram软件信息的文件。
将download.bit写入spi_flash中,具体过程见
U70_Avnet_Spartan-6_LX9_MicroBoard_Configuration_Guide_v1_3。
5 计算机软件设计
计算机程序暂时设计得比较简单,就是一个简要的串口收发程序,软件界面如下所示。
其中第一个选择按钮为选择输入文件:加密时为明文文件,解密时为密文文件,该文件选择后,输出路径和输出文件为自动设置;第二个选择按钮设置输出文件及路径,可以不进行设置使用默认值。
因为软件比较简单,这里不做详细说明。
6 测试及结果
用ultraedit产生一个全F文件(文件名f.bin)进行测试。下图为f.bin文件内容。
下图为计算机软件设置。
下图为输出的f_out.bin内容。
下图为解密设置。
下图为解密后禅师的f_out_out.bin文件内容。
可见,可以完成预定的功能。
下面测试一个文本文件,文件名为t.txt,内容如下:
仍然以二进制形式查看,如下所示:
明文:
密文:
解密后:
很奇怪,解密后二进制对照正确,但二进制后面文本不对,不过以文本形式查看还是正确的,如下:
下面,对一个图片加密,文件名image.jpg,图片如下所示。
这里,直接进行加密和解密,然后使用ultraedit进行二进制对比,如下所示:
对比结果虽然正确,但是这次加/解密也充分体现了串口的慢速,136K的文件,加密和解密总共用时约7分钟,可见速度之慢(如下图,通过解密后文件与加密后文件的创建时间,可以大致推出加密和解密时间)。
7 试用结论及感触
本次试用,因为和工作有冲突,测试不是很全面,感觉有些遗憾。另外也耽搁了时间,非常抱歉。
就技术方面来说,本次试用设计的这个东西还有不完善的地方,个人认为主要有:
1、 结构不是最好的。就LX9而言,如果要实现本文的功能,最好还是用网口,速度快,可以满足大文件加密要求。
2、 算法比较简单。如果时间允许,将aes或者其他公开算法或者个人设计的算法放进去,对个人文件进行加密,才能更安全的保密个人信息。
3、 本文开头提出的认证过程没有实际实现,这样每个人都可以用LX9进行加/解密,达不到安全保密的目的。
最后,非常感谢avnet提供这次机会给我试用LX9,LX9是个个头小巧功能也挺强大的板子,对进行原型设计很有参考价值。
提交试用报告的同时,同时提交了FLASH数据文件download.mcs,计算机软件程序RS232.EXE和几个测试文件,有兴趣的可以自己试验一下。 |
|