本篇文章是介绍国密算法在嵌入式设备中应用方法系列文章的第三篇,介绍移植openssl库到嵌入式设备中的具体方法,当然最终的目的还是使我们的设备能支持国密算法。同上一篇文章中介绍的miracl密码库相比,openssl库的应用更加广泛,资料支持度更好,但是代码体量要大于miracl库。需要再次说明的是,同miracl库一样,openssl的库也并不能直接提供国密算法的接口,我们是利用库中相应的API接口(如椭圆曲线等)来构建自己的国密算法,下面我们具体介绍移植的步骤。
第一步 获取库
作为应用广泛的开源密码库,可以轻松获取源码,https://www.openssl.org/source/ ,若是对openssl库的使用不太熟悉,可以借助使用手册来了解用法:
嵌入式设备中支持国密算法的方法(三)_第1张图片
第二步 利用openssl构建SM算法库
我们构建一个新的工程用以实现国密算法,由于linux下通过makefile编译项目的方式不太直观,我们使用windoes环境下VSstudio编译环境来演示。
首先将openssl库的源码添加到工程文件夹的路径下,其次要在代码中增加文件包含,如下图:
嵌入式设备中支持国密算法的方法(三)
嵌入式设备中支持国密算法的方法(三)_第2张图片
编译正确之后,开始着手构建SM算法的源码了,这一部分的代码是基于国密算法的原理,利用openssl库的接口构建的,这需要开发者了解国密算法原理。限于篇幅,本例中仅截取了作者实现的API,如下图:
嵌入式设备中支持国密算法的方法(三)_第3张图片
整体代码完成之后,我们可以选择生动态库或静态库供调用。此外,若是开发者准备在linux环境下使用gcc或某一嵌入式设备指定的编译工具来完成上述操作,则需要完成更多的工作,比较重要的是,开发者需要手动完成整个编译过程,这需要清楚openssl代码库本身的文件依赖关系,这部分内容作者不做更多介绍。
第三步 将生成的库添加到个人的设备代码中
在上一步中,作者成功完成了国密SM2(对称算法)的动态库制作,如下图:
嵌入式设备中支持国密算法的方法(三)
为了便于介绍,作者整体的库制作过程和测试过程都是在windows环境下完成的,此处生成的.dll动态库也仅能在windows pc下运行。若是开发者在linux环境下完成上述操作,则应该生成.so为后缀的动态库文件,才能成功的添加到嵌入式设备中运行。
这一步代码的实现要根据各自嵌入式硬件设备的特点来实现,在这里不做过多介绍!