20181215实验报告——实验一:密码引擎的设计与实现
实验一 密码引擎
1.OpenEuler ECS构建
(1)登录自己的华为云账号,参考图示,构建基于鲲鹏和OpenEuler的ECS。
(2)登录进OpenEuler系统,熟悉系统使用,注意OpenEuler安装工具使用sudo yum install ...
(见加分项)
(3)登录进OpenEuler系统,运行who命令
(4)加分项:使用yum install 安装C编程工具,以及自己的常用工具,安装后测试使用情况:
2.OpenEuler-OpenSSL编译
(1)下载最新的OpenSSL源码(资源区可以自行下载)
(2)用自己的8位学号建立一个文件夹,cd 你的学号,用pwd获得绝对路径
(3)参考https://www.cnblogs.com/rocedu/p/5087623.html先在Ubuntu中完成OpenSSL编译安装,然后在OpenEuler中重现
./config --prefix=..(学号目录的绝对路径)指定OpenSSL编译链接
(4)提交 test_openssl.c 编译运行截图
(5)加分项:在Windows中编译OpenSSL,记录编译过程,提交相关文档(推荐MarkDown格式)
CodeBlocks配置openssl
加静态库
(先激活项目)菜单栏->Project->Build Options->Debug->Linker settings->Add 自己openssl安装目录下/lib下所有.lib文件(选择时使用Ctrl+A)
加动态库
菜单栏->Project->Build Options->Debug->Search directories->Linker->Add 动态库的目录(参考前面安装时的选项,设置后为/bin下)
加头文件
菜单栏->Project->Build Options->Debug->Search directories->Compiler->Add 安装目录/include
测试Base64效果:
由此可知windows下openssl编译成功!
3.OpenEuler-OpenSSL测试
在Ubuntu编写代码测试OpenSSL功能,包含Base64,SM2,SM3,SM4算法的调用,然后在OpenEuler中重现
提交代码链接和运行结果截图
sm2
sm3
sm4
bbase64
加分项:在Windows中重现
sm2
sm3
sm4
base64
4.电子钥匙功能测试
解压“龙脉密码钥匙驱动实例工具等”压缩包
在Ubuntu中运行 “龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\linux_mac”中例程,提交运行结果截图
加分项:运行“龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\windows”中例程,提交运行结果截图
5.国䀄算法交叉测试(选做)
2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名
在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图
在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)
在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签,提交代码和运行结果截图
加分项:在Windows中重现上述过程
6.密码引擎-商用密码算法实现1
参考https://weread.qq.com/web/reader/2fb3259071ef04932fbfd2ekc81322c012c81e728d9d180和网上资料,用C语言实现商用密码算法SM3,SM4,SM2
提交代码的链接(码云或者github)
提交代码运行结果截图
记录实现过程中的问题
7.密码引擎-商用密码算法实现2-交叉测试(选做)
把自己实现的商用密码算法SM2,SM3,SM4与OpenSSL交叉验证
自己实现的SM3算法的结果与OpenSSL的结果比对是否一致
自己实现的SM4算法加密的,OpenSSL的SM4算法解密,或者相反
自己实现的SM2算法签名,OpenSSL的SM2算法验签,或者相反
1.提交代码链接和运行结果截图
2 记录实现过程中的问题和解决方案
3 推荐发博客提交链接
详情见:https://www.cnblogs.com/xsh-acmer/p/14702194.html
8.密码引擎-加密API研究
密码引擎API的主要标准和规范包括:
1 微软的Crypto API
2 RAS公司的PKCS#11标准
3 中国商用密码标准:GMT 0016-2012 智能密码钥匙密码应用接口规范,GMT 0018-2012密码设备应用接口规范等
研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客链接和代码链接。
内容:
0 查找各种标准的原始文档,研究学习(至少包含Crypto API,PKCS#11,GMT 0016-2012,GMT 0018-2012)(5分)
1 总结这些API在编程中的使用方式(5分)
2 列出这些API包含的函数,进行分类,并总结它们的异同(10分)
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接(10分)
详情请见:https://www.cnblogs.com/xsh-acmer/p/14702182.html
9.密码引擎-加密API实现与测试
1 下载并查找GMT 0018-2012密码设备应用接口规范原始文档进行学习 (5分)
2 实现GMT 0018-2012密码设备应用接口规范的接口函数,至少实现:
1)设备管理中的打开设备,关闭设备,获取设备信息,产生随机数(4分)
2)密钥管理导出 ECC 签名公钥;SDF_ExportSignPublicKey_ECC I.导出 ECC加密公钥∶SDF_ExportEncPublicKey_ECC J. 产生 ECC非对称密钥对并输出∶SDF_GenerateKeyPair_ECC
K. (6分)
3)非对称算法(至少支持SM2):外部密钥 ECC验证∶SDF_ExternalVerify_ECC ,内部密钥 ECC签名;SDF_InternalSign_ECC ,内部密钥 ECC验证∶SDF_InternalVerify_ECC 外部密钥 ECC加密∶SDF_ExternalEncrypt_ECC
(8分)
4)对称算法(至少支持SM4)∶SDF_Encrypt 对称解密∶SDF_Dccrypt 计算 MAC∶SDF_CalculateMAC(6分)
5)杂凑算法(至少支持SM3):· 杂凑运算初始化∶SDF_HashInit· 多包杂凑运算∶SDF_HashUpdate· 杂凑运算结束∶SDF_HashFinal(6分)
密钥管理要求(10分)
基于本标准设计、开发的密码设备在密钥管理方面,应满足以下要求; 1)设备密钥的使用不对应用系统开放; 2) 密钥必须用安全的方法产生并存储;
3) 在任何时间、任何情况下,除公钥外的密钥均不能以明文形式出现在密码设备外; 4) 密码设备内部存储的密钥应具备有效的密钥保护机制,防止解剖、探测和非法读取; 5) 密码设备内部存储的密钥应具备权限控制机制,防止非法使用和导出。
设备状态要求(5分)
基于本标准设计、开发的密码设备在设备状态方面,应满足以下要求; 1) 密码设备应具有初始和就绪两个状态;
2) 未安装设备密钥的密码设备应处干初始状态,已安装设备密钥的密码设备应处于就绪状态; 3) 在初始状态下,除可读取设备信息、设备密钥的生成或恢复操作外,不能执行任何操作,生成或恢复设备密钥后,密码设备处于就绪状态;
4) 在就绪状态下,除设备密钥的生成或恢复操作外,应能执行任何操作; 5) 在就绪状态下进行的密钥操作,设备操作员应经过密码设备的认证。
详情请见:https://www.cnblogs.com/xsh-acmer/p/14702176.html