熱度 10
本篇文章是介紹國(guó)密算法在嵌入式設(shè)備中應(yīng)用方法系列文章的第三篇,介紹移植openssl庫(kù)到嵌入式設(shè)備中的具體方法,當(dāng)然最終的目的還是使我們的設(shè)備能支持國(guó)密算法。同上一篇文章中介紹的miracl密碼庫(kù)相比,openssl庫(kù)的應(yīng)用更加廣泛,資料支持度更好,但是代碼體量要大于miracl庫(kù)。需要再次說(shuō)明的是,同miracl庫(kù)一樣,openssl的庫(kù)也并不能直接提供國(guó)密算法的接口,我們是利用庫(kù)中相應(yīng)的API接口(如橢圓曲線等)來(lái)構(gòu)建自己的國(guó)密算法,下面我們具體介紹移植的步驟。
第一步 獲取庫(kù)
作為應(yīng)用廣泛的開(kāi)源密碼庫(kù),可以輕松獲取源碼,https://www.openssl.org/source/ ,若是對(duì)openssl庫(kù)的使用不太熟悉,可以借助使用手冊(cè)來(lái)了解用法:
第二步 利用openssl構(gòu)建SM算法庫(kù)
我們構(gòu)建一個(gè)新的工程用以實(shí)現(xiàn)國(guó)密算法,由于linux下通過(guò)makefile編譯項(xiàng)目的方式不太直觀,我們使用windoes環(huán)境下VSstudio編譯環(huán)境來(lái)演示。
首先將openssl庫(kù)的源碼添加到工程文件夾的路徑下,其次要在代碼中增加文件包含,如下圖:
編譯正確之后,開(kāi)始著手構(gòu)建SM算法的源碼了,這一部分的代碼是基于國(guó)密算法的原理,利用openssl庫(kù)的接口構(gòu)建的,這需要開(kāi)發(fā)者了解國(guó)密算法原理。限于篇幅,本例中僅截取了作者實(shí)現(xiàn)的API,如下圖:
整體代碼完成之后,我們可以選擇生動(dòng)態(tài)庫(kù)或靜態(tài)庫(kù)供調(diào)用。此外,若是開(kāi)發(fā)者準(zhǔn)備在linux環(huán)境下使用gcc或某一嵌入式設(shè)備指定的編譯工具來(lái)完成上述操作,則需要完成更多的工作,比較重要的是,開(kāi)發(fā)者需要手動(dòng)完成整個(gè)編譯過(guò)程,這需要清楚openssl代碼庫(kù)本身的文件依賴(lài)關(guān)系,這部分內(nèi)容作者不做更多介紹。
第三步 將生成的庫(kù)添加到個(gè)人的設(shè)備代碼中
在上一步中,作者成功完成了國(guó)密SM2(對(duì)稱(chēng)算法)的動(dòng)態(tài)庫(kù)制作,如下圖:
為了便于介紹,作者整體的庫(kù)制作過(guò)程和測(cè)試過(guò)程都是在windows環(huán)境下完成的,此處生成的.dll動(dòng)態(tài)庫(kù)也僅能在windows pc下運(yùn)行。若是開(kāi)發(fā)者在linux環(huán)境下完成上述操作,則應(yīng)該生成.so為后綴的動(dòng)態(tài)庫(kù)文件,才能成功的添加到嵌入式設(shè)備中運(yùn)行。
這一步代碼的實(shí)現(xiàn)要根據(jù)各自嵌入式硬件設(shè)備的特點(diǎn)來(lái)實(shí)現(xiàn),在這里不做過(guò)多介紹!
Mr.Wang: 國(guó)密算法的優(yōu)勢(shì)是什么?是不是說(shuō)安全等級(jí)高?