嵌入式设备中支持国密算法的方法(二)

上一篇文章中我们为大家介绍了嵌入式设备中支持国密算法的几种方法。本篇我们详细的介绍一下第一种方法:移植Miracl库的具体操作步骤。
第一步 获取源码
MIRACL密码库是开源软件,可以直接到官网下载,也可在csdn等论坛中获取。
第二步 利用MIRACL库函数实现SM2算法
实现sm2的功能需要用到MIRACL库中的36个源文件,例如mraes.c、mrec2.c、mrarth0.c、mrcore.c、mrshs.c、mezzn2.c、mrxgcd.c、mrgcm.c、mrio1.c等。
然后需要新建一个sm2.c文件、sm2.h,用于实现sm2功能函数;一个sm3.c文件、一个sm3.h文件,用于实现sm3功能函数(之所以要增加sm3的功能是因为sm2算法中需要sm3计算hash值功能。
下面给出生成密钥对的示例,具体的函数定义可以联系凌科芯安获取。
嵌入式设备中支持国密算法的方法(二)
嵌入式设备中支持国密算法的方法(二)
现在给出实现的函数接口功能,
sm3_e
sm2_keygen 生成密钥对
sm2_sign 签名函数
sm2_verify 验证签名
sm2_encrypt 加密函数
sm2_decrypt 解密函数
void sm2_keyagreement_a1_3密钥协商的发起方调用此函数产生一对临时公钥(kx1, ky1)和相应的随机数
sm2_keyagreement_b1_9
密钥协商的接收方调用此函数协商出密钥kbbuf
第三步 编译动态库
在linux环境下,需要先制作makefile文件,针对特定的编译器环境,只需要修改cc等命令的定义来支持指定编译器即可。以arm-linux-gcc编译工具为例器编译文件,其编译指令如下图
嵌入式设备中支持国密算法的方法(二)
嵌入式设备中支持国密算法的方法(二)
之后运行指令脚本,./armlinux即可得到动态库文件。
在windows环境下,直接在VS项目中选择编译成动态库即可,配置生成动态库如下图
嵌入式设备中支持国密算法的方法(二)
第四步 测试功能
最后,需要验证一下SM2.dll锁提供的SM2接口函数运算结果的正确性。
在工程中添加动态库的支持,即可调用功能并测试了。
下图在为输出显示测试结果,测试通过。
嵌入式设备中支持国密算法的方法(二)

转载于:https://blog.51cto.com/13520299/2406929

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GmSSL (http://gmssl.org) 是支持国密算法和标准的OpenSSL分支,增加了对国密SM2/SM3/SM4算法和ECIES、CPK、ZUC算法支持实现了这些算法与EVP API和命令行工具的集成。GmSSL由北京大学信息安全实验室(http://infosec.pku.edu.cn)开发和维护。 GmSSL的libcrypto密码库增加的密码算法包括: SM2是国密椭圆曲线公钥密码标准,其包含数字签名、公钥加密和密钥交换三个具体方案,以及一个256比特素域上的推荐椭圆曲线参数。GmSSL内置了SM2的推荐曲线参数,实现了SM2的签名算法和公钥加密算法SM3国密密码杂凑算法标准,输出的杂凑值长度为256比特。 SM4是国密分组密码标准,又名SMS4,其分组长度和密钥长度均为128比特。GmSSL实现了SMS4密码及SMS4的ECB、CBC、CFB、OFB等工作模式。 X9.63 KDF是密钥派生函数国际标准之一,ECIES和SM2公钥加密方案依赖该算法,GmSSL实现了X9.63 KDF,并用于支持ECIES和SM2公钥加密。 ECIES (Elliptic Curve Integrated Encryption Scheme)是椭圆曲线公钥加密的国际标准,可用于加密数据。 CPK是由南相浩和陈钟设计的基于身份的密码。GmSSL实现了CPK的系统建立和密钥生成算法,生成的密钥可以用于DSA、ECDH、ECDSA、ECIES、SM2等公钥密码算法。 ZUC(祖冲之算法)是由我国设计的序列密码,以32位字为单位输出密钥流,其密钥长度和IV长度均为128比特。GmSSL的ZUC算法处于开发。 GmSSL提供命令行工具gmssl,可用于生成SM2签名、SM3摘要、HMAC-SM3消息认证码,支持SM4和ZUC数据加解密。 $ echo -n abc | gmssl dgst -sm3 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0     显示SM2推荐椭圆曲线域参数 $ gmssl ecparam -text -noout -name sm2p256v1 -param_enc explicit     在代码目录./certs/sm2/目录给出了SM2证书的例子,可以用gmssl工具进行解析 $ gmssl x509 -text -noout -in certs/sm2/sm2-x509.pem $ gmssl pkcs7 -print_certs -in certs/sm2/sm2-pkcs7.pem     GmSSL新增的EVP对象包括EVP_sm3()、EVP_sm4_ecb()、EVP_sm4_cbc()、EVP_sm4_ofb()、EVP_sm4_cfb()和EVP_zuc()。 标签:GmSSL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值