橢圓曲線加密系統(tǒng)之OpenSSL嵌入式

針對嵌入式系統(tǒng)中信息安全的特點(diǎn),選擇橢圓曲線公鑰加密體制ECC( Eniptic Curves Cryptosystem)作為加解密系統(tǒng)體制,應(yīng)用開源安全軟件開發(fā)包OpenSSL作為密碼庫開發(fā)了加密和解密系統(tǒng)。

一、橢圓曲線加密體制

橢圓曲線加密體制ECC是基于橢圓曲線離散對數(shù)問題( ECDLP)的一種公鑰加密體制,我們采用大素?cái)?shù)有限域GF(p)上的方程y2=x3+ax+6(modp),這里p是大素?cái)?shù),a和b為兩個(gè)小于p的非負(fù)整數(shù),它們滿足:4a3+27b2 (mod p)≠0。橢圓曲線離散對數(shù)問題ECDLP定義如下:給定素?cái)?shù)p和橢圓曲線E,對Q=kP,可以證明由k和P計(jì)算Q比較容易,而由Q和P計(jì)算尾則比較困難。由于橢圓曲線密碼體制ECC所具有的特點(diǎn),ECC可以用較小的開銷(軟硬件規(guī)模、存儲(chǔ)要求、帶寬)實(shí)現(xiàn)較高的安全性,是一種能夠提供高比特強(qiáng)度的公鑰加密體制。

二、OpenSSL簡介

OpenSSL是一個(gè)用來開發(fā)網(wǎng)絡(luò)安全軟件的開源軟件包,不僅實(shí)現(xiàn)了SSL協(xié)議,而且擁有功能強(qiáng)大的密碼庫。OpenSSL采用C語言作為開發(fā)語言,有優(yōu)秀的跨平臺(tái)性能。OpenSSL包括三個(gè)部分:SSL協(xié)議庫,加密算法庫,應(yīng)用程序。其中加密算法庫實(shí)現(xiàn)了大部分主流的加密算法和標(biāo)準(zhǔn),包括對稱加密算法,公開加密算法,散列函數(shù)算法,數(shù)字證書標(biāo)準(zhǔn)等。任何人都可以免費(fèi)使用OpenSSL來實(shí)現(xiàn)消息摘要、文件加密和解密、數(shù)字證書、數(shù)字簽名和隨機(jī)數(shù)字產(chǎn)生等功能,以及解決信息的安全傳輸問題。使用OpenSSL可以縮短軟件開發(fā)周期,提高軟件的運(yùn)行效率和穩(wěn)定性。本系統(tǒng)中使用的OpenSSL-1.0.O版本有橢圓曲線加密體制的支持,可以基于OpenSSL軟件包提供的橢圓曲線相關(guān)函數(shù)構(gòu)建完整的橢圓曲線密碼體系方案。由于其良好的跨平臺(tái)及程序可移植性,可以方便地移植橢圓曲線密碼系統(tǒng)到arm-linux平臺(tái)或其他種類嵌入式平臺(tái)系統(tǒng)。

三、橢圓曲線加密體制及其實(shí)現(xiàn)

橢圓曲線加密體制的兩種常用算法是EC -ELGamal與Men-ezes-Vanstone。其中,EC-ELGamal算法是基于橢圓曲線的ELGamal型加密體制,其基本思想是將橢圓曲線的點(diǎn)加和點(diǎn)乘運(yùn)算類比為有限素域上的運(yùn)算,加密實(shí)施中要求將明文編碼為橢圓曲線上的點(diǎn)。Menezes-Vanstone算法利用屏蔽明文的方法避開了明文嵌入的問題。本系統(tǒng)利用OpenSSL-1.0.0提供的橢圓曲線進(jìn)行密碼系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。下面對兩種橢圓曲線加密體制的算法進(jìn)行介紹并附上用C語言設(shè)計(jì)的程序主要實(shí)現(xiàn)代碼。

1、EC—ELGamal加密算法及其實(shí)現(xiàn)

(1)EC-ELGamal算法加解密及通信的過程

EC-ELGamal算法:

①選定橢圓曲線Ep(a,b),并取橢圓曲線上點(diǎn)G作為基點(diǎn)。

②用戶B選擇一個(gè)私有密鑰k,并生成公開密鑰K=kG。

③用戶B將Ep(a,b)和點(diǎn)K,G傳給用戶A。

④用戶A接到信息后,將待傳輸?shù)拿魑木幋a到Ep(a,b)上一點(diǎn)M1,并產(chǎn)生一個(gè)隨機(jī)整數(shù)r。本程序設(shè)計(jì)中隨意選擇G作為待加密的信息M1為例,也可以選擇橢圓曲線上的其他點(diǎn)。

⑤用戶A計(jì)算密文C1=G+rK;C2=rG。

⑥用戶A將密文CI、C2傳給用戶B。

⑦用戶B接到信息后計(jì)算M2=C1-kC2,M2即為解密的數(shù)據(jù)。

(2)OpenSSL實(shí)現(xiàn)EC-ELGamal算法主要代碼

//加密操作,對點(diǎn)M1(此處以G為例)加密,C2=rG,C1=G+rK,

//其中K為B的公鑰。

//OpenSSL里的函數(shù)功能:EC_POINT_mul是點(diǎn)乘,EC—POINT_

//add是點(diǎn)加。

EC_POINT_mul( group, C2, NULL,G,r,ctx);

EC_POINT_mul(group,B,NULL,K,r,ctx);

EC_POINT_add( group, C1,G,B,ctx);

//解密操作,對得到的(C1,C2)解密得到M2=Cl-kC2

EC_POINT_mul(group,R,NULL, C2,k,ctx);

EC_POINT_invert( group,R,ctx);

EC_POINT_add( group, M2, Cl,R,ctx);

M2即為經(jīng)過解密得到的橢圓曲線上的點(diǎn),與被加密的明文點(diǎn)M1進(jìn)行比較,證明解密所得的點(diǎn)的坐標(biāo)與被加密的數(shù)據(jù)點(diǎn)的坐標(biāo)完全相同。此處實(shí)際應(yīng)用中要涉及到用各種編碼算法將明文編碼到橢圓曲線上的明文點(diǎn)M1,最后再對解密所得的數(shù)據(jù)M2解碼得到原明文。

2、Menezes-Vanstone密碼算法及其實(shí)現(xiàn)

(1)Menezes-Vanstone算法加密解密及通信的過程

Menezes-Vanstone算法:

①選定橢圓曲線Ep(a,b),并取橢圓曲線上點(diǎn)G作為基點(diǎn)。

②用戶B選擇一個(gè)私有密鑰k,并生成公開密鑰K=kG。

③用戶A將明文M變換成為有限域Zp中的二元組M=(m1,m2)。

④用戶A產(chǎn)生隨機(jī)數(shù)r并計(jì)算:

RO=rG

(c1,c2)=rK

R1=clml( mod p)

R2=c2m2( mod p)

⑤用戶A將(RO,R1,R2)作為密文發(fā)送給用戶B。

⑥用戶B接收到密文后計(jì)算:

(dl,d2) =kR。

(mll,m22)=(Rldl_1(mod p), R2d2_1(mod p))即為解密所得數(shù)據(jù),與原加密數(shù)據(jù)(ml,m2)相同。

(2)OpenSSL實(shí)現(xiàn)Menezes-Vanstone算法主要代碼

//加密操作,對( ml,m2)在有限域zp內(nèi)賦隨意值如下

BN.hex2bn(&ml,”3A2794482D6410697 C85 FA4643BAI DAEA76 FFAE6EC26A2C8");

BN_hex2bn( &m2,"AF7DF34CDA2DF2ACC65 C31BE95 A3888FC5DCC7 04461308EC");

//取參數(shù)p,a,b,其中p后面要用到

EC_GROUP_get_curve_GFp( group,p,a,b,ctx);

//r為取的隨機(jī)數(shù),計(jì)算RO=rQ

EC_POINT_mul( group, RO, NULL, Q,r, cLx);

//計(jì)算C=( cl,c2)=rK

EC_POIN'r_mul( group, C, NULL, K,r, ctx);

EC_POINT_get_affine_coordinates_GFp( group,C,cl,c2, ctx);

//計(jì)算Rl=clml( mod p),R2=c2m2( mod p)

BN_mod_mul( R1, cl ,ml,p,ctx);

BN_mod_mul( R2, c2 ,m2 ,p, ctx);

//解密操作,首先計(jì)算D=(dl,d2)=kRO,BN_mod_mul函數(shù)是

//進(jìn)行模乘運(yùn)算

EC_POINT_mul(group, D, NULL, RO,k,ctx);

EC—POINT—get一affine-coordinates_GFp( group,D,dl, d2,ctx);

//分別取dl與d2對p的模逆此處分別記為dll與d22

BN_mod_inverse( dll ,dl ,p, ctx);

BN_mod_inverse( d22, d2,p,ctx);

//解密(rull ,m22)=(Rldl -1( mod p),R2d2 -1( mod p))

BN_mod_mul( mll, R1 ,dll ,p,ctx);

BN_mod_mul( m22, R2, d22 ,p, ctx);

此處( mll,m22)經(jīng)數(shù)據(jù)轉(zhuǎn)換輸出十六進(jìn)制數(shù)據(jù)為:

mll: 3A2794482D6410697C85 FA4643BAIDAEA76FFAE6EC26A2C8

m22: AF7 DF34CDA2DF2 ACC65 C31BE95 A3888 FC5 DCC704461308EC

結(jié)果證明(mll,m22)與(m1,m2)相同,加密解密成功。

四、安全密碼系統(tǒng)結(jié)構(gòu)及分析

本系統(tǒng)基于arm9開發(fā)板搭建arm-linux系統(tǒng),用OpenSSL軟件包開發(fā)了完整的加解密程序,驗(yàn)證OpenSSL在arm-linux平臺(tái)上實(shí)現(xiàn)的可行性及易用性和安全性。實(shí)驗(yàn)結(jié)果在主機(jī)的Linux操作系統(tǒng)中的rmmcom串口終端中顯示。現(xiàn)對該安全加密系統(tǒng)的系統(tǒng)結(jié)構(gòu)、搭建步驟、實(shí)驗(yàn)分析進(jìn)行介紹。

1、安全密碼系統(tǒng)結(jié)構(gòu)

本嵌入式平臺(tái)安全密碼系統(tǒng)的結(jié)構(gòu)如圖1所示。

橢圓曲線加密系統(tǒng)之OpenSSL嵌入式

圖l中各部分的功能簡介如下:

(1)嵌入式硬件平臺(tái)是安全加密系統(tǒng)的硬件基礎(chǔ),本系統(tǒng)采用ann9核心開發(fā)板,并可根據(jù)功能需求進(jìn)行擴(kuò)展。

(2)嵌入式操作系統(tǒng)是安全加密系統(tǒng)的系統(tǒng)平臺(tái),本系統(tǒng)采用了標(biāo)準(zhǔn)的Linux操作系統(tǒng)。

(3) OpenSSL層實(shí)現(xiàn)了SSL安全套接字層協(xié)議及其相關(guān)加密解密的支持。

(4)安全系統(tǒng)應(yīng)用層提供基于安全加密的應(yīng)用服務(wù)。

2、軟硬件平臺(tái)介紹

本系統(tǒng)平臺(tái)采用以arm9為核心并移植Linux操作系統(tǒng)的嵌入式開發(fā)平臺(tái),基本的軟硬件參數(shù)如下:

(1) CPU處理器

Samsung S3C2440A,主頻400MHz,最高頻率達(dá)到533MHz。

(2) SDRAM內(nèi)存

64M SDRAM,32位數(shù)據(jù)總線。

(3) FLASH存儲(chǔ)器

64M Nand Flash存儲(chǔ)器;2M Nor Flash存儲(chǔ)器。

(4)接口和資源

1個(gè)10M以太網(wǎng)RJ-45接口(采用DM9000網(wǎng)卡芯片);3個(gè)串行通信接口;1個(gè)USB Host接口;1個(gè)USB Slave B接口。

(5)移植Linux版本2.6.31

3、實(shí)驗(yàn)步驟

(1)主機(jī)搭建arm-linux-gcc交叉編譯環(huán)境,用于對軟件庫及應(yīng)用程序進(jìn)行交叉編譯。

(2)向ann9開發(fā)板上移植經(jīng)過裁剪的Linux操作系統(tǒng),構(gòu)成基本的arm-linux軟硬件開發(fā)平臺(tái)。

(3)下載OpenSSL-I.0.0并用交叉編譯器arm-linux-gcc交叉編譯并生成靜態(tài)函數(shù)庫,并向開發(fā)平臺(tái)移植靜態(tài)函數(shù)庫。

(4)將兩種加密系統(tǒng)的完整代碼分別用arm-linux-gcc交叉編澤,將生成的可執(zhí)行程序移植到arm-linux平臺(tái)上運(yùn)行。

4、實(shí)驗(yàn)分析

通過對橢圓曲線的兩種算法的程序進(jìn)行測試分析表明:

(1)兩種橢圓曲線密碼體制的程序都能準(zhǔn)確進(jìn)行加密解密,程序運(yùn)行正常。同時(shí),兩種密碼體制的安全性都是基于橢圓曲線離散對數(shù)問題(ECDLP)。

(2) EC-ELGamal密碼體制要求將明文編碼為橢圓曲線上的點(diǎn),還要考慮明文嵌入算法增加程序代碼量及運(yùn)行總時(shí)間的因素,在實(shí)用性上存在缺點(diǎn)。同時(shí),EC-ELGamal密碼體制存在密文相關(guān)問題(當(dāng)如果攻擊者已知部分明文mx,攻擊者可以通過橢圓曲線方程推得my)。

(3) Menezes-Vanstone利用屏蔽明文的方法避免了明文嵌入的問題,但同時(shí)此算法也存在兩種缺點(diǎn):信息擴(kuò)展問題(明文ml、m2被擴(kuò)展成密文RO、Rl、R2,增加了存儲(chǔ)空間和傳輸帶寬需求)、密文相關(guān)問題(如果攻擊者已知部分明文ml及其對應(yīng)的密文,則他可以通過計(jì)算得到m2)。

(4)加解密速度比較。在素?cái)?shù)域內(nèi)選擇密鑰長度依次為192位、224位、256位、384位、521位。不考慮明文嵌入問題,統(tǒng)計(jì)EC-ELC amal加解密程序?qū)c(diǎn)Q進(jìn)行加解密的程序運(yùn)行時(shí)間,同時(shí)統(tǒng)計(jì)Menezes-Vanstone加解密程序?qū)ν瑯拥腝點(diǎn)進(jìn)行加解密的程序運(yùn)行時(shí)間,表1為統(tǒng)計(jì)所得時(shí)間對比表。

橢圓曲線加密系統(tǒng)之OpenSSL嵌入式

對表1分析得出:①即使不考慮明文嵌入問題,Menezes-Vanstone在各種密鑰長度的加解密速度上已經(jīng)高于EC -ELGamal;②隨著密鑰長度逐漸增大兩種算法加解密時(shí)間的增加幅度上區(qū)別不大。

小知識(shí)之OpenSSL

OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測試或其它目的使用。