本發明涉及網絡空間安全的技術領域,尤其涉及到一種基于sm2加解密算法的簽名驗簽系統和方法。
背景技術:
隨著網絡安全問題日趨嚴重,造成的影響越來越大,數字簽名驗簽應運而生;數字簽名可實現用戶身份的可靠性;實現信息的完整性;確保數據在存儲、傳輸和處理的過程中免遭任何非授權的或非預期的修改、插入、刪除、重發等破壞,從而實現數據的真實性、有效性和一致性;實現抗抵賴性,通過數字簽名確保信息的發送方不能抵賴曾經發送的信息,不能否認自己的操作行為。
sm2算法是國家密碼管理局于2010年12月17日發布的橢圓曲線公鑰密碼算法,其與rsa算法相比更先進安全,被應用于數字簽名驗簽。
目前很多軟件方法實現sm2簽名驗簽步驟中的運算模塊都采用了openssl安全套接字層密碼庫,該囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及ssl協議,并提供豐富的應用程序供測試或其它目的使用。但缺點是:(1)openssl被曝出現了嚴重安全漏洞,黑客可利用此漏洞直接對個人電腦發起“心臟出血”(heartbleed)攻擊;windows上有大量軟件使用了存在漏洞的openssl代碼庫,可能被黑客攻擊抓取用戶電腦上的內存數據,安全性較差。(2)單純使用軟件方法實現sm2簽名驗簽,其運算速度較慢,不能滿足用戶的需求。
而若單純地通過硬件實現簽名驗簽,其不可操作性和較差的兼容性也決定了其跟不上多元化時代的步伐。
技術實現要素:
本發明的目的在于克服現有技術的不足,提供一種軟硬件協同合作、安全性高、可控性強、兼容性好、運算效率高的基于sm2加解密算法的簽名驗簽系統。
為實現上述目的,本發明所提供的技術方案為:包括軟件模塊和硬件模塊;所述硬件模塊包括運算模塊、寄存器以及隨機數發生器;其中,
所述隨機數發生器,產生用于算法的隨機數、分別對明密文進行加解密的對稱密鑰、分別對對稱密鑰進行加解密的接收方公鑰和私鑰以及分別對摘要和數字簽名進行加密和解密的發送方私鑰和公鑰;
所述運算模塊,用于運算加解密過程中sm2、sm3以及sm4的算法;該三種算法均為國密算法,由國家密碼局發布;其中,sm2算法為橢圓曲線公鑰密碼算法,sm2標準包括總則,數字簽名算法,密鑰交換協議,公鑰加密算法四個部分,數字簽名算法,密鑰交換協議以及公鑰加密算法都使用了國家密管理局批準的sm3算法和隨機數發生器;sm3算法為雜湊算法,給出了雜湊函數算法的計算方法和計算步驟,適用于商用密碼應用中的數字簽名和驗證,消息認證碼的生成與驗證以及隨機數的生成,可滿足多種密碼應用的安全需求;sm4為對稱算法,一個分組算法,用于無線局域網產品;解密算法與加密算法的結構相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。
所述軟件模塊,用于實現簽名驗簽功能;
所述寄存器,被軟件模塊訪問調度運算模塊。
為實現上述目的,本發明還提供一種用于基于sm2加解密算法的簽名驗簽系統的方法,其包括簽名加密和驗簽解密,其中,
簽名加密包括以下步驟:
1)調用隨機數發生器產生對稱密鑰、發送方公鑰和私鑰、接收方公鑰和私鑰;
2)軟件模塊通過訪問寄存器調度運算模塊進行sm4加密算法運算,使在對稱密鑰的基礎上對所要發送的明文進行加密,得到報文密文;
3)軟件模塊通過訪問寄存器調度運算模塊進行sm2加密算法運算,使在接收方公鑰的基礎上對對稱密鑰進行加密,得到對稱密鑰密文;
4)軟件模塊通過訪問寄存器調度運算模塊對步驟2)得到的報文密文進行sm3算法運算,形成摘要;
5)軟件模塊通過訪問寄存器調度運算模塊進行sm2加密算法運算,使在發送方私鑰的基礎上對步驟4)形成的摘要進行加密,生成數字簽名;
6)發送方將數字簽名和報文密文一起發送給接收方;
驗簽解密包括以下步驟:
(1接收方接收發送過來的數字簽名和報文密文;
(2軟件模塊通過訪問寄存器調度運算模塊對報文密文進行sm3算法運算,得到新的摘要;
(3軟件模塊通過訪問寄存器調度運算模塊進行sm2解密算法運算,使在發送方公鑰的基礎上對數字簽名進行解密,得到原來的摘要;
(4對兩個摘要進行對比,若相同則軟件模塊通過訪問寄存器調度運算模塊進行sm2解密算法運算,使在接收方私鑰的基礎上對對稱密鑰密文進行解密,得到對稱密鑰;
(5軟件模塊通過訪問寄存器調度運算模塊進行sm4算法運算,使在對稱密鑰的基礎上對報文密文進行解密,得到明文。
進一步地,所述sm3算法由軟硬件協同實現,其中,sm3算法由運算模塊執行,過程如下:
1))填充
sm3對消息長度小于為2^64位進行運算,假設消息m的長度為l比特,先將比特“1”添加到消息的末尾,另添加k個“0”,k為滿足l+1+k=448mod512的最小的非負整數,然后另添加一個64位比特串,該比特串為長度l的二進制表示,填充后的消息m′的比特長度為512的倍數;
2))迭代壓縮
先進行消息擴展,之后迭代與壓縮,其擴展與壓縮計算以循環移位為主,并有異或計算,填充的消息經擴展后再進行64輪迭代,最后計算出雜湊結果;
sm3算法的軟件調度部分如下:
通過配置硬件寄存器的地址,對所有的接口寄存器進行訪問,其中需要調度的有狀態寄存器、控制寄存器和數據寄存器;根據大小端的不同,將數據寫入輸入寄存器,通過對控制寄存器的操作實現相應的運算,對狀態寄存器的讀取,判斷計算是否完成,在計算完成后讀取輸出寄存器的值作為輸出。
進一步地,所述sm2加解密算法由軟硬件協同實現,計算部分由運算模塊實現,軟件部分實現簽名驗簽功能。
進一步地,所述sm2加解密算法實現簽名驗簽過程中需要對輸入數據進行預處理,預處理中用到的數據均采用大端表示法,在此過程中需要兩次求得字節流的雜湊值,最終的雜湊值即明文的摘要作為簽名函數的真正輸入。
進一步地,所述sm2加解密算法包括模運算和點運算;其中,模運算包括模加、模減、模乘、模逆,模乘運算采用交錯算法,模逆采用二進制歐拉算法,同時將模乘、模逆合并實現模逆乘;點運算包括點加、點乘、倍點運算,點加、倍點調度引入投影坐標,減少模逆的運算時間。
本方案原理及優點如下:
簽名驗簽過程中產生的隨機數由隨機數發生器產生,極大地提高數據的安全性;方案中的運算部分均由硬件模塊實現,軟件模塊實現簽名驗簽功能,通過軟硬件協同合作,相比于純軟件實現,極大地提高運算速度,相比于純硬件實現的不可操作性,具有更強的可控、可編程、可移植性、兼容性。
附圖說明
圖1為本發明的加解密流程圖;
圖2為本發明中系統的結構示意圖。
具體實施方式
下面結合具體實施例對本發明作進一步說明:
參見附圖1-2所示,本實施例所述的一種基于sm2加解密算法的簽名驗簽系統,包括軟件模塊1和硬件模塊2;所述硬件模塊2包括運算模塊3、寄存器4以及隨機數發生器5;其中,
所述隨機數發生器5,產生用于算法的隨機數、分別對明密文進行加解密的對稱密鑰、分別對對稱密鑰進行加解密的接收方公鑰和私鑰以及分別對摘要和數字簽名進行加密和解密的發送方私鑰和公鑰;
運算模塊3,用于運算加解密過程中sm2、sm3以及sm4的算法;
軟件模塊1,用于實現簽名驗簽功能;
寄存器4,被軟件模塊1訪問調度運算模塊3。
簽名加密時,經過以下步驟:
1)調用隨機數發生器產生對稱密鑰、發送方公鑰和私鑰、接收方公鑰和私鑰;
2)軟件模塊1通過訪問寄存器4調度運算模塊3進行sm4加密算法運算,使在對稱密鑰的基礎上對所要發送的明文進行加密,得到報文密文;
3)軟件模塊1通過訪問寄存器4調度運算模塊3進行sm2加密算法運算,使在接收方公鑰的基礎上對對稱密鑰進行加密,得到對稱密鑰密文;
4)軟件模塊1通過訪問寄存器4調度運算模塊3對步驟2)得到的報文密文進行sm3算法運算,形成摘要;
5)軟件模塊1通過訪問寄存器4調度運算模塊3進行sm2加密算法運算,使在發送方私鑰的基礎上對步驟4)形成的摘要進行加密,生成數字簽名;
6)發送方將數字簽名和報文密文一起發送給接收方;
簽名加密時,經過以下步驟:
(1接收方接收發送過來的數字簽名和報文密文;
(2軟件模塊1通過訪問寄存器4調度運算模塊3對報文密文進行sm3算法運算,得到新的摘要;
(3軟件模塊1通過訪問寄存器4調度運算模塊3進行sm2解密算法運算,使在發送方公鑰的基礎上對數字簽名進行解密,得到原來的摘要;
(4對兩個摘要進行對比,若相同則軟件模塊1通過訪問寄存器4調度運算模塊3進行sm2解密算法運算,使在接收方私鑰的基礎上對對稱密鑰密文進行解密,得到對稱密鑰;
(5軟件模塊1通過訪問寄存器4調度運算模塊3進行sm4算法運算,使在對稱密鑰的基礎上對報文密文進行解密,得到明文。
本實施例中,sm2和sm3算法均由軟硬件協同實現。其中,sm2算法由硬件模塊2中的運算模塊3執行,其加解密算法包括模運算和點運算,模運算包括模加、模減、模乘、模逆,模乘運算采用交錯算法,模逆采用二進制歐拉算法,同時將模乘、模逆合并實現模逆乘;點運算包括點加、點乘、倍點運算,點加、倍點調度引入投影坐標,減少模逆的運算時間。
sm2加解密算法實現簽名驗簽過程中需要對輸入數據進行預處理,預處理中用到的數據均采用大端表示法,在此過程中需要兩次求得字節流的雜湊值,最終的雜湊值即明文的摘要作為簽名函數的真正輸入。
而sm3算法由運算模塊執行,過程如下:
1))填充
sm3對消息長度小于為2^64位進行運算,假設消息m的長度為l比特,先將比特“1”添加到消息的末尾,另添加k個“0”,k為滿足l+1+k=448mod512的最小的非負整數,然后另添加一個64位比特串,該比特串為長度l的二進制表示,填充后的消息m′的比特長度為512的倍數;
3))迭代壓縮
先進行消息擴展,之后迭代與壓縮,其擴展與壓縮計算以循環移位為主,并有異或計算,填充的消息經擴展后再進行64輪迭代,最后計算出雜湊結果;
sm3算法的軟件調度部分如下:
通過配置硬件寄存器的地址,對所有的接口寄存器進行訪問,其中需要調度的有狀態寄存器、控制寄存器和數據寄存器;根據大小端的不同,將數據寫入輸入寄存器,通過對控制寄存器的操作實現相應的運算,對狀態寄存器的讀取,判斷計算是否完成,在計算完成后讀取輸出寄存器的值作為輸出。
本實施例中,簽名驗簽過程中產生的隨機數由隨機數發生器產生,極大地提高了數據的安全性;方案中的運算部分均由硬件模塊實現,軟件模塊實現簽名驗簽功能,通過軟硬件協同合作,相比于純軟件實現極大地提高了運算速度,相比于純硬件實現的不可操作性,具有更強的可控、可編程、可移植性、兼容性。
以上所述之實施例子只為本發明之較佳實施例,并非以此限制本發明的實施范圍,故凡依本發明之形狀、原理所作的變化,均應涵蓋在本發明的保護范圍內。