# 20155322 2017-2018-1《信息安全系统设计》实验二:固件程序设计
实验二 固件程序设计
任务一 MDK
任务详情:
- 注意不经老师允许不准烧写自己修改的代码
- 两人(个别三人)一组
- 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM)
- 提交破解程序中产生LIC的截图
- 提交破解成功的截图
任务过程:
- 运行 uVision4,点 File->License Management->复制 CID->运行keil-MDK注册机(在“Z32开发指南\2.软件资料\keil-MDK 注册机”双击“keil mdk474注册机”)->粘贴 CID 并选择 ARM。
任务二 LED
任务详情:
- 注意不经老师允许不准烧写自己修改的代码
- 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
- 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
- 实验报告中分析代码
任务过程:
- 首先先在 KEIL-MDK 中添加 Z32 SC-000 芯片库:
- 在新建工程选择 Project——>New uVision Project,在弹出的安装路径窗口选择安装路径文件夹,并为工程命名。在芯片库选择框选择库 Generic SC000 Device Database。点开 ARM 结构目录,选择 SC000,点击 OK。
- 完成让LED灯闪烁实验:
- 打开工程文件。编译工程产生后缀名为.bin 的可执行代码。
- 实验箱接入电源,用USB公对公线将实验箱的USB接口连接到电脑的USB接口上,在电脑上找到“Z32开发指南\2.软件资料\Z32下载调试工具”目录打Z32 下载调试工具NZDownloadTool.exe。打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。
- 当左边框出现“1设备已连接”,设备选择中显示芯片型号,此时就可以下载程序了。我们点击窗口右下方“确认下载”一栏的“浏览”,选择程序路径为“Z32开发指南\实验 1-LED闪烁\bin\Z32HUA.bin”)打开,最后点击下载。
- 主函数代码:
int main(void){/*********************此段代码勿动***********************///系统中断向量设置,使能所有中断SystemInit ();// 返回 boot 条件if(0 == GPIO_GetVal(0)){ BtApiBack(0x55555555, 0xAAAAAAAA);}/*********************此段代码勿动***********************/GPIO_PuPdSel(0,0); //设置 GPIO0 为上拉GPIO_InOutSet(0,0); //设置 GPIO0 为输出while(1){ delay(100); GPIO_SetVal(0,0); //输出低电平,点亮 LED delay(100); GPIO_SetVal(0,1); //输出高电平,熄灭 LED}}//延时函数,当系统时钟为内部 OSC 时钟时,延时 1msvoid delay(int ms){int i;while(ms--){ for(i=0;i<950;i++) ;}}
- 主函数代码分析
- 系统初始化,中断设置,使能所有中断
- 判断按键,返回 boot 条件,确认是否进行程序下载
- 设置 GPIO0 状态为上拉输出
- 进入循环程序,LED 灯间隔 100ms 闪烁
任务三 UART
任务详情:
- 注意不经老师允许不准烧写自己修改的代码
- 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
- 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.0”完成UART发送与中断接收实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
- 实验报告中分析代码
任务过程:
- 完成UART发送与中断接收实验
- 打开“Z32 开发指南\实验8-SM1”目录的工程文件。编译工程,产生后缀名为.bin 的可执行代码。
- 将实验箱接入电源,用USB公对公线将实验箱的USB接口连接到电脑的USB接口上,在电脑上找到“Z32开发指南\2.软件资料\Z32下载调试工具”目录打开 Z32 下载调试工具 NZDownloadTool.exe。打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32 即可被电脑识别,进行下载调试。
- 主函数
UINT8 shuju_lens;UINT8 shuju[64];UINT8 uart_rx_num;UINT8 uart_rx_end;int main(void){/*********************此段代码勿动***********************/ //系统中断向量设置,使能所有中断 System Init (); // 返回boot条件 if(0 == GPIO_Get Val(0)) { Bt Api Back(0x55555555, 0x AAAAAAAA); } /*********************此段代码勿动***********************/ UART_Init(); //初始化Uart UART_Send Byte('A'); //Uart发送一个字符A UART_Send Byte('\r');UART_Send Byte('\n');//换行 UART_Send String("Welcome to Z32HUA!"); //Uart发送字符串 UART_Send Byte('\r');UART_Send Byte('\n');//换行 UART_Send Num(1234567890); //Uart发送一个十进制数 UART_Send Byte('\r');UART_Send Byte('\n');//换行 UART_Send Hex(0x AA); //Uart发送一个十六进制数 UART_Send Byte('\r');UART_Send Byte('\n');//换行 while(1) { if(uart_rx_end) { uart_rx_end=0; uart_Send String(shuju,shuju_lens); } } //等待接收中断。}//延时函数,当系统时钟为内部OSC时钟时,延时1msvoid delay(int ms){ int i; while(ms--) { for(i=0;i<950;i++) ; }}
- 主函数代码分析
- 系统初始化,中断设置,使能所有中断
- 判断按键,返回 boot 条件,确认是否进行程序下载
- 初始化Uart,使能Uart接口,配置Uart终端并使能
- 发送单个字符“A”,换行,在发送16位数“0xAA”换行,发送数字串“20155322_20155302”,换行
- 进入循环程序,等待串口中断到来并判断数据是否接受完毕,若中断到来,转入执行串口中断服务程序,待接收数据完毕,Z32将数据发回串口助手。
任务四 国密算法
任务详情:
- 网上搜集国密算法标准SM1,SM2,SM3,SM4
- 网上找一下相应的代码和标准测试代码,在Ubuntu中分别用gcc和gcc-arm编译
- 四个算法的用途?
- 《密码学》课程中分别有哪些对应的算法?
- 提交2,3两个问题的答案
- 提交在Ubuntu中运行国密算法测试程序的截图
任务过程:
- 参考CSDN上的博客我找到了相关算法的介绍。
SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。
SM3算法:SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。
- SM4算法:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。
- 对应的算法:
- sm1:分组密码算法
- sm2:ECC椭圆曲线密码
- sm3:杂凑算法
- sm4:分组算法
- 代码运行
问题:无法使用头文件:
"openssl/bh.h: No such file or directory"
解决:首先我自己手动下载了openssl,在
make
,make install
安装之后运行发现还是不行,依旧无法调用头文件,出现新问题。问题:手动指定路径
- 解决:没有解决,如图,出现了问题是部分依赖的框架没有导入……这个就让我很难理解
任务五 SM1
任务详情:
- 注意不经老师允许不准烧写自己修改的代码
- 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
- 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.16”完成SM1加密实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
- 实验报告中分析代码
本周结对学习情况
-
- 结对学习内容: 实验二 固件程序设计