李玉生
(南京理工大學(xué) 自動化學(xué)院,江蘇 南京 210094)
SM2橢圓曲線公鑰加密算法的研究與實現(xiàn)
李玉生
(南京理工大學(xué) 自動化學(xué)院,江蘇 南京 210094)
隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的信息交換通過網(wǎng)絡(luò)進行,在這些信息中包含著不能為人所知的私密信息,例如,信用卡賬號、銀行賬號、病歷、電子郵件等。由于私密信息泄露產(chǎn)生不良后果的事件時有發(fā)生,這些都牽扯到對數(shù)據(jù)信息的加密問題。針對這一問題,文章提出運用SM2加密算法實現(xiàn)數(shù)據(jù)信息的加密,保證網(wǎng)絡(luò)通信的安全性。事實表明,SM2公鑰加密算法能夠更加安全地加密數(shù)據(jù)信息,且加密的數(shù)據(jù)很難破譯。
私密信息泄露;SM2加密算法;安全性;難破譯
保密通信催生了密碼技術(shù),從古到今先進的技術(shù)都首先應(yīng)用在軍事領(lǐng)域,軍隊歷來是使用密碼最頻繁的地方,保護己方秘密洞悉敵方秘密是克敵制勝的重要條件,正所謂“知己知彼,百戰(zhàn)不殆”,古代中國所使用的密碼技術(shù)主要有:陰符、陰書、虎符、信牌、字驗和礬書等。西方的傳統(tǒng)密碼技術(shù)主要包含凱撒密碼、換字式密碼、多表替代密碼、轉(zhuǎn)制式密碼等。第二次世界大戰(zhàn)密碼學(xué)得到了長遠的發(fā)展,無論是在密碼學(xué)的技術(shù)、理論,還是在應(yīng)用方面,都發(fā)生了革命性的變化。
1976年,公鑰密碼算法的思想被提出,1978年,第一個公鑰密碼算法RSA誕生了,標(biāo)志著密碼學(xué)進入了一個全新的時代。2010年國家密碼管理局提出了SM2橢圓曲線公鑰密碼算法主要包括數(shù)字簽名算法、密鑰交換協(xié)議和公鑰加密算法3部分。
本論文主要研究SM2公鑰加密算法并基于keil uVision 5軟件平臺采用C語言編程,將設(shè)計的模加、模減、模乘、模冪和模逆5個底層運算函數(shù)封裝成庫函數(shù),供點加、倍點、標(biāo)量乘函數(shù)和其他模塊調(diào)用,最后,在LPC1778硬件平臺上實現(xiàn)數(shù)據(jù)的加密與解密。
公鑰加密算法又稱非對稱加密算法,相對于只有一個密鑰的對稱加密算法,非對稱加密算法中加密密鑰和解密密鑰是一對密鑰,可以由解密密鑰通過一定的數(shù)學(xué)算法計算出加密密鑰,而加密密鑰理論上即使知道了數(shù)學(xué)算法也很難推導(dǎo)出解密密鑰,這就是密鑰在數(shù)學(xué)上的大數(shù)難解問題。由于加密密鑰是公開的,理論上任何人都可以獲得這個加密密鑰用來加密信息,但是使用加密密鑰加密的消息只有相應(yīng)的解密密鑰可以解開,而這個解密密鑰是保密的,是不公開的。非對稱密碼算法中,加密密鑰也叫作公開密鑰或公鑰,解密密鑰則稱為私人密鑰或私鑰。
例如,通信雙方A和B建立通信,公鑰密碼算法實現(xiàn)的是A和B之間的數(shù)據(jù)加密,加解密過程如圖1所示。
圖1 公鑰加密算法的加密和解密過程
A要發(fā)送消息給B,那么A必須持有B的公鑰作用于明文進行加密將加密后的密文發(fā)送給接收方B,B在接收到密文后,用自己持有的私鑰作用于密文進行解密操作,還原出A發(fā)送的明文。同樣B要發(fā)送數(shù)據(jù)給A則用自己的私鑰加密明文將生成的密文發(fā)送給接收方A,接收方A用B的公鑰解密收到的密文就能還原出B發(fā)送的明文了,但是這樣不能保證數(shù)據(jù)傳輸?shù)乃矫苄?。因為B的公鑰是公開的所以理論上獲得B的公鑰的人,都可以解密出明文信息,要實現(xiàn)B向A發(fā)送密文數(shù)據(jù),則B應(yīng)該持有A的公鑰,用A的公鑰加密數(shù)據(jù)把密文發(fā)送給A,A用自己的私鑰解密密文獲得明文信息,也就是說A和B之間相互的通信需要A的公鑰、私鑰,B的公鑰、私鑰共4把鑰匙,A 和B各持有對方的公鑰,私鑰只有A和B自己知道。
在這一過程中要保證私鑰的私密性,這樣即使密文被人截獲了,在沒有私鑰的情況下也無法破譯出密文所對應(yīng)的明文信息,僅私鑰的持有者能夠解密密文獲取明文信息,保證了信息的安全性。公鑰密碼算法的公鑰和密碼算法是公開的。原則上,B的公鑰人人都可以獲取,所以數(shù)據(jù)加密不提供身份認(rèn)證和不可抵賴的功能。關(guān)于身份認(rèn)證的內(nèi)容,即A如何確定收到的公鑰是B的,可由SM2橢圓曲線公鑰密碼算法的數(shù)字簽名算法保證。
由于對稱密碼算法加密解密使用的是同一把鑰匙,密鑰在傳遞的過程中容易遭到竊取,導(dǎo)致密鑰泄露,使用公鑰密碼算法加密數(shù)據(jù)的一大好處是通信雙方不需要事先協(xié)商加密密鑰,減少了密鑰泄露的風(fēng)險,也擴大了通信對象的范圍,所有人都可以使用公鑰密碼算法輕易地建立安全的通信信道。
2.1模運算與素數(shù)域
同余是數(shù)論中的等價關(guān)系,對于正整數(shù)m如果有a=b+km (a,b,k均是整數(shù))那么記b=a mod(m),則稱a與b關(guān)于m同余。當(dāng)m=p(p為素數(shù))時,我們定義素數(shù)域FP可由{0,1,2,3…p-1}中P個元素構(gòu)成,關(guān)于P的模運算稱為素數(shù)域上模運算。
2.2有限域上的模運算的設(shè)計與實現(xiàn)
有限域上的模運算是SM2橢圓曲線公鑰密碼算法的基礎(chǔ),主要包括模加和模減運算、模乘運算、模冪和模逆運算。
模逆運算是模運算中最復(fù)雜運算量最大的運算,模逆運算可以通過費馬小定理(n是素數(shù)的時候,和n互素的某個整數(shù)a有公式an-1=1modn成立)得到,即當(dāng)p為素數(shù)時,有ap-1=1mod p,則可得到模逆運算a-1=ap-2mod p,這樣就可以利用模冪運算來表示模逆運算。以上的這些模運算都已在LPC1778硬件平臺上實現(xiàn),如圖2所示。
圖2 模運算測試結(jié)果
2.3有限域上標(biāo)量乘運算的設(shè)計與實現(xiàn)
標(biāo)量乘的數(shù)學(xué)形式,P=(xp,yp)為橢圓曲線E(FP)上的點,k為正整數(shù),P的k倍點為Q。Q=[k]P=P+P+…+P(k 個p)。標(biāo)量乘運算是所有運算中最耗時的運算操作,主要由點加和倍點產(chǎn)生,點加和倍點運算在不同坐標(biāo)系下的運算規(guī)則不同。采用仿射與雅可比混合坐標(biāo)系下的運算規(guī)則:y2=x3+axz4+bz6,其中,a,b為橢圓曲線上的整數(shù),并且△= (4a3+27b2)mod p≠0。
三維坐標(biāo)P(x1,y1,z1),Q(x2,y2,1)的無窮遠點為(1,1,0)。倍點運算P+P=( x3,y3,z3)聲明為Padd1(x1,y1,z1,x3,y3,z3),把2P的值存入(x3,y3,z3),點加運算P+Q=(x3,y3,z3)聲明為Padd2(x1,y1,z1,x2,y2,x3,y3,z3),把P+Q的值存入(x3,y3,z3)。最后還要把結(jié)果(x3,y3,z3)從雅可比加重攝影坐標(biāo)系下轉(zhuǎn)換到仿射坐標(biāo)系下,需要對參數(shù)進行轉(zhuǎn)換:x3=x3/ z12,y3=y3/z13,即可得到所需的二維坐標(biāo)點(x3,y3)。
有了點加和倍點運算就可以進行標(biāo)量乘運算,標(biāo)量乘從右往左的算法為:
素數(shù)域橢圓曲線的參數(shù):素數(shù)域的模P,橢圓曲線E(FP)的系數(shù):a,b;E(FP)上的基點G(Gx,Gy)≠0,基點G的解為n余因子h=1,用戶A持有的用戶B的公鑰PB,用戶B持有的私鑰dB。
3.1SM2加密算法
(1)用隨機數(shù)發(fā)生器生成隨機數(shù)k,0<k<n。
(2)計算橢圓曲線上的點C1=[k]G。
(3)計算橢圓曲線點S=[h]PB,若S為無窮遠點則報錯并退出,h為余因子,這里取為1。
(4)計算橢圓曲線上的點[k]PB=(x2,y2)。
(5)計算t=KDF(x2||y2,len)若t全為0則返回1。
(6)計算C2=M⊕t。
(7)計算C3= SM3(x2||M||y2)。
(8)計算密文C=C1||C2||C3。
SM2加密流程如圖3示。
圖3 SM2加密算法流程
3.2SM2解密算法
(1)從密文中取出C1,驗證C1是否滿足橢圓曲線方程,若不滿足則報錯并退出。
(2)計算S=[h]C1,若S為無窮遠點則報錯并退出。
(3)計算 [dB]C1=(x2,y2)。
(4)計算 t=KDF(x2||y2,len)。
(5)從C中取出C2計算m= C2⊕t。
(6)計算u=SM3(x2||m||y2),若u與C3不相等,則報錯并退出。
(7)輸出明文m。
SM2解密流程如圖4所示。
圖4 SM2解密算法流程
加密解密算法在LPC1778上實現(xiàn)通過串口RS232在超級終端上的顯示結(jié)果如圖5所示,待加密的消息M為“Hello World!”。
圖5 加解密測試結(jié)果
SM2公鑰加密算法可以實現(xiàn)數(shù)據(jù)的加密,但相對于對稱密碼算法如DES,AES等對稱密碼算法計算量大,加密速度慢,所以在實際應(yīng)用中一般把公鑰密碼算法和對稱密碼算法結(jié)合起來使用,既利用了公鑰密碼算法的密鑰易于傳輸?shù)膬?yōu)點又利用了對稱密碼算法加密速度快、適合大批量數(shù)據(jù)加密的優(yōu)點。
[1]張明德,劉偉.PKI/CA與數(shù)字證書技術(shù)大全[M].北京:電子工業(yè)出版社,2015.
[2]盧開澄,盧華明.橢圓曲線密碼算法導(dǎo)引[M].北京:清華大學(xué)出版社,2008.
[3]劉合義.談數(shù)論中的同余及其應(yīng)用[J].計算機學(xué)報,2004(1):38-39.
[4]李學(xué)俊,敬忠良.基于橢圓曲線離散對數(shù)問題的公鑰密碼[J].計算機工程與應(yīng)用,2002(6):20-22.
[5]周宣武,楊曉元,黃德官,等.網(wǎng)絡(luò)中基于橢圓曲線密碼的密鑰管理方案[J].計算機工程,2004(11):89-91.
[6]國家密碼管理局.SM2橢圓曲線公鑰密碼算法[EB/OL].(2016-10-25)[2010-12-18].http://wenku.baidu.com/view/6337c57c27284b73f242501a. html.
[7]劉鐸,戴一奇.計算橢圓曲線上標(biāo)量乘的快速算法[J].計算機學(xué)報,2008(3):102-106.
[8]李輝,劉中華,易軍凱.基于偽隨機數(shù)生成器的標(biāo)量乘改進算法[J].計算機系統(tǒng)應(yīng)用,2015(1):151-155.
[9]牛廣平,馬建峰.橢圓曲線標(biāo)量乘的快速實現(xiàn)[J].計算機工程,2004(16):45-46.
[10]LAUTER K.The Advantages of Elliptic Curve Cryptography for Wireless Security.[J]Wireless Communications,2004(3):62-67.
[11]NEAL K,ALFRED M,VANSTONE S.The State of Elliptic Curve Cryptography Designs[J].Codes and Cryptography,2010(1):173-193.
Research and realization of SM2 elliptic curve public key encryption algorithm
Li Yusheng
(Automation School of Nanjing University of Science and Technology, Nanjing 210094,China)
With the development of the Internet, more and more information is exchanged through the network, among those information, there are some private information that can not be known by others, for example, credit card accounts, bank accounts, medical record, e-mail, etc. Bad consequences caused by private information leakage occurred frequently, which is involved in the encryption of data information. In view of this problem, this paper proposes the use of SM2 encryption algorithm to achieve data encryption and ensure the security of network communication. Facts show that the SM2 public key encryption algorithm can encrypt data more safely, and the encryption data is difficult to decipher.
private information leakage; SM2 encryption algorithm; security; difficult to decipher
李玉生(1989— ),男,江蘇徐州,碩士研究生;研究方向:arm嵌入式軟件開發(fā),SM2公鑰密碼算法。