李玉生
(南京理工大學 自動化學院,江蘇 南京 210094)
SM2橢圓曲線公鑰加密算法的研究與實現
李玉生
(南京理工大學 自動化學院,江蘇 南京 210094)
隨著互聯網的發(fā)展,越來越多的信息交換通過網絡進行,在這些信息中包含著不能為人所知的私密信息,例如,信用卡賬號、銀行賬號、病歷、電子郵件等。由于私密信息泄露產生不良后果的事件時有發(fā)生,這些都牽扯到對數據信息的加密問題。針對這一問題,文章提出運用SM2加密算法實現數據信息的加密,保證網絡通信的安全性。事實表明,SM2公鑰加密算法能夠更加安全地加密數據信息,且加密的數據很難破譯。
私密信息泄露;SM2加密算法;安全性;難破譯
保密通信催生了密碼技術,從古到今先進的技術都首先應用在軍事領域,軍隊歷來是使用密碼最頻繁的地方,保護己方秘密洞悉敵方秘密是克敵制勝的重要條件,正所謂“知己知彼,百戰(zhàn)不殆”,古代中國所使用的密碼技術主要有:陰符、陰書、虎符、信牌、字驗和礬書等。西方的傳統(tǒng)密碼技術主要包含凱撒密碼、換字式密碼、多表替代密碼、轉制式密碼等。第二次世界大戰(zhàn)密碼學得到了長遠的發(fā)展,無論是在密碼學的技術、理論,還是在應用方面,都發(fā)生了革命性的變化。
1976年,公鑰密碼算法的思想被提出,1978年,第一個公鑰密碼算法RSA誕生了,標志著密碼學進入了一個全新的時代。2010年國家密碼管理局提出了SM2橢圓曲線公鑰密碼算法主要包括數字簽名算法、密鑰交換協(xié)議和公鑰加密算法3部分。
本論文主要研究SM2公鑰加密算法并基于keil uVision 5軟件平臺采用C語言編程,將設計的模加、模減、模乘、模冪和模逆5個底層運算函數封裝成庫函數,供點加、倍點、標量乘函數和其他模塊調用,最后,在LPC1778硬件平臺上實現數據的加密與解密。
公鑰加密算法又稱非對稱加密算法,相對于只有一個密鑰的對稱加密算法,非對稱加密算法中加密密鑰和解密密鑰是一對密鑰,可以由解密密鑰通過一定的數學算法計算出加密密鑰,而加密密鑰理論上即使知道了數學算法也很難推導出解密密鑰,這就是密鑰在數學上的大數難解問題。由于加密密鑰是公開的,理論上任何人都可以獲得這個加密密鑰用來加密信息,但是使用加密密鑰加密的消息只有相應的解密密鑰可以解開,而這個解密密鑰是保密的,是不公開的。非對稱密碼算法中,加密密鑰也叫作公開密鑰或公鑰,解密密鑰則稱為私人密鑰或私鑰。
例如,通信雙方A和B建立通信,公鑰密碼算法實現的是A和B之間的數據加密,加解密過程如圖1所示。

圖1 公鑰加密算法的加密和解密過程
A要發(fā)送消息給B,那么A必須持有B的公鑰作用于明文進行加密將加密后的密文發(fā)送給接收方B,B在接收到密文后,用自己持有的私鑰作用于密文進行解密操作,還原出A發(fā)送的明文。同樣B要發(fā)送數據給A則用自己的私鑰加密明文將生成的密文發(fā)送給接收方A,接收方A用B的公鑰解密收到的密文就能還原出B發(fā)送的明文了,但是這樣不能保證數據傳輸的私密性。因為B的公鑰是公開的所以理論上獲得B的公鑰的人,都可以解密出明文信息,要實現B向A發(fā)送密文數據,則B應該持有A的公鑰,用A的公鑰加密數據把密文發(fā)送給A,A用自己的私鑰解密密文獲得明文信息,也就是說A和B之間相互的通信需要A的公鑰、私鑰,B的公鑰、私鑰共4把鑰匙,A 和B各持有對方的公鑰,私鑰只有A和B自己知道。
在這一過程中要保證私鑰的私密性,這樣即使密文被人截獲了,在沒有私鑰的情況下也無法破譯出密文所對應的明文信息,僅私鑰的持有者能夠解密密文獲取明文信息,保證了信息的安全性。公鑰密碼算法的公鑰和密碼算法是公開的。原則上,B的公鑰人人都可以獲取,所以數據加密不提供身份認證和不可抵賴的功能。關于身份認證的內容,即A如何確定收到的公鑰是B的,可由SM2橢圓曲線公鑰密碼算法的數字簽名算法保證。
由于對稱密碼算法加密解密使用的是同一把鑰匙,密鑰在傳遞的過程中容易遭到竊取,導致密鑰泄露,使用公鑰密碼算法加密數據的一大好處是通信雙方不需要事先協(xié)商加密密鑰,減少了密鑰泄露的風險,也擴大了通信對象的范圍,所有人都可以使用公鑰密碼算法輕易地建立安全的通信信道。
2.1模運算與素數域
同余是數論中的等價關系,對于正整數m如果有a=b+km (a,b,k均是整數)那么記b=a mod(m),則稱a與b關于m同余。當m=p(p為素數)時,我們定義素數域FP可由{0,1,2,3…p-1}中P個元素構成,關于P的模運算稱為素數域上模運算。
2.2有限域上的模運算的設計與實現
有限域上的模運算是SM2橢圓曲線公鑰密碼算法的基礎,主要包括模加和模減運算、模乘運算、模冪和模逆運算。
模逆運算是模運算中最復雜運算量最大的運算,模逆運算可以通過費馬小定理(n是素數的時候,和n互素的某個整數a有公式an-1=1modn成立)得到,即當p為素數時,有ap-1=1mod p,則可得到模逆運算a-1=ap-2mod p,這樣就可以利用模冪運算來表示模逆運算。以上的這些模運算都已在LPC1778硬件平臺上實現,如圖2所示。

圖2 模運算測試結果
2.3有限域上標量乘運算的設計與實現
標量乘的數學形式,P=(xp,yp)為橢圓曲線E(FP)上的點,k為正整數,P的k倍點為Q。Q=[k]P=P+P+…+P(k 個p)。標量乘運算是所有運算中最耗時的運算操作,主要由點加和倍點產生,點加和倍點運算在不同坐標系下的運算規(guī)則不同。采用仿射與雅可比混合坐標系下的運算規(guī)則:y2=x3+axz4+bz6,其中,a,b為橢圓曲線上的整數,并且△= (4a3+27b2)mod p≠0。
三維坐標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)。最后還要把結果(x3,y3,z3)從雅可比加重攝影坐標系下轉換到仿射坐標系下,需要對參數進行轉換:x3=x3/ z12,y3=y3/z13,即可得到所需的二維坐標點(x3,y3)。
有了點加和倍點運算就可以進行標量乘運算,標量乘從右往左的算法為:

素數域橢圓曲線的參數:素數域的模P,橢圓曲線E(FP)的系數:a,b;E(FP)上的基點G(Gx,Gy)≠0,基點G的解為n余因子h=1,用戶A持有的用戶B的公鑰PB,用戶B持有的私鑰dB。
3.1SM2加密算法
(1)用隨機數發(fā)生器生成隨機數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上實現通過串口RS232在超級終端上的顯示結果如圖5所示,待加密的消息M為“Hello World!”。

圖5 加解密測試結果
SM2公鑰加密算法可以實現數據的加密,但相對于對稱密碼算法如DES,AES等對稱密碼算法計算量大,加密速度慢,所以在實際應用中一般把公鑰密碼算法和對稱密碼算法結合起來使用,既利用了公鑰密碼算法的密鑰易于傳輸的優(yōu)點又利用了對稱密碼算法加密速度快、適合大批量數據加密的優(yōu)點。
[1]張明德,劉偉.PKI/CA與數字證書技術大全[M].北京:電子工業(yè)出版社,2015.
[2]盧開澄,盧華明.橢圓曲線密碼算法導引[M].北京:清華大學出版社,2008.
[3]劉合義.談數論中的同余及其應用[J].計算機學報,2004(1):38-39.
[4]李學俊,敬忠良.基于橢圓曲線離散對數問題的公鑰密碼[J].計算機工程與應用,2002(6):20-22.
[5]周宣武,楊曉元,黃德官,等.網絡中基于橢圓曲線密碼的密鑰管理方案[J].計算機工程,2004(11):89-91.
[6]國家密碼管理局.SM2橢圓曲線公鑰密碼算法[EB/OL].(2016-10-25)[2010-12-18].http://wenku.baidu.com/view/6337c57c27284b73f242501a. html.
[7]劉鐸,戴一奇.計算橢圓曲線上標量乘的快速算法[J].計算機學報,2008(3):102-106.
[8]李輝,劉中華,易軍凱.基于偽隨機數生成器的標量乘改進算法[J].計算機系統(tǒng)應用,2015(1):151-155.
[9]牛廣平,馬建峰.橢圓曲線標量乘的快速實現[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公鑰密碼算法。