实验一-密码引擎-加密API实现与测试
实验一-密码引擎-加密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) 在就绪状态下进行的密钥操作,设备操作员应经过密码设备的认证。
0.代码链接
InfoSecurity/is-exp1/api-test · 20191320lzh/学习代码 - 码云 - 开源中国 (gitee.com)
1.打开设备,关闭设备,获取设备信息,产生随机数
借用老师给的代码,自己改写并用openssl重写了生成随机数的代码。
项目结构:
效果截图:
关键代码:
static int myRandom(){
int randint;//用来接收产生的随机数(用openssl重写了)
RAND_bytes(&randint, sizeof(randint));
return randint;
}
2.密钥管理导出 ECC 签名公钥
通过调用openssl重写了api,实现了密钥管理,可以导出密钥到keypair.txt中。
项目结构:
效果截图:
3.非对称算法(至少支持SM2)
按照api要求,借助openssl实现了SM2算法的加密解密、签名验签。
3.1加解密
项目结构:
加解密测试效果图:
3.2签名验签
项目结构:
签名验签效果图:
4.对称算法(至少支持SM4)
项目结构:
效果截图:
5.杂凑算法
项目结构:
效果截图: