• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

嵌入式设备中支持国密算法的方法——移植Miracl库的步骤说明

上一篇文章中我们为大家介绍了嵌入式设备中支持国密算法的几种方法。本篇我们详细的介绍一下第一种方法:移植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接口函数运算结果的正确性。

    在工程中添加动态库的支持,即可调用功能并测试了。

    下图在为输出显示测试结果,测试通过。

全部回复(20)
正序查看
倒序查看
2019-06-13 14:30
楼主讲的太好了,国密算法移植过程和RSA一样吗?
0
回复
Mr_Wang_
LV.4
3
2019-06-13 16:36
@小屁孩456
楼主讲的太好了,国密算法移植过程和RSA一样吗?
讲解国密算法的太少了,万幸碰到楼主了!这篇文章是否可以理解,如何使用软件库实现SM2算法呢?
0
回复
宇宙王
LV.3
4
2019-06-13 17:06
@Mr_Wang_
讲解国密算法的太少了,万幸碰到楼主了!这篇文章是否可以理解,如何使用软件库实现SM2算法呢?
确实是这样,而且给出了使用不同软件库的两种方法
0
回复
Hex315
LV.5
5
2019-06-13 21:00
@宇宙王
确实是这样,而且给出了使用不同软件库的两种方法
国密算法都支持这个方法移植吗?
0
回复
2019-06-14 11:32
@Hex315
国密算法都支持这个方法移植吗?
都支持,但不包含SM1,如文中所说的,SM1是硬件实现的。
0
回复
114W1
LV.5
7
2019-06-14 13:24
@人称福爷
都支持,但不包含SM1,如文中所说的,SM1是硬件实现的。
国密算法目前还算比较小众,不被大众所熟知,希望楼主多分享些国密算法的文章
0
回复
邓女士
LV.5
8
2019-06-14 17:03
@114W1
国密算法目前还算比较小众,不被大众所熟知,希望楼主多分享些国密算法的文章
文章中提到的凌科芯安,是嵌入式设备国密算法的权威吗?很想了解一下。
0
回复
2019-06-14 17:31
@邓女士
文章中提到的凌科芯安,是嵌入式设备国密算法的权威吗?很想了解一下。
看楼主说联系凌科芯安,意思他们家芯片支持国密??????
0
回复
Mr_Wang_
LV.4
10
2019-06-14 17:34
@miniminimini
看楼主说联系凌科芯安,意思他们家芯片支持国密??????
当然了,这文章讲的不就是国密吗?
0
回复
2019-06-14 17:36
@Mr_Wang_
当然了,这文章讲的不就是国密吗?
不错,是硬货。对硬件肯定有要求,得能运行起来linux系统,
0
回复
邓女士
LV.5
12
2019-06-14 20:35
@miniminimini
不错,是硬货。对硬件肯定有要求,得能运行起来linux系统,
具体的函数定义是只有凌科芯安才有吗,还有别的途径可以获取吗?
0
回复
BLoun
LV.5
13
2019-06-16 07:19
@邓女士
具体的函数定义是只有凌科芯安才有吗,还有别的途径可以获取吗?
不是的,Miracl是一个公开库。任何人都能用。
0
回复
2019-06-17 08:09
@BLoun
不是的,Miracl是一个公开库。任何人都能用。
这个国密算法可以移植到任何一款嵌入式设备上使用吗?如果可以的话还有什么商业价值呢?
0
回复
宇宙王
LV.3
15
2019-06-17 13:17
@人称福爷
这个国密算法可以移植到任何一款嵌入式设备上使用吗?如果可以的话还有什么商业价值呢?
重点是国密算法,不是嵌入式设备,如果国密算法是独一无二的,您还敢说没有商业价值嘛
0
回复
2019-06-17 15:13
@宇宙王
重点是国密算法,不是嵌入式设备,如果国密算法是独一无二的,您还敢说没有商业价值嘛
用在版权保护上,哪一款算法比较安全?
0
回复
BLoun
LV.5
17
2019-06-17 18:42
@小屁孩456
用在版权保护上,哪一款算法比较安全?
国密算法是一种安全算法,算法本身不会因为使用设备对算法安全有影响。只不过国密算法通常是用在国家要求的特定行业上最常用
0
回复
Hex315
LV.5
18
2019-06-17 19:37
@BLoun
国密算法是一种安全算法,算法本身不会因为使用设备对算法安全有影响。只不过国密算法通常是用在国家要求的特定行业上最常用
看来要想调用国密算法还真不简单啊,需要通过移植支持库的形式来实现,那是不是对硬件又有要求呢
0
回复
114W1
LV.5
19
2019-06-17 20:12
@Hex315
看来要想调用国密算法还真不简单啊,需要通过移植支持库的形式来实现,那是不是对硬件又有要求呢

楼主有推荐支持国密算法的芯片吗?

0
回复
宇宙王
LV.3
20
2019-06-18 13:27
@114W1
楼主有推荐支持国密算法的芯片吗?
LKT4305-GM,支持SM1/2/3/4/7国密算法
0
回复
Mr_Wang_
LV.4
21
2019-06-18 15:44
@宇宙王
LKT4305-GM,支持SM1/2/3/4/7国密算法
移植Miracl库的步骤很详细!不错!
0
回复