2018-2019-1 20165201 20165203 20165206 实验二 固件程序设计
- 2018-2019-1 20165201 20165203 20165206 实验二 固件程序设计
- 任务一 固件程序设计-1-MDK
- 任务要求
0. 注意不经老师允许不准烧写自己修改的代码
1. 三人一组
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM)
3. 提交破解程序中产生LIC的截图
4. 提交破解成功的截图
- 实验过程
-
运行mdk474.exe,安装MDK-ARM;
-
安装ULINK驱动;
-
以管理员身份运行Keil uVision4,点击File->License Management,复制CID;
-
运行Keil-MDK注册机,在CID中粘贴CID,在Target中选择ARM,生成LIC;
-
将注册机生成的LIC复制粘贴到keil4的“New License ID Code(LIC)”一栏中,点击“ADD LIC”,破解完成。
- 任务二 固件程序设计-2-LED
- 任务要求
0. 注意不经老师允许不准烧写自己修改的代码
1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
3. 实验报告中分析代码
- 实验过程
-
运行MDK-ARM_AddOn_SC000_Support.exe文件,安装SCOOO库;
-
用管理员身份打keil uVision4 MDK,点击Project->New uVision Project,选择安装路径文件夹;
-
在芯片库选择框选择库Generic SC000 Device Database,点开ARM目录,选择SCOOO;
-
打开Z32.uvproj工程文件并编译;
-
连接电脑和实验箱,打开NZDownloadTool文件,按住核心板上的Reboot按键,开两次电源,识别z32芯片,并下载Z32HUA.bin文件;
-
下载成功后,开关电源,就可以看到LED灯L2闪烁。
- 代码分析
主函数:
-
SystemInit ()
系统初始化; -
if(0 == GPIO_GetVal(0))
{
BtApiBack(0x55555555, 0xAAAAAAAA);
}
判断按键,返回 boot 条件,确认是否进行程序下载; -
GPIO_PuPdSel(0,0);
GPIO_InOutSet(0,0);
设置 GPIO0 状态为上拉输出; -
while(1)
{
delay(100);
GPIO_SetVal(0,0); //输出低电平,点亮 LED
delay(100);
GPIO_SetVal(0,1); //输出高电平,熄灭 LED
}
进入循环程序, LED 灯间隔 100ms 闪烁。
- 任务三 固件程序设计-3-UART
- 任务要求
0. 注意不经老师允许不准烧写自己修改的代码
1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.0”完成UART发送与中断接收实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
3. 实验报告中分析代码
- 实验过程
-
打开Z32HUA.uvproj,并编译;
-
下载生成的bin文件,并连接电脑和实验箱;
-
打开sscom42即串口调试助手,进行配置,串口号选择COM10,选择波特率为115200,选择校验位为Even,勾选“发送新行”和“打开串口”;
-
关闭电源再打开,程序自动运行,可以在串口调试助手看到实验现象。
- 代码分析
-
void UART_Irq Service(void) 是进行串口中断服务;
-
void UART_BrpSet(UINT16 set)是进行波特率设置;
-
void UART_Init(void) 是进行串口初始化;
-
void UART_SendByte(UINT8 dat) 是用于发送单字节;
-
void UART_SendString(UINT8 * str) 是用于发送字符串;
-
void uart_SendString(UINT8 buf[],length) 是用于发送某一长度的字符串;
-
void UART_SendNum(INT32 num) 是用于发送单个十进制整数;
-
void UART_SendHex(UINT8 dat) 是用于发送单个十六进制整数;
-
UINT8 UART_GetByte(*data) 是用于接收单字节;
-
void UART_Receive(UINT8 *receive, len) 是用于接收多字节;
- 任务四 固件程序设计-4-国密算法
- 任务要求
0. 网上搜集国密算法标准SM1,SM2,SM3,SM4
1. 网上找一下相应的代码和标准测试代码,在Ubuntu中分别用gcc和gcc-arm编译
2. 四个算法的用途?
3. 《密码学》课程中分别有哪些对应的算法?
4. 提交2,3两个问题的答案
5. 提交在Ubuntu中运行国密算法测试程序的截图
- 实验过程
-
用途:SM1、SM2、SM3、SM4算法,从固件安全和数据安全两个维度,为数据存储安全建立了一道坚实的保护墙。将自主研发的国家商用密码算法应用到数据存储安全,是顺应了国产化需求的,也是实现数据安全自主可控道路上重要的一步。
-
对应算法:
SM1 算法未公开
SM2 算法ECC
SM3 算法MD5
SM4 算法DES
3. 在Ubuntu中运行国密算法测试程序:
学习补充:
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。
- 任务五 固件程序设计-5-SM1
- 任务要求
0. 注意不经老师允许不准烧写自己修改的代码
1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.16”完成SM1加密实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
3. 实验报告中分析代码
- 实验过程
-
打开Z32HUA.uvproj文件并编译;
-
将生成的.bin文件下载到实验箱,连接电脑与实验箱;
-
打开sscom42即串口助手,完成相关配置后,关闭再打开实验箱电源开关,
-
按照提示插入SLE4428 IC卡;
-
按A键进行校验,校验成功后选择加密和解密;
-
按1选择加密,再按A确认加密,在串口助手上可以看到观察明文、秘钥和密文;
-
再按A键,将加密数据存入IC卡中;
-
按2选择解密,选择正确秘钥后,再按A键确认解密,串口助手上可以看到解密后的信息;
-
再按A键返回菜单。
- 代码分析
主函数:
- 系统初始化;
- 判断按键,返回 boot 条件;
- 初始化IC卡插入检测IO口GPIO6;
B:
- 按下A键,显示屏第一行“加密解试验”,第二、三行分别示“ 1. 加密”“ 2. 解密”两个选项。
加密:
- SM1初始化;
- 进行SM1加密;
- 关闭SM1加密安全模块;
解密:
- SM1初始化;
- 进行SM1解密;
- 关闭SM1加密安全模块;
- 任务六 固件程序设计-6-清理
- 任务要求
实验结束后,把实验室原来的网线插回,否则以后做实验的同学无法开机
0. 只有用实验室机器的小组做
- 提交你们小组使用的计算机的编号照片
- 提交插好网线的照片
- 提交盖好后盖的照片