本發(fā)明涉及信息安全領(lǐng)域中的消息加密和解密技術(shù),特別涉及一種素域fp下的sm2橢圓曲線公鑰加密算法的硬件實(shí)現(xiàn)系統(tǒng)。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,人們對(duì)網(wǎng)絡(luò)安全問題的關(guān)注越來越大。信息加密和解密技術(shù)在網(wǎng)絡(luò)安全領(lǐng)域中應(yīng)用廣泛,可保證信息的安全,防止信息在傳輸過程中受到攻擊,從而被不法分子截取或破壞。
sm2是國家密碼管理局于2010年12月17日發(fā)布的橢圓曲線公鑰密碼算法,與傳統(tǒng)的公鑰密碼體制(例如rsa密碼體制)相比,橢圓曲線密碼體制使用相對(duì)比較短的密鑰就可以達(dá)到相同的安全程度。因此,更短的密鑰使得橢圓曲線密碼體制的應(yīng)用范圍更加廣泛。
雖然國家密碼局早在2010年就公布了sm2橢圓曲線公鑰加密算法,但是目前將其用硬件實(shí)現(xiàn)的方案還比較少,并且現(xiàn)有的硬件實(shí)現(xiàn)方案的硬件資源消耗較大。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種素域fp下的sm2橢圓曲線公鑰加密算法的硬件實(shí)現(xiàn)系統(tǒng),該系統(tǒng)在素域fp下,采用高層次的模塊化方法,對(duì)系統(tǒng)進(jìn)行了合理的劃分,將系統(tǒng)劃分為多個(gè)模塊,采用硬件模塊復(fù)用的方法,通過設(shè)置上層復(fù)選模塊,實(shí)現(xiàn)了對(duì)隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊的復(fù)用,通過設(shè)置下層復(fù)選模塊,實(shí)現(xiàn)了對(duì)點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊的復(fù)用,從而提供了一種所用硬件資源更少,成本更低、運(yùn)行速度更快、結(jié)構(gòu)簡(jiǎn)單、易于實(shí)現(xiàn)的sm2橢圓曲線公鑰加密算法的硬件實(shí)現(xiàn)系統(tǒng)。
為解決上述技術(shù)問題,本發(fā)明提供一種素域fp下的sm2橢圓曲線公鑰加密算法的硬件實(shí)現(xiàn)系統(tǒng),該系統(tǒng)可以對(duì)傳輸?shù)南⑦M(jìn)行加密和解密,該系統(tǒng)所用到的模塊包括:sm2主控模塊、sm2解析模塊、加密控制模塊、解密控制模塊、上層復(fù)選模塊、隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊、下層復(fù)選模塊、點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊,其中:
所述sm2主控模塊:用于與所述sm2解析模塊進(jìn)行通信,進(jìn)而調(diào)用加密控制模塊和解密控制模塊對(duì)消息進(jìn)行加密和解密;
所述sm2解析模塊:用于解析所述sm2主控模塊發(fā)出的命令,確定系統(tǒng)當(dāng)前時(shí)間要實(shí)現(xiàn)的是消息加密還是消息解密功能,并將進(jìn)行消息加密的命令發(fā)送給所述加密控制模塊,將進(jìn)行消息解密的命令發(fā)送給解密控制模塊;
所述加密控制模塊:用于在收到所述sm2解析模塊發(fā)送的進(jìn)行消息加密的命令后,與所述上層復(fù)選模塊進(jìn)行通信,通過所述上層復(fù)選模塊調(diào)用所述隨機(jī)數(shù)生成模塊、所述運(yùn)算控制模塊、所述比特串處理模塊、所述密鑰派生模塊、所述雜湊模塊,通過所述下層復(fù)選模塊調(diào)用所述點(diǎn)乘運(yùn)算模塊、所述異或運(yùn)算模塊、所述比特串轉(zhuǎn)換模塊、所述比特串拼接模塊,對(duì)消息進(jìn)行加密;
所述解密控制模塊:用于在收到所述sm2解析模塊發(fā)送的進(jìn)行消息解密的命令后,與所述上層復(fù)選模塊進(jìn)行通信,通過所述上層復(fù)選模塊調(diào)用所述隨機(jī)數(shù)生成模塊、所述運(yùn)算控制模塊、所述比特串處理模塊、所述密鑰派生模塊、所述雜湊模塊,通過所述下層復(fù)選模塊調(diào)用所述點(diǎn)乘運(yùn)算模塊、所述異或運(yùn)算模塊、所述比特串轉(zhuǎn)換模塊、所述比特串拼接模塊,對(duì)消息進(jìn)行解密;
所述上層復(fù)選模塊:用于當(dāng)系統(tǒng)要進(jìn)行消息加密時(shí),所述加密控制模塊與所述上層復(fù)選模塊進(jìn)行通信,通過所述上層復(fù)選模塊調(diào)用所述隨機(jī)數(shù)生成模塊、所述運(yùn)算控制模塊、所述比特串處理模塊、所述密鑰派生模塊、所述雜湊模塊進(jìn)行消息加密,當(dāng)系統(tǒng)要進(jìn)行消息解密時(shí),所述解密控制模塊與所述上層復(fù)選模塊進(jìn)行通信,通過所述上層復(fù)選模塊調(diào)用所述隨機(jī)數(shù)生成模塊、所述運(yùn)算控制模塊、所述比特串處理模塊、所述密鑰派生模塊、所述雜湊模塊進(jìn)行消息解密;
所述隨機(jī)數(shù)生成模塊:用于生成隨機(jī)數(shù)k∈[1,n-1];
所述運(yùn)算控制模塊:用于通過所述下層復(fù)選模塊來調(diào)用所述點(diǎn)乘運(yùn)算模塊和所述異或運(yùn)算模塊,完成點(diǎn)乘運(yùn)算和異或運(yùn)算;
所述比特串處理模塊:用于通過所述下層復(fù)選模塊來調(diào)用所述比特串轉(zhuǎn)換模塊和所述比特串拼接模塊,完成比特串轉(zhuǎn)換和比特串拼接;
所述密鑰派生模塊:用于進(jìn)行密鑰派生運(yùn)算,生成密鑰數(shù)據(jù)比特串;
所述雜湊模塊:用于采用sm3密碼雜湊算法,進(jìn)行密碼雜湊運(yùn)算,產(chǎn)生相應(yīng)的雜湊值;
所述下層復(fù)選模塊:用于當(dāng)系統(tǒng)要進(jìn)行點(diǎn)乘運(yùn)算和異或運(yùn)算時(shí),所述運(yùn)算控制模塊與所述下層復(fù)選模塊通信,通過所述下層復(fù)選模塊調(diào)用所述點(diǎn)乘運(yùn)算模塊和所述異或運(yùn)算模塊,完成點(diǎn)乘運(yùn)算和異或運(yùn)算;當(dāng)系統(tǒng)要進(jìn)行比特串轉(zhuǎn)換和比特串拼接時(shí),所述比特串處理模塊與所述下層復(fù)選模塊通信,通過所述下層復(fù)選模塊調(diào)用所述比特串轉(zhuǎn)換模塊和所述比特串拼接模塊,完成比特串轉(zhuǎn)換和比特串拼接;
所述點(diǎn)乘運(yùn)算模塊:用于完成消息加密和消息解密過程中所需的點(diǎn)乘運(yùn)算;
所述異或運(yùn)算模塊:用于完成消息加密和解密過程中所需的異或運(yùn)算;
所述比特串轉(zhuǎn)換模塊:用于將橢圓曲線上的點(diǎn)轉(zhuǎn)換為與之相對(duì)應(yīng)的比特串,將比特串轉(zhuǎn)換為橢圓曲線上與之相對(duì)應(yīng)的點(diǎn);
所述比特串拼接模塊:用于將兩個(gè)以上的比特串進(jìn)行拼接,使之成為一個(gè)比特串。
在系統(tǒng)的設(shè)計(jì)過程中,采用了高層次的模塊化方法,按照硬件占用資源少、成本低、系統(tǒng)運(yùn)行速度快,結(jié)構(gòu)簡(jiǎn)單、易實(shí)現(xiàn)的原則,將系統(tǒng)進(jìn)行了合理的劃分,具體劃分為所述sm2主控模塊、所述sm2解析模塊、所述加密控制模塊、所述解密控制模塊、所述上層復(fù)選模塊、所述隨機(jī)數(shù)生成模塊、所述運(yùn)算控制模塊、所述比特串處理模塊、所述密鑰派生模塊、所述雜湊模塊、所述下層復(fù)選模塊、所述點(diǎn)乘運(yùn)算模塊、所述異或運(yùn)算模塊、所述比特串轉(zhuǎn)換模塊、所述比特串拼接模塊,每個(gè)模塊可實(shí)現(xiàn)相應(yīng)的功能。
所述比特串拼接模塊采用首尾依次相接進(jìn)行拼接。
一種素域fp下的sm2橢圓曲線公鑰密碼算法中利用公鑰加密算法來加密消息的實(shí)現(xiàn)方法,包括如下步驟:
步驟一:通過上層復(fù)選模塊調(diào)用隨機(jī)數(shù)生成模塊,產(chǎn)生隨機(jī)數(shù)k∈[1,n-1];
步驟二:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊,計(jì)算c1=[k]g=(x1,y1)和s=[h]pb;
步驟三:檢驗(yàn)s是否為無窮遠(yuǎn)點(diǎn),若s是無窮遠(yuǎn)點(diǎn),則報(bào)錯(cuò)并退出,若s不是無窮遠(yuǎn)點(diǎn),則執(zhí)行步驟四;
步驟四:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊,計(jì)算[k]pb=(x2,y2);
步驟五:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串轉(zhuǎn)換模塊,將點(diǎn)(x1,y1)和點(diǎn)(x2,y2)轉(zhuǎn)換為相應(yīng)的比特串,調(diào)用比特串拼接模塊,拼接比特串x2和y2,得比特串x2||y2;
步驟六:通過上層復(fù)選模塊來調(diào)用密鑰派生模塊,對(duì)比特串x2||y2和整數(shù)klen進(jìn)行密鑰派生運(yùn)算,得比特串t;
步驟七:檢驗(yàn)t是否為全為0的比特串,若是則返回步驟一,若否則執(zhí)行步驟八;
步驟八:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用異或運(yùn)算模塊,計(jì)算
步驟九:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串拼接模塊,拼接比特串x2、m和y2,得比特串x2||m||y2;
步驟十:通過上層復(fù)選模塊調(diào)用雜湊模塊,對(duì)比特串x2||m||y2進(jìn)行密碼雜湊運(yùn)算,得雜湊值c3;
步驟十一:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串拼接模塊,拼接比特串c1、c2和c3,得到密文c=c1||c2||c3。
在加密消息的過程中,采用硬件模塊復(fù)用的方法,通過運(yùn)用上層復(fù)選模塊,實(shí)現(xiàn)了對(duì)隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊的復(fù)用,通過運(yùn)用下層復(fù)選模塊,實(shí)現(xiàn)了對(duì)點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊的復(fù)用。
一種素域fp下的sm2橢圓曲線公鑰密碼算法中利用公鑰加密算法來解密密文的實(shí)現(xiàn)方法,其特征在于,包括如下步驟:
步驟一:從密文c中取出比特串c1,比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串轉(zhuǎn)換模塊,將比特串c1轉(zhuǎn)換為點(diǎn)c1;
步驟二:檢驗(yàn)點(diǎn)c1是否滿足橢圓曲線方程,若不滿足則報(bào)錯(cuò)并退出,若滿足則執(zhí)行步驟三;
步驟三:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊,計(jì)算s’=[h]c1;
步驟四:檢驗(yàn)是s’否為無窮遠(yuǎn)點(diǎn),若s’是無窮遠(yuǎn)點(diǎn),則報(bào)錯(cuò)并退出,若s’不是無窮遠(yuǎn)點(diǎn),則執(zhí)行步驟五;
步驟五:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊,計(jì)算[db]c1=(x2’,y2’);
步驟六:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串轉(zhuǎn)換模塊,將坐標(biāo)x2’和y2’轉(zhuǎn)換為與之相對(duì)應(yīng)的比特串,調(diào)用比特串拼接模塊,拼接比特串x2’和y2’,得到比特串x2’||y2’;
步驟七:通過上層復(fù)選模塊來調(diào)用密鑰派生模塊,對(duì)比特串x2’||y2’和整數(shù)klen進(jìn)行密鑰派生運(yùn)算,得比特串t’;
步驟八:檢驗(yàn)t’是否為全為0的比特串,若是則報(bào)錯(cuò)并退出,若否則執(zhí)行步驟九;
步驟九:從密文c中取出比特串c2,運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用異或運(yùn)算模塊,計(jì)算
步驟十:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串拼接模塊,拼接比特串x2’、m’和y2’,得到比特串x2’||m’||y2’;
步驟十一:通過上層復(fù)選模塊調(diào)用雜湊模塊,對(duì)比特串x2’||m’||y2’進(jìn)行密碼雜湊運(yùn)算,得到雜湊值u;
步驟十二:從密文c中取出比特串c3;
步驟十三:檢驗(yàn)u=c3是否成立,若不成立則報(bào)錯(cuò)并退出,若成立則執(zhí)行步驟十四;
步驟十四:輸出解密后的明文m’。
在解密密文的過程中,采用硬件模塊復(fù)用的方法,通過運(yùn)用上層復(fù)選模塊,實(shí)現(xiàn)了對(duì)隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊的復(fù)用,通過運(yùn)用下層復(fù)選模塊,實(shí)現(xiàn)了對(duì)點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊的復(fù)用。
本發(fā)明相對(duì)于現(xiàn)有技術(shù)具有如下的優(yōu)點(diǎn)及效果:
(1)本發(fā)明在系統(tǒng)的設(shè)計(jì)過程中,采用了高層次的模塊化方法,即按照硬件占用資源少、成本低、系統(tǒng)運(yùn)行速度較快,結(jié)構(gòu)簡(jiǎn)單、易實(shí)現(xiàn)的原則,將系統(tǒng)進(jìn)行了合理的劃分,具體劃分為sm2主控模塊、sm2解析模塊、加密控制模塊、解密控制模塊、上層復(fù)選模塊、隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊、下層復(fù)選模塊、點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊,每個(gè)模塊可實(shí)現(xiàn)相應(yīng)的功能。通過這種高層次的模塊劃分方法,大大減少了系統(tǒng)硬件資源的使用,降低了成本,加快了系統(tǒng)的運(yùn)行速度,同時(shí)結(jié)構(gòu)簡(jiǎn)單、易于實(shí)現(xiàn)。
(2)本發(fā)明采用硬件模塊復(fù)用的方法,通過運(yùn)用上層復(fù)選模塊,實(shí)現(xiàn)了對(duì)隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊的復(fù)用,通過運(yùn)用下層復(fù)選模塊,實(shí)現(xiàn)了對(duì)點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊的復(fù)用,從而大大減少了系統(tǒng)硬件資源的使用,降低了成本。
(3)本發(fā)明采用硬件的方法來實(shí)現(xiàn)sm2橢圓曲線加密算法中對(duì)消息的加密和解密,與軟件實(shí)現(xiàn)方法相比,硬件實(shí)現(xiàn)方法的運(yùn)行速度更快、安全性更高,同時(shí)可以集成到多種加密芯片等硬件設(shè)備上,應(yīng)用廣泛,可產(chǎn)生極大的經(jīng)濟(jì)效益和社會(huì)效益。
附圖說明
圖1為本發(fā)明提供的一種素域fp下的sm2橢圓曲線公鑰加密算法的硬件實(shí)現(xiàn)系統(tǒng)的整體結(jié)構(gòu)圖;
圖2是在素域fp下的sm2橢圓曲線公鑰密碼算法中利用公鑰加密算法來加密消息的流程圖;
圖3是在素域fp下的sm2橢圓曲線公鑰密碼算法中利用公鑰加密算法來解密密文的流程圖。
具體實(shí)施方式
下面結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述,但本發(fā)明的實(shí)施方式不限于此。
實(shí)施例
本發(fā)明提供一種素域fp下的sm2橢圓曲線公鑰加密算法的硬件實(shí)現(xiàn)系統(tǒng),本發(fā)明中所涉及到的sm2橢圓曲線和算法均是定義在素域fp上的,其中p為大于3的素?cái)?shù)。素域fp上的橢圓曲線方程為y2x3+ax+b,其中a,b∈fp,且(4a3+27b2)modp≠0。
圖1為本發(fā)明提供的一種素域fp下的sm2橢圓曲線公鑰加密算法的硬件實(shí)現(xiàn)系統(tǒng)的整體結(jié)構(gòu)圖,該系統(tǒng)能夠從硬件上,實(shí)現(xiàn)對(duì)消息的加密和解密,保證消息的安全,防止消息在傳輸過程中受到攻擊,從而被不法分子截取或破壞。該系統(tǒng)所用到的模塊包括:sm2主控模塊、sm2解析模塊、加密控制模塊、解密控制模塊、上層復(fù)選模塊、隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊、下層復(fù)選模塊、點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊。
sm2主控模塊:用于與sm2解析模塊進(jìn)行通信,進(jìn)而調(diào)用加密控制模塊和解密控制模塊對(duì)消息進(jìn)行加密和解密。
sm2解析模塊:用于解析sm2主控模塊發(fā)出的命令,確定系統(tǒng)當(dāng)前時(shí)間要實(shí)現(xiàn)的是消息加密還是消息解密功能,并將進(jìn)行消息加密的命令發(fā)送給加密控制模塊,將進(jìn)行消息解密的命令發(fā)送給解密控制模塊。
加密控制模塊:用于在收到sm2解析模塊發(fā)送的進(jìn)行消息加密的命令后,與上層復(fù)選模塊進(jìn)行通信,通過上層復(fù)選模塊調(diào)用隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊,通過下層復(fù)選模塊調(diào)用點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊,對(duì)消息進(jìn)行加密。
解密控制模塊:用于在收到sm2解析模塊發(fā)送的進(jìn)行消息解密的命令后,與上層復(fù)選模塊進(jìn)行通信,通過上層復(fù)選模塊調(diào)用隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊,通過下層復(fù)選模塊調(diào)用點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊,對(duì)消息進(jìn)行解密。
上層復(fù)選模塊:用于當(dāng)系統(tǒng)要進(jìn)行消息加密時(shí),加密控制模塊與上層復(fù)選模塊進(jìn)行通信,通過上層復(fù)選模塊調(diào)用隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊進(jìn)行消息加密,當(dāng)系統(tǒng)要進(jìn)行消息解密時(shí),解密控制模塊與上層復(fù)選模塊進(jìn)行通信,通過上層復(fù)選模塊調(diào)用隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊進(jìn)行消息解密。
隨機(jī)數(shù)生成模塊:用于生成隨機(jī)數(shù)k∈[1,n-1]。
運(yùn)算控制模塊:用于通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊和異或運(yùn)算模塊,完成點(diǎn)乘運(yùn)算和異或運(yùn)算。
比特串處理模塊:用于通過下層復(fù)選模塊來調(diào)用比特串轉(zhuǎn)換模塊和比特串拼接模塊,完成比特串轉(zhuǎn)換和比特串拼接。
密鑰派生模塊:用于進(jìn)行密鑰派生運(yùn)算,生成密鑰數(shù)據(jù)比特串。
雜湊模塊:用于采用sm3密碼雜湊算法,進(jìn)行密碼雜湊運(yùn)算,產(chǎn)生相應(yīng)的雜湊值。
下層復(fù)選模塊:用于當(dāng)系統(tǒng)要進(jìn)行點(diǎn)乘運(yùn)算和異或運(yùn)算時(shí),運(yùn)算控制模塊與下層復(fù)選模塊通信,通過下層復(fù)選模塊調(diào)用點(diǎn)乘運(yùn)算模塊和異或運(yùn)算模塊,完成點(diǎn)乘運(yùn)算和異或運(yùn)算;當(dāng)系統(tǒng)要進(jìn)行比特串轉(zhuǎn)換和比特串拼接時(shí),比特串處理模塊與下層復(fù)選模塊通信,通過下層復(fù)選模塊調(diào)用比特串轉(zhuǎn)換模塊和比特串拼接模塊,完成比特串轉(zhuǎn)換和比特串拼接
點(diǎn)乘運(yùn)算模塊:用于完成消息加密和消息解密過程中所需的點(diǎn)乘運(yùn)算。
異或運(yùn)算模塊:用于完成消息加密和解密過程中所需的異或運(yùn)算。
比特串轉(zhuǎn)換模塊:用于將橢圓曲線上的點(diǎn)轉(zhuǎn)換為與之相對(duì)應(yīng)的比特串,將比特串轉(zhuǎn)換為橢圓曲線上與之相對(duì)應(yīng)的點(diǎn)。
比特串拼接模塊:用于將兩個(gè)以上的比特串進(jìn)行拼接(首尾依次相接),使之成為一個(gè)比特串。
圖2是在素域fp下的sm2橢圓曲線公鑰密碼算法中利用公鑰加密算法來加密消息的流程圖,該加密算法由加密方a來實(shí)現(xiàn)。在進(jìn)行消息加密時(shí),采用硬件模塊復(fù)用的方法,通過上層復(fù)選模塊,實(shí)現(xiàn)了對(duì)隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、、比特串處理模塊、密鑰派生模塊、雜湊模塊的復(fù)用,通過下層復(fù)選模塊,實(shí)現(xiàn)了對(duì)點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊的復(fù)用,從而大大減少了系統(tǒng)硬件資源的使用,降低了成本。加密方a的輸入數(shù)據(jù)包括:素域fp下的橢圓曲線系統(tǒng)參數(shù)(方程參數(shù)a和b、階n、余因子h、基點(diǎn)g),長度為klen比特的待加密的消息m,解密方b的公鑰pb。如圖2所示,該公鑰加密算法由以下步驟組成:
步驟一:通過上層復(fù)選模塊調(diào)用隨機(jī)數(shù)生成模塊,產(chǎn)生隨機(jī)數(shù)k∈[1,n-1];
步驟二:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊,計(jì)算c1=[k]g=(x1,y1)和s=[h]pb;
步驟三:檢驗(yàn)s是否為無窮遠(yuǎn)點(diǎn),若s是無窮遠(yuǎn)點(diǎn),則報(bào)錯(cuò)并退出,若s不是無窮遠(yuǎn)點(diǎn),則執(zhí)行步驟四;
步驟四:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊,計(jì)算[k]pb=(x2,y2);
步驟五:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串轉(zhuǎn)換模塊,將點(diǎn)(x1,y1)和點(diǎn)(x2,y2)轉(zhuǎn)換為相應(yīng)的比特串,調(diào)用比特串拼接模塊,拼接比特串x2和y2,得比特串x2||y2;
步驟六:通過上層復(fù)選模塊來調(diào)用密鑰派生模塊,對(duì)比特串x2||y2和整數(shù)klen進(jìn)行密鑰派生運(yùn)算,得比特串t;
步驟七:檢驗(yàn)t是否為全為0的比特串,若是則返回步驟一,若否則執(zhí)行步驟八;
步驟八:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用異或運(yùn)算模塊,計(jì)算
步驟九:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串拼接模塊,拼接比特串x2、m和y2,得比特串x2||m||y2;
步驟十:通過上層復(fù)選模塊調(diào)用雜湊模塊,對(duì)比特串x2||m||y2進(jìn)行密碼雜湊運(yùn)算,得雜湊值c3;
步驟十一:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串拼接模塊,拼接比特串c1、c2和c3,得到密文c=c1||c2||c3。
圖3是在素域fp下的sm2橢圓曲線公鑰密碼算法中利用公鑰加密算法來解密密文的流程圖,該解密算法由解密方b來實(shí)現(xiàn)。在進(jìn)行解密密文時(shí),采用硬件模塊復(fù)用的方法,通過上層復(fù)選模塊,實(shí)現(xiàn)了對(duì)隨機(jī)數(shù)生成模塊、運(yùn)算控制模塊、比特串處理模塊、密鑰派生模塊、雜湊模塊的復(fù)用,通過下層復(fù)選模塊,實(shí)現(xiàn)了對(duì)點(diǎn)乘運(yùn)算模塊、異或運(yùn)算模塊、比特串轉(zhuǎn)換模塊、比特串拼接模塊的復(fù)用,從而大大減少了系統(tǒng)硬件資源的使用,降低了成本。解密方b的輸入數(shù)據(jù)包括:素域fp下的橢圓曲線系統(tǒng)參數(shù)(方程參數(shù)a和b、階n、余因子h、基點(diǎn)g),密文c=c1||c2||c3,解密方b的私鑰db。如圖3所示,該解密密文算法由以下步驟組成:
步驟一:從密文c中取出比特串c1,比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串轉(zhuǎn)換模塊,將比特串c1轉(zhuǎn)換為點(diǎn)c1;
步驟二:檢驗(yàn)點(diǎn)c1是否滿足橢圓曲線方程,若不滿足則報(bào)錯(cuò)并退出,若滿足則執(zhí)行步驟三;
步驟三:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊,計(jì)算s’=[h]c1;
步驟四:檢驗(yàn)是s’否為無窮遠(yuǎn)點(diǎn),若s’是無窮遠(yuǎn)點(diǎn),則報(bào)錯(cuò)并退出,若s’不是無窮遠(yuǎn)點(diǎn),則執(zhí)行步驟五;
步驟五:運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用點(diǎn)乘運(yùn)算模塊,計(jì)算[db]c1=(x2’,y2’);
步驟六:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串轉(zhuǎn)換模塊,將坐標(biāo)x2’和y2’轉(zhuǎn)換為與之相對(duì)應(yīng)的比特串,調(diào)用比特串拼接模塊,拼接比特串x2’和y2’,得到比特串x2’||y2’;
步驟七:通過上層復(fù)選模塊來調(diào)用密鑰派生模塊,對(duì)比特串x2’||y2’和整數(shù)klen進(jìn)行密鑰派生運(yùn)算,得比特串t’;
步驟八:檢驗(yàn)t’是否為全為0的比特串,若是則報(bào)錯(cuò)并退出,若否則執(zhí)行步驟九;
步驟九:從密文c中取出比特串c2,運(yùn)算控制模塊通過下層復(fù)選模塊來調(diào)用異或運(yùn)算模塊,計(jì)算
步驟十:比特串處理模塊通過下層復(fù)選模塊來調(diào)用比特串拼接模塊,拼接比特串x2’、m’和y2’,得到比特串x2’||m’||y2’;
步驟十一:通過上層復(fù)選模塊調(diào)用雜湊模塊,對(duì)比特串x2’||m’||y2’進(jìn)行密碼雜湊運(yùn)算,得到雜湊值u;
步驟十二:從密文c中取出比特串c3;
步驟十三:檢驗(yàn)u=c3是否成立,若不成立則報(bào)錯(cuò)并退出,若成立則執(zhí)行步驟十四;
步驟十四:輸出解密后的明文m’。
上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡(jiǎn)化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。