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