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. 提交破解成功的截图

- 实验过程

  1. 运行mdk474.exe,安装MDK-ARM;

  2. 安装ULINK驱动;

  3. 以管理员身份运行Keil uVision4,点击File->License Management,复制CID;

  4. 运行Keil-MDK注册机,在CID中粘贴CID,在Target中选择ARM,生成LIC;

  5. 将注册机生成的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. 实验报告中分析代码

- 实验过程

  1. 运行MDK-ARM_AddOn_SC000_Support.exe文件,安装SCOOO库;

  2. 用管理员身份打keil uVision4 MDK,点击Project->New uVision Project,选择安装路径文件夹;

  3. 在芯片库选择框选择库Generic SC000 Device Database,点开ARM目录,选择SCOOO;

  4. 打开Z32.uvproj工程文件并编译;

  5. 连接电脑和实验箱,打开NZDownloadTool文件,按住核心板上的Reboot按键,开两次电源,识别z32芯片,并下载Z32HUA.bin文件;

  6. 下载成功后,开关电源,就可以看到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. 实验报告中分析代码

- 实验过程

  1. 打开Z32HUA.uvproj,并编译;

  2. 下载生成的bin文件,并连接电脑和实验箱;

  3. 打开sscom42即串口调试助手,进行配置,串口号选择COM10,选择波特率为115200,选择校验位为Even,勾选“发送新行”和“打开串口”;

  4. 关闭电源再打开,程序自动运行,可以在串口调试助手看到实验现象。

- 代码分析

  • 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中运行国密算法测试程序的截图

- 实验过程

  1. 用途:SM1、SM2、SM3、SM4算法,从固件安全和数据安全两个维度,为数据存储安全建立了一道坚实的保护墙。将自主研发的国家商用密码算法应用到数据存储安全,是顺应了国产化需求的,也是实现数据安全自主可控道路上重要的一步。

  2. 对应算法:

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. 实验报告中分析代码

- 实验过程

  1. 打开Z32HUA.uvproj文件并编译;

  2. 将生成的.bin文件下载到实验箱,连接电脑与实验箱;

  3. 打开sscom42即串口助手,完成相关配置后,关闭再打开实验箱电源开关,

  4. 按照提示插入SLE4428 IC卡;

  5. 按A键进行校验,校验成功后选择加密和解密;

  6. 按1选择加密,再按A确认加密,在串口助手上可以看到观察明文、秘钥和密文;

  7. 再按A键,将加密数据存入IC卡中;

  8. 按2选择解密,选择正确秘钥后,再按A键确认解密,串口助手上可以看到解密后的信息;

  9. 再按A键返回菜单。

- 代码分析

主函数:

  • 系统初始化;
  • 判断按键,返回 boot 条件;
  • 初始化IC卡插入检测IO口GPIO6;

B:

  • 按下A键,显示屏第一行“加密解试验”,第二、三行分别示“ 1. 加密”“ 2. 解密”两个选项。

加密:

  • SM1初始化;
  • 进行SM1加密;
  • 关闭SM1加密安全模块;

解密:

  • SM1初始化;
  • 进行SM1解密;
  • 关闭SM1加密安全模块;

- 任务六 固件程序设计-6-清理

- 任务要求

实验结束后,把实验室原来的网线插回,否则以后做实验的同学无法开机
0. 只有用实验室机器的小组做

  1. 提交你们小组使用的计算机的编号照片
  2. 提交插好网线的照片
  3. 提交盖好后盖的照片

- 实验过程

原文地址:https://www.cnblogs.com/brs666/p/9884479.html