|  | 
 
 楼主|
发表于 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和几个测试文件,有兴趣的可以自己试验一下。
 | 
 |