專利名稱:p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息安全技術(shù)領(lǐng)域,特別是涉及P元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng)。
背景技術(shù):
隨著通信技術(shù)和信息處理技術(shù)的發(fā)展,信息在傳輸過程中的安全性越來越受到關(guān)注,需要通過信息處理技術(shù)來保證信息在通信過程中不被竊聽、篡改和仿造。密碼技術(shù)能很好的解決這方面的要求。自從1976年Diffie和Hellmann提出公鑰密碼體制的概念以來,出現(xiàn)了 3類公認的安全有效的公鑰密碼系統(tǒng),其依賴的數(shù)學(xué)問題分別為整數(shù)因數(shù)分解問題(IFP)、離散對數(shù)問題(DLP)和橢圓曲線離散對數(shù)問題(ECDLP),對應(yīng)的算法依次是RSA算法、DSA數(shù)字簽名算法、橢圓曲線算法(ECC)。這三種問題均基于計算復(fù)雜性的NPC問題(Non-deterministicPolynomial Complete problem)來保證密鑰的安全性的。相對于另外兩種算法,ECC的安全性能更高、計算量更小,處理速度更快、在安全性相同的情況下所需要的密鑰尺寸更小、對帶寬的要求更低,因此,ECC體制具有更為廣闊的應(yīng)用前景。p元域SM2橢圓曲線公鑰密碼算法是國家密碼管理局發(fā)布的一種ECC算法,其包括數(shù)字簽名算法、密鑰交換協(xié)議和公鑰加密算法這三個相互獨立的部分。其中,數(shù)字簽名算法又包括數(shù)字簽名生成算法和驗證算法,適用于商用密碼算法中的數(shù)字簽名與驗證,可滿足多種密碼應(yīng)用中的身份認證和數(shù)據(jù)完整性、真實性的安全需求;密鑰交換協(xié)議適用于商用密碼應(yīng)用中的密鑰交換,可滿足通信雙方經(jīng)過兩次信息傳遞過程,計算獲取一個由雙方共同決定的共享秘密密鑰(或稱會話密鑰);公鑰加密算法包括加密過程和解密過程,適用于商用密碼應(yīng)用中的信息加解密,加密方利用公鑰對消息進行加密,解密方用對應(yīng)的私鑰進行解密,從而獲取消息。p元域SM2橢圓曲線公鑰密碼算法已由國家密碼管理局公布,但是,它公布的僅僅是該算法的流程,目前尚未出現(xiàn)任何硬件設(shè)備能實現(xiàn)該算法,因而現(xiàn)有技術(shù)難以將這種優(yōu)秀的算法付諸應(yīng)用。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng),能用硬件實現(xiàn)P元域SM2橢圓曲線公鑰密碼算法。本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下一種p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng),所述橢圓曲線具有階n、基G、余因子h ;所述p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名算法包括公鑰PA和私鑰dA構(gòu)成的公私密鑰對;執(zhí)行所述p元域SM2橢圓曲線公鑰密碼算法中的密鑰交換協(xié)議的為發(fā)起方和響應(yīng)方,發(fā)起方具有發(fā)起方公鑰PAl和發(fā)起方私鑰dAl構(gòu)成的公私密鑰對,響應(yīng)方具有響應(yīng)方公鑰PBl和響應(yīng)方私鑰dBl構(gòu)成的公私密鑰對;發(fā)起方和響應(yīng)方約定的會話密鑰的長度為klen ;所述p元域SM2橢圓曲線公鑰密碼算法中的公鑰加密算法包括公鑰PB2和私鑰db2構(gòu)成的公私密鑰對;該系統(tǒng)包括王控t旲塊、解析t旲塊、簽名控制中心、驗證控制中心、發(fā)起方控制中心、響應(yīng)方控制中心、力口密方控制中心、解密方控制中心、s生成模塊、上層復(fù)選模塊、隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊;其中,所述主控模塊通過所述解析模塊與所述簽名控制中心、驗證控制中心、發(fā)起方控制中心、響應(yīng)方控制中心、加S方控制中心、解S方控制中心通彳目,包括向所述簽名控制中心和驗證控制中心分別發(fā)送數(shù)字簽名命令和驗證簽名命令,向所述發(fā)起方控制中心和響應(yīng)方控制中心發(fā)送密鑰交換命令,向所述加密方控制中心和解密方控制中心分別發(fā)送加密命令和解密命令;接收所述簽名控制中心輸出的數(shù)字簽名、所述驗證控制中心輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、所述發(fā)起方控制中心和響應(yīng)方控制中心輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、所述加密方控制中心輸出的加密因失敗而結(jié)束的消息或密文、所述解密方控制中心輸出的解密因失敗 而結(jié)束的消息或明文;所述解析模塊用于,解析所述數(shù)字簽名命令和驗證簽名命令,并將其分別發(fā)送到所述簽名控制中心和驗證控制中心;解析所述密鑰交換命令,并將其分別發(fā)送到發(fā)起方控制中心和響應(yīng)方控制中心;解析所述加密命令和解密命令,并將其分別發(fā)送到所述加密方控制中心和解S方控制中心;將所述簽名控制中心輸出的數(shù)子簽名、所述驗證控制中心輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、所述發(fā)起方控制中心和響應(yīng)方控制中心輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、所述加密方控制中心輸出的加密因失敗而結(jié)束的消息或密文、所述解密方控制中心輸出的解密因失敗而結(jié)束的消息或明文轉(zhuǎn)發(fā)給所述主控模塊;所述簽名控制中心用于,根據(jù)所述數(shù)字簽名命令,與所述s生成模塊、并通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算模塊交換數(shù)據(jù),包括將待簽名消息m與簽名方雜湊值進行拼接,對得到的拼接消息m’進行密碼雜湊運算,生成拼接消息雜湊值e ;通知所述隨機數(shù)生成模塊提供隨機數(shù)k ;將G和k作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的運算結(jié)果(xl, yl);根據(jù)r = (e+xl)mod n計算得到r ;將r、k發(fā)送到所述s生成模塊;在r = 0、r+k = n或s = 0的情況下,通知所述隨機數(shù)生成模塊重新生成并提供k ;將r和s作為m的數(shù)字簽名輸出;所述驗證控制中心用于,根據(jù)所述驗證簽名命令,通過所述上層復(fù)選模塊與所述倍點運算模塊、點加模塊交換數(shù)據(jù),包括將接收的r’和s’作為接收的待驗證消息M,的數(shù)字簽名;判斷r’和s’是否均在I與(n-1)之間;將,與簽名方雜湊值進行拼接,對得到的驗證方拼接消息0進行密碼雜湊運算,生成驗證方拼接消息雜湊值e’;根據(jù)t = (r' +s')mod n確定t,判斷t是否為0;將s’和G作為一組倍點運算數(shù)據(jù)、t和PA作為另一組倍點運算數(shù)據(jù)分別發(fā)送到所述倍點運算模塊,將所述倍點運算模塊分別返回的點[s' ]G和點[t]PA作為一組點加運算數(shù)據(jù)發(fā)送到所述點加模塊,并接收其返回的運算結(jié)果(xl',yl');根據(jù)R=(e' +xl' )mod n確定R,并判斷R是否與r’相等;判斷出r’不在I與(n-1)之間、s’不在I與(n-1)之間、t為O、R不等于r’中的任一情況時,輸出數(shù)字簽名驗證不通過的消息,上述各情況均不出現(xiàn)時,輸出數(shù)字簽名驗證通過的消息;所述發(fā)起方控制中心用于,根據(jù)所述密鑰交換命令,與其他所述實現(xiàn)系統(tǒng)中的響應(yīng)方控制中心、并通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊交換數(shù)據(jù),包括通知所述隨機數(shù)生成模塊提供隨機數(shù)rA ;將rA和G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的坐標為(xxl,yyl)的點RA,并將RA發(fā)送到其他所述實現(xiàn)系統(tǒng)中的響應(yīng)方控制中心;根據(jù)xlO = 2W+ [xxl&(2W-1)]和x20 =2w+[xx2& (2W-1)]分別確定 xlO 和 x20,其中的 w=||(||logl/2)| 卜I ;根據(jù) tA = (dAl+xlO -rA)mod n計算得到tA ;判斷RB是否為所述橢圓曲線上的點;將x20和RB作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的點[x20]RB ^fPBl和[x20]RB作為一組點加運算數(shù)據(jù)發(fā)送到所述點加模塊,接收其返回的點(PB+[x20]RB) ^h*tA和(PB+[x20]RB)作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,判 斷其返回的坐標為(xU,yU)的點U是否為無窮遠點JfxU、yU、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串Z與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生模塊,將其返回的比特串KA作為發(fā)起方會話密鑰輸出,并輸出協(xié)商成功的消息;在判斷出RB不為所述橢圓曲線上的點、U為無窮遠點的情況之一時,輸出協(xié)商失敗的消息;所述響應(yīng)方控制中心用于,根據(jù)所述密鑰交換命令,與其他所述實現(xiàn)系統(tǒng)中的發(fā)起方控制中心、并通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊交換數(shù)據(jù),包括通知所述隨機數(shù)生成模塊提供隨機數(shù)rB ;將rB和G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的坐標為(xx2,yy2)的點RB ;根據(jù) xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2&(2w-l)]分別計算得到 xlO 和 x20 ;根據(jù) tB=(dBl+x20 *rB)mod n計算tB ;判斷RA是否為所述橢圓曲線上的點;將xlO和RA作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的點[xlO]RA;將點PAl和點[xlO]RA作為一組點加運算數(shù)據(jù)發(fā)送到所述點加模塊,接收其返回的點(PA+[xlO]RA)
和(PA+[xlO]RA)作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,判斷其返回的坐標為(xV,yV)的點V是否為無窮遠點;將xV、yV、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串V與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生模塊,將其返回的比特串KB作為響應(yīng)方會話密鑰輸出;將RB發(fā)送到其他所述實現(xiàn)系統(tǒng)中的發(fā)起方控制中心;在判斷出RA不為所述橢圓曲線上的點、V為無窮遠點的情況之一時,輸出協(xié)商失敗的消息;所述加密方控制中心用于,根據(jù)所述加密命令,通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算模塊、密鑰派生模塊交換數(shù)據(jù),包括接收長度為klenl比特的待加密消息M ;通知所述隨機數(shù)生成模塊提供隨機數(shù)k ;將k和點G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的點Cl ;將點Cl轉(zhuǎn)換為比特串Cl ;將余因子h和點PB作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的點S ;判斷S是否為無窮遠點,在判斷結(jié)果為是的情況下輸出本次加密因失敗而結(jié)束的消息;將k和點PB2作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的點的坐標(x2,y2);將12和72拼接為比特串x2_y2 ;將標量klenl與比特串x2_y2作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生模塊,并接收其返回的比特串tl ;判斷tl是否為全0比特串,在判斷結(jié)果為是的情況下,通知所述隨機數(shù)生成模塊重新生成隨機數(shù)k,在判斷結(jié)果為否的情況下,對M與tl進行按位異或運算,得到比特串C2 ;將x2、M和y2拼接而成的比特串x2_M-y2進行密碼雜湊運算,生成雜湊值C3 ;將比特串Cl、C2和C3拼接為新的比特串C1-C2-C3,并將其作為密文C輸出;
所述解密方控制中心用于,根據(jù)所述解密命令,通過所述上層復(fù)選模塊與所述倍點運算模塊、密鑰派生模塊交換數(shù)據(jù),包括接收形式為由C1’、C2’、C3’拼接而成的比特串Cl’ -C2’ -C3’的待解密的密文C’,其中的比特串Cl’與所述比特串Cl對應(yīng),比特串C2’與所述比特串C2對應(yīng)且其長度為klenl比特,比特串C3’與所述比特串C3對應(yīng);從(’中取出比特串Cl’,并將其轉(zhuǎn)換為點Cl’;判斷點Cl’的坐標是否滿足所述橢圓曲線的方程,在判斷結(jié)果為是的情況下,將余因子h和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的點S’ ;判斷S’是否為無窮遠點,在判斷結(jié)果為否的情況下,將私鑰dB2和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的點的坐標(x2’,y2’),將x2’、y2’拼接而成的比特串x2’ -y2’與標量klenl作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生模塊,并接收其返回的比特串tl’ ;判斷tl’是否為全0比特串,在判斷結(jié)果為否的情況下,從C’中取出比特串C2’ ;對C2’和tl’進 行按位異或運算,得到比特串Ml’ ;對比特串x2’ -Ml’ -y2’進行密碼雜湊運算,得到雜湊值u ;從C’中取出比特串03’;判斷11是否與C3’相等,在判斷結(jié)果為是的情況下,將Ml’作為C’對應(yīng)的明文輸出;在點Cl’的坐標不滿足所述橢圓曲線的方程、S’為無窮遠點、tl’為全0比特串、u不等于C3’中的任一種情況發(fā)生時,輸出解密因失敗而結(jié)束的消息;所述s生成模塊用于,根據(jù)s = [(1+dA)-I (k-r dA) ]mod n生成s,將生成的s發(fā)送到所述簽名控制中心;所述上層復(fù)選模塊為所述簽名控制中心與所述隨機數(shù)生成模塊、倍點運算模塊之間,所述驗證控制中心與所述倍點運算模塊、點加模塊之間,所述發(fā)起方控制中心與所述隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊之間,所述響應(yīng)方控制中心與所述隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊之間,所述加密方控制中心與所述隨機數(shù)生成模塊、倍點運算模塊、密鑰派生模塊之間,以及所述解密方控制中心與所述倍點運算模塊、密鑰派生模塊之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊;所述隨機數(shù)生成模塊用于,生成I與(n-1)之間的隨機數(shù)并通過所述上層復(fù)選模塊轉(zhuǎn)發(fā);所述倍點運算模塊用于,對倍點運算數(shù)據(jù)中的點進行其中的標量倍點運算,將運算結(jié)果通過所述上層復(fù)選模塊轉(zhuǎn)發(fā);所述點加模塊用于,對所述點加運算數(shù)據(jù)中的兩個點的坐標進行點加運算,將運算結(jié)果通過所述上層復(fù)選模塊轉(zhuǎn)發(fā);所述密鑰派生模塊用于,對密鑰派生數(shù)據(jù)中的比特串進行密鑰派生運算,將得到的長度為密鑰派生數(shù)據(jù)中的標量的比特串通過所述上層復(fù)選模塊轉(zhuǎn)發(fā)。本發(fā)明的有益效果是本發(fā)明中,由于主控模塊可通過解析模塊向各控制中心發(fā)送相應(yīng)的命令,從而可控制簽名控制中心實現(xiàn)數(shù)字簽名算法中的數(shù)字簽名生成功能,控制驗證控制中心實現(xiàn)數(shù)字簽名算法中的驗證數(shù)字簽名的功能,控制該實現(xiàn)系統(tǒng)中的發(fā)起方控制中心實現(xiàn)密鑰交換協(xié)議中發(fā)起方的功能,控制響應(yīng)方控制中心實現(xiàn)密鑰交換協(xié)議中響應(yīng)方的功能,控制加密方控制中心實現(xiàn)公鑰加密算法中的消息加密,控制解密方控制中心實現(xiàn)公鑰加密算法中的密文解密,進一步,除簽名控制中心與s生成模塊直接交換數(shù)據(jù)外,所有控制中心可利用上層復(fù)選模塊來實現(xiàn)對隨機數(shù)生成模塊、倍點運算模塊、點加模塊和密鑰派生模塊的復(fù)用,從而實現(xiàn)生成隨機數(shù)、進行倍點運算、點加運算和密鑰派生的功能,而且上述的各控制中心和各模塊均為硬件模塊,因此,本發(fā)明能夠用硬件來實現(xiàn)P元域SM2橢圓曲線公鑰密碼算法。本發(fā)明還提供了另外一種p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng),所述橢圓曲線具有階n、基G、余因子h ;所述p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名算法包括公鑰PA和私鑰dA構(gòu)成的公私密鑰對;執(zhí)行所述p元域SM2橢圓曲線公鑰密碼算法中的密鑰交換協(xié)議的為發(fā)起方和響應(yīng)方,發(fā)起方具有發(fā)起方公鑰PAl和發(fā)起方私鑰dAl構(gòu)成的公私密鑰對,響應(yīng)方具有響應(yīng)方公鑰PBl和響應(yīng)方私鑰dBl構(gòu)成的公私密鑰對;發(fā)起方和響應(yīng)方約定的會話密鑰的長度為klen ;所述p元域SM2橢圓曲線公鑰密碼算法中的公鑰加密算法包括公鑰PB2和私鑰db2構(gòu)成的公私密鑰對;該系統(tǒng)包括主控模塊、解析模塊、簽名控制中心、驗證控制中心、發(fā)起方控制子模塊、響應(yīng)方控制子模塊、加密方控制子模塊、解密方控制子模塊、s生成控制子模塊、上層復(fù)選模塊、倍點運算控制子模塊、射影系二倍點運算子模塊、隨機數(shù)生成模塊、點加控制子模塊、密鑰派生控制子模塊、下層復(fù)選模塊、域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊、射影系點加子模塊、密碼雜湊子模塊;其中, 所述主控模塊用于,所述主控模塊通過所述解析模塊與所述簽名控制中心、驗證控制中心、發(fā)起方控制子模塊、響應(yīng)方控制子模塊、加密方控制子模塊、解密方控制子模塊通信,包括向所述簽名控制中心和驗證控制中心分別發(fā)送數(shù)字簽名命令和驗證簽名命令,向所述發(fā)起方控制子模塊和響應(yīng)方控制子模塊發(fā)送密鑰交換命令,向所述加密方控制子模塊和解密方控制子模塊分別發(fā)送加密命令和解密命令;接收所述簽名控制中心輸出的數(shù)字簽名、所述驗證控制中心輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、所述發(fā)起方控制子模塊和響應(yīng)方控制子模塊輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、所述加密方控制子模塊輸出的加密因失敗而結(jié)束的消息或密文、所述解密方控制子模塊輸出的解密因失敗而結(jié)束的消息或明文;所述解析模塊用于,解析所述數(shù)字簽名命令和驗證簽名命令,并將其分別發(fā)送到所述簽名控制中心和驗證控制中心;解析所述密鑰交換命令,并將其分別發(fā)送到發(fā)起方控制子模塊和響應(yīng)方控制子模塊;解析所述加密命令和解密命令,并將其分別發(fā)送到所述加密方控制子模塊和解密方控制子模塊;將所述簽名控制中心輸出的數(shù)字簽名、所述驗證控制中心輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、所述發(fā)起方控制子模塊和響應(yīng)方控制子模塊輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、所述加密方控制子模塊輸出的加密因失敗而結(jié)束的消息或密文、所述解密方控制子模塊輸出的解密因失敗而結(jié)束的消息或明文轉(zhuǎn)發(fā)給所述主控模塊;所述簽名控制中心用于,根據(jù)所述數(shù)字簽名命令,與所述s生成控制子模塊、并通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括將待簽名消息m與簽名方雜湊值進行拼接,將得到的拼接消息m’與雜湊值長度標量作為一組密碼雜湊數(shù)據(jù)發(fā)送到所述密碼雜湊子模塊,接收其返回的拼接消息雜湊值e ;通知所述隨機數(shù)生成模塊提供隨機數(shù)k ;將G和k作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的運算結(jié)果(xl,yl);根據(jù)r=(e+xl)mod n計算得到r ;將r、k發(fā)送到所述s生成控制子模塊;在r = 0、r+k = n或s=0的情況下,通知所述隨機數(shù)生成模塊重新生成并提供k ;將r和s作為m的數(shù)字簽名輸出;所述驗證控制中心用于,根據(jù)所述驗證簽名命令,通過所述上層復(fù)選模塊與所述倍點運算控制子模塊、點加控制子模塊,通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括將接收的r’和s’作為接收的待驗證消息M,的數(shù)字簽名;判斷r’和s’是否均在I與(n-1)之間;將,與簽名方雜湊值進行拼接,將得到的驗證方拼接消息^發(fā)送到所述密碼雜湊子模塊,接收其返回的驗證方拼接消息雜湊值e’;根據(jù)t = (r' +s' )mod n確定t,判斷t是否為0 ;將s’和G作為一組倍點運算數(shù)據(jù)、將t和PA作為另一組倍點運算數(shù)據(jù)分別發(fā)送到所述倍點運算控制子模塊,將其分別返回的點[s' ]G和點[t]PA作為一組點加運算數(shù)據(jù)發(fā)送到所述點加控制子模塊,并接收其返回的運算結(jié)果(xl',yl,);根據(jù)R=(e' +xl' )mod n確定R,并判斷R是否與r’相等;判斷出r’不在I與(n-1)之間、s’不在I與(n-1)之間、t為0、R不等于r’中的任一情況時,輸出數(shù)字簽名驗證不通過的消息,上述各情況均不出現(xiàn)時,輸出數(shù)字簽名驗證通過的消息;所述發(fā)起方控制子模塊用于,根據(jù)所述密鑰交換命令,與其他所述實現(xiàn)系統(tǒng)中的響應(yīng)方控制子模塊、通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、點加控制子模塊、密鑰派生控制子模塊,通過所述下層復(fù)選模塊與所述域轉(zhuǎn)換 子模塊、蒙哥馬利域乘法子模塊交換數(shù)據(jù),包括通知所述隨機數(shù)生成模塊提供隨機數(shù)rA ;將rA和G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的坐標為(xxl,yyl)的點RA,并將RA發(fā)送到其他所述實現(xiàn)系統(tǒng)中的響應(yīng)方控制子模塊;根據(jù) xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2&(2W-1)]分別確定 xlO 和 x20,其中的
W =II (II log〗 11/2) Il -I;將xlO和rA發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的xlO和rA在蒙哥馬利域的值;將xlO和rA在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的xlO rA在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,并接收其返回的xlO rA在有限域的值;根據(jù)tA = (dAl+xlO rA)mod n計算得到tA ;判斷RB是否為所述橢圓曲線上的點;將x20和RB作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的點[x20]RB;將PBl和[x20]RB作為一組點加運算數(shù)據(jù)發(fā)送到所述點加控制子模塊,接收其返回的點(PB+[x20]RB);將11和tA發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的h和tA在蒙哥馬利域的值;將h和tA在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的h tA在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,并接收其返回的h*tA在有限域的值;將h*tA和(PB+[x20]RB)作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,判斷其返回的坐標為(xU,yU)的點U是否為無窮遠點^fxU、yU、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串Z與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生控制子模塊,將其返回的比特串KA作為發(fā)起方會話密鑰輸出,并輸出協(xié)商成功的消息;在判斷出RB不為所述橢圓曲線上的點、U為無窮遠點的情況之一時,輸出協(xié)商失敗的消息;所述響應(yīng)方控制子模塊用于,根據(jù)所述密鑰交換命令,與其他所述實現(xiàn)系統(tǒng)中的發(fā)起方控制子模塊、通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、點加控制子模塊、密鑰派生控制子模塊,通過所述下層復(fù)選模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊交換數(shù)據(jù),包括通知所述隨機數(shù)生成模塊提供隨機數(shù)rB ;將rB和G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的坐標為(xx2,yy2)的點 RB ;根據(jù) xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2&(2W-1)]分別計算得到 xlO 和 x20 ;將x20和rB發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的x20和rB在蒙哥馬利域的值;將x20和rB在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的x20 TB在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,并接收其返回的x20 TB在有限域的值;根據(jù)tB = (dBl+x20 rB)mod n計算tB ;判斷RA是否為所述橢圓曲線上的點;將xlO和RA作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的點[xlO]RA ;將點PAl和點[xlO]RA作為一組點加運算數(shù)據(jù)發(fā)送到所述點加控制子模塊,接收其返回的點(PA+[xlO] RA);將h和tB發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的h和tB在蒙哥馬利域的值;將h和tB在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的h tB在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,并接收其返回的h tB在有限域的值dfh tB和(PA+[xlO]RA)作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,判斷其返回的坐標為(xV,yV)的點V是否為無窮遠點;將xV、yV、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串V與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生控制子模塊,將其返回的比特串KB作為響應(yīng)方會話密鑰輸出;將RB發(fā)送到其他所述實現(xiàn)系統(tǒng)中的發(fā)起方控制子模塊;在判斷出RA不為所述橢圓曲線上的點、V為無窮遠點的情況之 一時,輸出協(xié)商失敗的消息;所述加密方控制子模塊用于,根據(jù)所述加密命令,通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、密鑰派生控制子模塊,通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括接收長度為klenl比特的待加密消息M ;通知所述隨機數(shù)生成模塊提供隨機數(shù)k ;將k和點G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的點Cl ;將點Cl轉(zhuǎn)換為比特串Cl ;將余因子h和點PB作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的點S ;判斷S是否為無窮遠點,在判斷結(jié)果為是的情況下輸出本次加密因失敗而結(jié)束的消息;將k和點PB2作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的點的坐標(x2,y2);將12和y2拼接為比特串x2_y2 ;將標量klenl與比特串x2_y2作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生控制子模塊,并接收其返回的比特串tl ;判斷tl是否為全0比特串,在判斷結(jié)果為是的情況下,通知所述隨機數(shù)生成模塊重新生成隨機數(shù)k,在判斷結(jié)果為否的情況下,對M與tl進行按位異或運算,得到比特串C2 ;將x2、M和y2拼接而成的比特串x2_M-y2與雜湊值長度作為一組密碼雜湊數(shù)據(jù)發(fā)送到所述密碼雜湊子模塊,接收其返回的雜湊值C3 ;將比特串C1、C2和C3拼接為新的比特串C1-C2-C3,并將其作為密文C輸出;所述解密方控制子模塊用于,根據(jù)所述解密命令,通過所述上層復(fù)選模塊與所述倍點運算控制子模塊、密鑰派生控制子模塊,通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括接收形式為由C1’、C2’、C3’拼接而成的比特串Cl’ -C2’ -C3’的待解密的密文C’,其中的比特串Cl’與所述比特串Cl對應(yīng),比特串C2’與所述比特串C2對應(yīng)且其長度為klenl比特,比特串C3’與所述比特串C3對應(yīng);JAC’中取出比特串Cl’,并將其轉(zhuǎn)換為點Cl’ ;判斷點Cl’的坐標是否滿足所述橢圓曲線的方程,在判斷結(jié)果為是的情況下,將余因子h和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的點S’ ;判斷S’是否為無窮遠點,在判斷結(jié)果為否的情況下,將私鑰dB2和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的點的坐標(x2’,y2’),將x2’、y2’拼接而成的比特串x2’ _y2’與標量klenl作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生控制子模塊,并接收其返回的比特串tl’ ;判斷tl’是否為全O比特串,在判斷結(jié)果為否的情況下,從C’中取出比特串C2’ ;對C2’和tl’進行按位異或運算,得到比特串Ml’ ;將比特串x2’ -Ml’ -y2’與雜湊值長度發(fā)送到所述密碼雜湊子模塊,接收其返回的雜湊值u ;從C,中取出比特串C3’;判斷u是否與C3’相等,在判斷結(jié)果為是的情況下,將Ml’作為C’對應(yīng)的明文輸出;在點Cl’的坐標不滿足所述橢圓曲線的方程、S’為無窮遠點、tl’為全O比特串、u不等于C3’中的任一種情況發(fā)生時,輸出解密因失敗而結(jié)束的消息;所述s生成控制子模塊用于,接收所述簽名控制中心發(fā)送的r和k在有限域的值;將a+dA)在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的a+dAr1在有限域的值;將r、dA、(1+dA)-1和k各自在有限域的值分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的r、dA、(1+dA)-1和k各自在蒙哥馬利域的值;將r和dA各自在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,用k在蒙哥馬利域的值與其返回的(r dA)在蒙哥馬利域的值進行減法運算,得到(k-r*dA)在蒙哥馬利域的值;將(1+dA)―1和(k-r*dA)各自在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的[(1+dAr1 (k-r-dA)]在仿射坐標 系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的s = [(1+dA)-1 (k-r dA)]mod n在有限域的值s ;將s = [ (1+dA) (k-r *dA)]mod n在有限域的值s發(fā)送到所述簽名控制中心;所述上層復(fù)選模塊為所述簽名控制中心與所述隨機數(shù)生成模塊、倍點運算控制子模塊之間,所述驗證控制中心與所述倍點運算控制子模塊、點加控制子模塊之間,所述發(fā)起方控制子模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、點加控制子模塊、密鑰派生控制子模塊之間,所述響應(yīng)方控制子模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、點加控制子模塊、密鑰派生控制子模塊之間,所述加密方控制子模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、密鑰派生控制子模塊之間,以及所述解密方控制子模塊與所述倍點運算控制子模塊、密鑰派生控制子模塊之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊;所述倍點運算控制子模塊用于,通過所述下層復(fù)選模塊與所述域轉(zhuǎn)換子模塊、射影系點加子模塊、射影系二倍點運算子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊交換數(shù)據(jù),包括從所述上層復(fù)選模塊接收所述倍點運算數(shù)據(jù),所述倍點運算數(shù)據(jù)包括標量f和點D ;將D在仿射坐標系下的坐標(xd,yd)轉(zhuǎn)換為D在射影坐標系下的坐標(xd2,yd2,I),并將xd2、yd2、I分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的xd2、yd2、I在蒙哥馬利域的值xd3、yd3、zd3 ;將(xd3, yd3, zd3)作為倍點運算結(jié)果[f]D在蒙哥馬利域的坐標(xdl,ydl,zdl)的初始值;確定f的二進制比特長度L ;將f的二進制形式中的次高比特位作為其當前比特位的初始值,從所述f 的二進制形式中的次高比特位起,每次降低一個比特位作為當前比特位,直至其最低比特位為止,進行(L-I)次迭代運算;將所述(L-I)次迭代運算的結(jié)果坐標(xdl,ydl, zdl)中的zdl與I發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的zdl在有限域的值;將zdl在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的Zdr1在有限域的值;將Zdr1在有限域的值發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的Zdr1在蒙哥馬利域的值;將所述(L-I)次迭代運算的結(jié)果坐標(xdl, ydl, zdl)中的xdl、ydl分別與zdl—1在蒙哥馬利域的值一同發(fā)送到所述蒙哥馬利域乘法子模塊,分別接收其返回的xdUydl 二者在仿射坐標系的值;將I與xdl在仿射坐標系的值、I與ydl在仿射坐標系的值分別發(fā)送到蒙哥馬利域乘法子模塊,分別接收其返回的Xdl、ydl 二者在有限域的值;將xdl, ydl 二者在有限域的值組成的坐標(xdl,ydl)作為[f]D的運算結(jié)果輸出到所述上層復(fù)選模塊轉(zhuǎn)發(fā);其中的一次所述的迭代運算包括將坐標(xdl, ydl, zdl)的當前值發(fā)送到所述射影系二倍點運算子模塊、在f的當前比特位為二進制I的情況下,將所述射影系二倍點運算子模塊返回的輸出坐標與坐標(xd3,yd3,zd3)發(fā)送到所述射影系點加子模塊;所述射影系二倍點運算子模塊用于,對輸入坐標進行二倍點運算,將運算結(jié)果作為輸出坐標返回至所述倍點運算控制子模塊;所述隨機數(shù)生成模塊用于,生成I與(n-1)之間的隨機數(shù)并通過所述上層復(fù)選模塊轉(zhuǎn)發(fā);所述點加控制子模塊用于,通過所述下層復(fù)選模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、射影系點加子模塊、有限域求逆子模塊交換數(shù)據(jù),包括從所述上層復(fù)選 模塊接收點加數(shù)據(jù),所述點加數(shù)據(jù)包括點PPl和點PP2 ;將點PPl和PP2在仿射坐標系下的坐標(xll’,yll’ )和(xl2’,yl2’ )分別轉(zhuǎn)換為各自在射影坐標系下的坐標(xll’,yll’,I)和0^12’,712’,1),并將111’、711’、1和112’、712’、1分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的xll’、yll’、I和xl2’、yl2’、l各自在蒙哥馬利域的值Xlll’、ylir、Zlir和Xl21’、yl21’、zl2r ;將 xlll’、ylll’、zlll’ 組成的坐標(xlll’,ylll’,zlir )和 xl21’、yl21’、zl2r組成的坐標(X121’,yl2r,zl2r )發(fā)送到所述射影系點加子模塊,將其返回的坐標(X131’,yl3r,zl3r )中的Z131’與I發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的zl31’在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的zl31' 1在有限域的值;將zl31' ―1在有限域的值發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的zl31' ―1在蒙哥馬利域的值;將坐標(xl3r,yl31’,zl3r)中的xl31’、yl31’分別與zl31' ―1在蒙哥馬利域的值一起發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的xl31’、yl31’ 二者在仿射坐標系的值;將xl31’在仿射坐標系的值與l、yl31’在仿射坐標系的值與I分別發(fā)送到所述 蒙哥馬利域乘法子模塊,將其返回的xl31’、yl3r 二者在有限域的值組成的坐標U131’,yl31’ )作為PPl和PP2點加運算的結(jié)果輸出到所述上層復(fù)選模塊轉(zhuǎn)發(fā);所述密鑰派生控制子模塊用于,通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括從所述上層復(fù)選模塊接收密鑰派生數(shù)據(jù),所述密鑰派生數(shù)據(jù)包括標量kk和比特串ZZ ;設(shè)置32比特的計數(shù)變量Ct的初始值為16進制表示的00000001 ;確定大于或等于(kk/v)的最小整數(shù)I |kk/v| I ;循環(huán)變量i從I起遞增至I |kk/v| I,每次增加1,執(zhí)行
kk/v I次密碼雜湊運算;在(kk/v)為整數(shù)的情況下,置Ha ! Nkk/vM =Hal|kk/v|l ;在(kk/v)不為整數(shù)的情況下,將Ha ! I|kk/v|l置為比特串Hal|kk/v|l中從最高比特位起的(M-vx^M/v」)比特,其中的^V」為小于或等于(kk/v)的最小整數(shù);將1從I遞增至(I I kk/v I |-1)的Hai以及Ha ! I|kk/v|l順次拼接,將得到的長度為kk比特的比特串作為對ZZ進行密鑰派生運算的結(jié)果輸出至所述上層復(fù)選模塊轉(zhuǎn)發(fā);其中,一次所述的密碼雜湊運算包括將Ct的當前值與ZZ拼接為比特串ZZ-ct ;將ZZ-ct和標量V作為一組密碼雜湊數(shù)據(jù)發(fā)送到所述密碼雜湊子模塊,將其返回的Hv(ZZ-Ct)賦值給Hai ;ct的值增加16進制的00000001 ;所述下層復(fù)選模塊為所述簽名控制中心、驗證控制中心、加密方控制子模塊、解密方控制子模塊、密鑰派生控制子模塊與所述密碼雜湊子模塊之間,所述發(fā)起方控制子模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊之間,所述響應(yīng)方控制子模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊之間,所述倍點運算控制子模塊與所述域轉(zhuǎn)換子模塊、射影系點加子模塊、射影系二倍點運算子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊之間,所述點加控制子模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、射影系點加子模塊、有限域求逆子模塊之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊;所述域轉(zhuǎn)換子模塊用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到所述下層復(fù)選模塊轉(zhuǎn)發(fā);所述蒙哥馬利域乘法子模塊用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到所述下層復(fù)選模塊轉(zhuǎn)發(fā);所述有限域求逆子模塊用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到所述下層復(fù)選模塊轉(zhuǎn)發(fā);所述射影系點加子模塊用于,對輸入的兩個點的坐標進行點加運算,將得到的新 的坐標返回所述下層復(fù)選模塊轉(zhuǎn)發(fā);所述密碼雜湊子模塊用于,對接收的密碼雜湊數(shù)據(jù)中的比特串進行密碼雜湊運算,將輸出的長度為密碼雜湊數(shù)據(jù)中的標量比特的雜湊值返回所述下層復(fù)選模塊轉(zhuǎn)發(fā)。。
圖I為國家密碼管理局公布的p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名生成算法的流程圖;圖2為國家密碼管理局公布的p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名驗證算法的流程圖;圖3為國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中的密鑰交換協(xié)議的流程圖;圖4為國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中利用公鑰加密算法來加密消息的流程圖;圖5為國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中利用公鑰加密算法來解密密文的流程圖;圖6為本發(fā)明提供的p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng)結(jié)構(gòu)圖;圖7為本發(fā)明提供的s生成模塊的結(jié)構(gòu)圖;圖8為本發(fā)明提供的倍點運算模塊的結(jié)構(gòu)圖;圖9為本發(fā)明提供的點加模塊的結(jié)構(gòu)圖;圖10為本發(fā)明提供的密鑰派生模塊的結(jié)構(gòu)圖;圖11為本發(fā)明提供的另一種p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng)的結(jié)構(gòu)圖。
具體實施例方式以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。本發(fā)明所涉及的p元域SM2橢圓曲線公鑰密碼算法基于p元域(又稱p元有限域,即本發(fā)明中所涉及的有限域)中的橢圓曲線。在p元域中,橢圓曲線的方程為y2 = x3+ax+b,這里的P為大于3的素數(shù),a和b稱為該橢圓曲線的參數(shù),二者均為P元域中的數(shù)值,且滿足(4a3+27b2)mod p不為0,這里的mod為求模運算符。另外,p元域中的橢圓曲線具有基、階和余因子這幾個特征量。本發(fā)明用G來標識基,G是一個點,其坐標為(xG,yG);用n來標識階;用h來標識余因子;n和h均為p元域中的數(shù)值,即標量。需要指出的是,本發(fā)明中涉及的橢圓曲線均指P元域中的橢圓曲線。數(shù)字簽名是附加在待簽名消息上的一些數(shù)據(jù),或是對數(shù)據(jù)單元所作密碼變換的結(jié)果,在正常使用時,數(shù)字簽名可提供如下服務(wù)(1)確認數(shù)據(jù)的來源;(2)驗證數(shù)據(jù)的完整性;(3)保證簽名方不能抵賴。國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名算法即用來提供上述服務(wù),其包括數(shù)字簽名生成算法和驗證算法,分別通過圖I和圖2所示的步驟來實現(xiàn)。圖I為國家密碼管理局公布的p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名生·成算法的流程圖,該算法由簽名方來執(zhí)行。如圖I所示,該算法包括以下步驟步驟101 :已知橢圓曲線的基G、橢圓曲線的階n、待簽名的消息m、簽名方的雜湊值ZA、簽名方公鑰PA和私鑰dA。本步驟中,待簽名消息m為需要進行數(shù)字簽名保護的消息,即通常所說的數(shù)據(jù)明文;簽名方雜湊值ZA是對簽名方的可辨別標識及其長度、p元域橢圓曲線方程中的參量a和b、G的橫坐標xG和縱坐標yG、簽名方公鑰PA的橫坐標和縱坐標拼接之后的比特串進行密碼雜湊計算后得到的雜湊值,這里的拼接是一種針對兩個以上的比特串進行的運算,其將兩個以上的比特串頭尾相接,即在一個比特串的最末比特位后面拼接下一個比特串,從而得到一個比特串。雜湊運算是將一個長度任意的比特串映射為固定長度比特串(稱為雜湊值)的運算,該運算滿足不可逆性和輸入輸出單一性,可保證數(shù)據(jù)的安全。SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名算法是一種非對稱密碼算法,需要有公鑰和私鑰兩個密鑰組成的公私密鑰對。在本發(fā)明所述的數(shù)字簽名算法中有簽名方和驗證方,這里用dA和PA分別標識私鑰和公鑰。步驟102 :將ZA和m拼接為拼接消息m’。該步驟是將ZA和m的比特串拼接起來,形成一個比特串,可將m拼接于ZA的末位比特串的后面。步驟103 :對m’進行密碼雜湊算法,得到拼接消息雜湊值e。本步驟是進行密碼雜湊運算的步驟,輸出的e的長度可以根據(jù)需要來確定,例如,可以為192比特,也可以為256比特等。步驟104 :產(chǎn)生I與(n-1)之間的隨機數(shù)k。本步驟產(chǎn)生隨機數(shù)k,該隨機數(shù)必須小于橢圓曲線的階n,且為正整數(shù)。步驟105:對G進行k倍點運算,得到坐標(xl,yl)0這里,k倍點運算是指對橢圓曲線上同一個點進行k次加的運算,參與運算的點為橢圓曲線上的點,如本步驟中的橢圓曲線的基G,倍點運算得到的結(jié)果為橢圓曲線上的另一個點,這意味著該運算結(jié)果也是一個坐標的形式,如本步驟得到的坐標(xl,yl)。步驟106 :根據(jù)r = (e+xl)mod n計算得到r。本步驟得到的r為m的數(shù)字簽名的一部分,本發(fā)明可稱之為一號簽名段。
步驟107 :判斷r = 0或r+k = n是否成立。這里,無論r = 0成立還是r+k = n成立,還是二者均成立,都說明步驟104產(chǎn)生的k不合適,因而在判斷結(jié)果為是時,返回執(zhí)行步驟104,否則,執(zhí)行步驟108。步驟108 :根據(jù) s = [ (1+dA) (k~r dA) ]mod n 計算得到 S。本步驟得到的s是m的數(shù)字簽名的另一部分,本發(fā)明稱之為二號簽名段。步驟109 :判斷s是否為O。這里,s為0意味著步驟104生成的隨機數(shù)k不合適,因而在判斷結(jié)果為是時,返回執(zhí)行步驟104,否則,執(zhí)行步驟110。步驟110 :將r和s作為m的數(shù)字簽名輸出。 這里,r和s可以組成一個報文輸出,也可以與m同時輸出。通過圖I所述的步驟生成了待簽密消息m的數(shù)字簽名r和s并輸出后,就需要對其進行驗證,從而判斷數(shù)據(jù)傳輸過程中的安全與否,以提供數(shù)字簽名確認數(shù)據(jù)來源、驗證數(shù)據(jù)的完整性和保證簽名方不能抵賴的服務(wù)。圖2為國家密碼管理局公布的p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名驗證算法的流程圖,該算法由驗證方來執(zhí)行。如圖2所示,該算法包括以下步驟步驟201 :已知橢圓曲線的基G、橢圓曲線的階n、待驗證消息M’、簽名方雜湊值ZA’、簽名方公鑰PA、待驗證的數(shù)字簽名r’和s’。本步驟中,待驗證消息M’為需要進行數(shù)字簽名驗證的消息,該數(shù)字簽名驗證算法即用于對M’的真實性進行驗證,如果通過驗證,說明M’是由簽名方傳來且未被中途篡改的事實是可信的,否則,驗證不通過,則說明M’可能不是由簽名方傳來的,或者中途被截獲、篡改、仿造過,因而是不可信的;與得到簽名方雜湊值ZA的運算相同,驗證方雜湊值ZA’也是對簽名方的可辨別標識及其長度、P元域橢圓曲線方程中的參量a和b、G的橫坐標xG和縱坐標yG、簽名方公鑰PA的橫坐標和縱坐標拼接之后的比特串進行密碼雜湊運算后得到的雜湊值,這里的拼接方法和密碼雜湊運算與步驟101所述的完全相同。與圖I中的步驟101不同,數(shù)字簽名驗證算法中已知的參量還包括待驗證的數(shù)字簽名r’和s’,該數(shù)字簽名為驗證方接收得到的,與M,相對應(yīng),其中的r’可認為是待驗證數(shù)字簽名的一號簽名段,如驗證成功,則r’即為圖I所示的簽名生成算法生成的r,s’可認為是待驗證數(shù)字簽名的二號簽名段,如驗證成功,則s’即為圖I所示的簽名生成算法生成的
So步驟202 :判斷r’是否在I與n-1之間。在數(shù)字簽名生成算法中,r’必須小于橢圓曲線的階n,且為大于0的正整數(shù),因此,如果r’不位于I與n-1之間,則執(zhí)行步驟212,判斷為驗證不通過,否則,執(zhí)行步驟203。步驟203 :判斷S,是否在I與n-1之間。與r’相同,s’也必須小于橢圓曲線的階n,且為大于0的正整數(shù),因此,如果s’不位于I與n-1之間,則執(zhí)行步驟212,判斷驗證不通過,否則,執(zhí)行步驟204。步驟204 :將ZA’與M’拼接為驗證方拼接消息。本步驟執(zhí)行的是拼接運算,將M’拼接于TA,最末比特位的后面。步驟205 :對驗證方拼接消息進行密碼雜湊運算,得到驗證方拼接消息雜湊值e’。本步驟是進行密碼雜湊運算的步驟,輸出的e’的長度要與圖I中步驟103生成的e的長度相同,例如,e’可以為192比特,也可以為256比特。步驟206 :根據(jù) t = (r' +s' )mod n 計算 t。步驟207 :判斷t是否為O。這里,如果判斷結(jié)果為t = 0成立,則執(zhí)行步驟212,判斷為驗證不通過,否則,執(zhí)行步驟208。步驟208 :根據(jù)計算(xl,,yl’)= [s’ ]G+[t]PA 計算坐標(xl,,yl’)。這里的[s’ ]G和[t]PA分別為對G的s’倍點運算和對PA的t倍點運算,運算結(jié)果均為點的坐標,其中的加號為點加運算符。
步驟209 :根據(jù) R = (e' +xl' )mod n 確定 R。其中的mod為求模運算符。步驟210 :判斷R是否與r’相等。該步驟的判斷結(jié)果如果為是,則執(zhí)行步驟211,判斷驗證通過,否則執(zhí)行步驟212,判斷為驗證不通過。步驟211 :判斷為驗證通過。步驟212 :判斷為驗證不通過。除了數(shù)字簽名算法,p元域SM2橢圓曲線公鑰密碼算法還包括密鑰交換協(xié)議。密鑰交換協(xié)議涉及相互通信的兩個用戶,其中,發(fā)送首輪交換信息的用戶稱為發(fā)起方,另一用戶則稱為響應(yīng)方,這兩方均有公私密鑰對。密鑰交換協(xié)議可通過圖3中的各步驟來實現(xiàn),其中,發(fā)起方用符號A來表示,響應(yīng)方用符號B來表示,因而圖3中的發(fā)起方公鑰和發(fā)起方私鑰分別用PA和dA表示,響應(yīng)方公鑰和響應(yīng)方私鑰分別用PB和dB來表示。圖3為國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中的密鑰交換協(xié)議的流程圖。圖3中的步驟A-301至步驟A-307均由發(fā)起方A來執(zhí)行,步驟B-301至步驟B-306均由響應(yīng)方B來執(zhí)行,并且在條件滿足的情況下,發(fā)起方A和響應(yīng)方B均可執(zhí)行步驟308。如圖3所示,步驟A-301至步驟A-307如下步驟A-301 :確認發(fā)起方A的已知數(shù)據(jù)橢圓曲線的基G、階n、余因子h、發(fā)起方雜湊值ZA、響應(yīng)方雜湊值ZB、發(fā)起方公鑰PA和發(fā)起方私鑰dA、響應(yīng)方公鑰PB、雙方約定的會話密鑰長度 klen、參數(shù) W= I I (| Ilog2nI /2) | -I。本步驟中,發(fā)起方雜湊值ZA是將A的可辨別標識、橢圓曲線方程中的參數(shù)a、b、G的橫坐標xG和縱坐標yG、PA的橫坐標xA和縱坐標yA拼接后得到的比特串再進行密碼雜湊運算所得到的雜湊值,同樣,響應(yīng)方雜湊值ZB是將B的可辨別標識、a、b、xG、yG、PB的橫坐標xB和縱坐標yB拼接后得到的比特串再進行密碼雜湊運算所得到的雜湊值。這里的拼接運算和密碼雜湊運算均與圖I中步驟101所述的運算為同一種運算,在此不重復(fù)描述。在密鑰交換協(xié)議執(zhí)行之前,A和B需要約定共享的會話密鑰的長度,本發(fā)明用klen表不該長度。在確定參數(shù)w時用到的I |X| I運算,是確定大于或等于X的最小整數(shù)的運算,例如,I |7.2| I = 8,I 8 I = 8。因此,I Ilog2nI I即為大于或等于log2n的最小整數(shù),
I (I Ilog2nI /2) I I即為大于或等于(I Ilog2nI /2)的最小整數(shù)。步驟A-302 :產(chǎn)生I與(n-1)之間的隨機數(shù)rA,根據(jù)RA = [rA]G = (xl, yl)得到RA,并將RA發(fā)送到響應(yīng)方。本步驟中的隨機數(shù)rA為正整數(shù),且不能超過(n-1)。計算公式RA = [rA]G = (xl,yl)實現(xiàn)的是倍點運算,其中的G為橢圓曲線的基,rA為隨機數(shù),[rA]G運算為對G進行rA倍點運算,運算結(jié)果RA也為一個點,本算法中用(xl,yl)來標識其坐標。步驟A-303 :根據(jù)tA = (dA+xlO rA)mod n計算得到tA,其中的參數(shù)xlO根據(jù)公式 xlO = 2w+[xl&(2w-l)]計算得到。本步驟中,xlO *rA的運算為p元有限域中的標量乘運算。xlO = 2w+[xl&(2w_l)]中的&為按比特邏輯與運算符。步驟A-304 :接收步驟B-306發(fā)送的RB,并判斷RB的坐標是否滿足本發(fā)明中的橢圓曲線方程,即RB是否為橢圓曲線上的點,是則執(zhí)行步驟A-305,否則,執(zhí)行步驟308。 本步驟主要是一個判斷步驟,在步驟B-306的基礎(chǔ)上執(zhí)行。步驟A-305 :根據(jù) U = [h tA] (PB+[x20]RB) = (xU, yU)計算 U,其中的 x20 根據(jù)公式 x20 = 2w+[x2& (2W-1)]計算得到。本步驟中的h *tA為標量乘運算,得到一個p元有限域中的數(shù)值,為標量;[x20]RB為對RB進行x20倍點運算,得到的結(jié)果與PB再進行p元有限域中的點加運算,運算結(jié)果仍為一個點,這樣,[h tA] (PB+[x20]RB)就是對點(PB+[x20]RB)進行h tA倍點運算,運算結(jié)果U為橢圓曲線上的一個新的點,其坐標為(xU,yU)。步驟A-306 :判斷步驟A-305所得到的U是否為無窮遠點,是則執(zhí)行步驟308,否則執(zhí)行步驟A-307。這里所說的無窮遠點為p元有限域橢圓曲線上的一個特殊點,步驟A-305進行的運算為倍點運算,其運算結(jié)果有可能為無窮遠點,而密鑰交換協(xié)議在協(xié)商成功后A在計算會話密鑰時要用到點U的坐標,這里參與計算的點U不能是無窮遠點,因而需要在本步驟判斷U是否為無窮遠點。步驟A-307 :協(xié)商成功,根據(jù)KA = KDF (xU-yU-ZA-ZB,klen)計算會話密鑰KA。本步驟中的協(xié)商成功有兩層含義,其一是實現(xiàn)了從B到A的密鑰確認,即實現(xiàn)了 A確信B擁有會話密鑰的保證;另外,由于本步驟是在步驟A-304接收B在步驟B-306發(fā)出的RB的基礎(chǔ)上執(zhí)行的,而步驟B-306判斷從A到B協(xié)商成功,即實現(xiàn)了從A到B的密鑰確認,B確信A擁有會話密鑰的保證,這樣,本步驟中的協(xié)商成功就有了另一層含義,即AB雙方均確信對方擁有了會話密鑰,即密鑰交換協(xié)議所要進行的AB雙方的協(xié)商完全成功,A只需計算得到會話密鑰即可結(jié)束協(xié)商過程。這里根據(jù)KA = KDF(xU-yU-ZA-ZB,klen)計算得到的KA即為本發(fā)明中A和B所要共享的會話密鑰,從數(shù)學(xué)的角度來看,整個密鑰交換協(xié)議到本步驟后,由本步驟計算得到的KA與步驟B-306計算得到的KB是相同的,因而AB雙方可用同一個會話密鑰對向?qū)Ψ桨l(fā)送的數(shù)據(jù)進行加密,并對對方發(fā)來的加密數(shù)據(jù)進行解密。這里的xU-yU-ZA-ZB為由U的橫坐標xU、縱坐標yU、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接而成的比特串,KDF(xU-yU-ZA-ZB, klen)運算是對比特串xU-yU-ZA-ZB進行密鑰派生運算,生成長度為klen的比特串,其中的KDF為密鑰派生函數(shù)的標識,如果用比特串Z來表示比特串xU-yU-ZA-ZB,設(shè)置一個32比特的計數(shù)變量ct,并設(shè)在該密鑰派生運算中所進行的密碼雜湊運算生成的雜湊值的長度均為V比特,則該密鑰派生運算的運算規(guī)則為(a)置ct的初始值為用16進制表示的00000001 ;(b)確定出大于或等于(klen/v)的最小整數(shù)I |klen/v| I,在循環(huán)變量i從I增加到I I klen/v I I的過程中,循環(huán)執(zhí)行bl和b2步驟(bl)根據(jù)Hai = Hv(Z-Ct)得到Hai ;其中,Hv(Z_ct)是對Z與ct拼接而成的比特串進行密碼雜湊運算,生成的雜湊值的長度為V比特;(b2)ct 遞增 16 進制的 00000001 ;(c)如果(klen/v)為整數(shù),則直 Ha ! |kien/v| = Ha| |kien/v| ;否則,則將 Ha ! Ikien/v|置為比特串Hallkwvll中從最高比特位起的(故w-vxp/ew/v」)比特,其中的L々/e /v」為小于或等于(klen/v)的最小整數(shù);
(d)進燈拼接運算 KA = Ha1-Ha2-. . . _Ha(| |kien/v| I-^-Ha ! | |klen/v| |,得到會話 鑰 KA。由此,從步驟(a)至步驟(d),可通過密鑰派生運算得到會話密鑰KA,可以看出,該密鑰派生運算過程中,除了比特串拼接運算外,最核心的運算為循環(huán)進行密碼雜湊運算。步驟(c)的目的在于,確定步驟(d)中用于拼接成KA的最后一個比特串Ha !丨lklen/vl丨,使KA的長度符合AB預(yù)先約定的長度klen。步驟B-301至步驟B-306如下步驟B-301 :確認響應(yīng)方B的已知數(shù)據(jù)橢圓曲線的基G、階n、余因子h、發(fā)起方雜湊值ZA、響應(yīng)方雜湊值ZB、響應(yīng)方公鑰PB和響應(yīng)方私鑰dB、發(fā)起方公鑰PA、雙方約定的會話密鑰長度 klen、參數(shù) W= I I (| Ilog2nI /2) | -I。步驟B-302 :產(chǎn)生I與(n-1)之間的隨機數(shù)rB,根據(jù)RB = [rB]G = (x2, y2)得到RB,根據(jù) tB = (dB+x20 .rBhodn 得到 tB,其中的參數(shù) x20 根據(jù)公式 x20 = 2w+[x2&(2w_l)]計算得到。與步驟A-302相似,本步驟中的[rB] G也是對G進行的倍點運算,區(qū)別在于倍點次數(shù)不同,這里進行的是rB倍點運算,運算結(jié)果RB也為一個點,其坐標為(x2,y2)。與步驟A-303相似,本步驟中的x20 rB也為p元有限域中的標量乘運算。 步驟B-303 :接收A發(fā)送的RA,并判斷RA的坐標是否滿足橢圓曲線方程,是則執(zhí)行步驟B-304,否則執(zhí)行步驟308。本步驟所接收的RA是A通過步驟A-302計算得到的一個點的坐標。步驟B-304 :根據(jù) V = [h tB] (PA+[xlO]RA) = (xV, yV)計算得到 V,其中的 xlO可通過公式xlO = 2w+[xl&(2w-l)]計算得到。與步驟A-305相似,本步驟中的h -tB為標量乘運算,得到一個p元有限域中的數(shù)值;[xlO]RA為對RA進行xlO倍點運算,得到的結(jié)果與PA再進行p元有限域中的點加運算,運算結(jié)果仍為一個點,這樣,[h tB] (PA+[xlO]RA)就是對點(PA+[xlO]RA)進行h tB倍點運算,運算結(jié)果V為橢圓曲線上的一個新的點,其坐標為(xV,yV)。步驟B-305 :判斷步驟B-304得到的V是否為無窮遠點,是則執(zhí)行步驟308,否則執(zhí)行步驟B-306。步驟B-306 :從A到B的協(xié)商成功,根據(jù)KB = KDF (xV-yV-ZA-ZB, klen)計算得到KB,并將RB發(fā)送到A。本步驟中,從A到B的協(xié)商成功,意味著實現(xiàn)了從A到B的密鑰確認,即B確信A擁有會話密鑰的保證,因而可以計算得到KB來作為會話密鑰,并結(jié)束響應(yīng)方的協(xié)商過程,密鑰交換協(xié)議剩余的工作轉(zhuǎn)移到步驟A-304,由發(fā)起方A來執(zhí)行,如果A判斷協(xié)商也成功,則本密鑰交換協(xié)議的協(xié)商過程就會完全成功,并在步驟A-307中計算得到發(fā)起方的會話密鑰KA,從數(shù)學(xué)的角度講,步驟A-307得到的KA和本步驟得到的KB是相等的,即發(fā)起方A和響應(yīng)方B在此后的通信過程中,將使用相同的會話密鑰來對信息加密和解密。另外,步驟308為協(xié)商失敗。這里,無論是A執(zhí)行步驟A-301至步驟A-307的過程中執(zhí)行本步驟,還是B在執(zhí)行步驟B-301至步驟B-306的過程中執(zhí)行本步驟,均為整個密鑰交換協(xié)議的協(xié)商過程失敗,則AB雙方需要重新開啟協(xié)商過程才能獲得雙方共享的會話密鑰。p元域SM2橢圓曲線公鑰密碼算法還包括公鑰加密算法,該算法進一步包括加密消息和解密密文兩個流程,分別通過圖4和圖5所述的步驟來實現(xiàn)。
在公鑰加密算法中,對消息進行加密生成并輸出密文的用戶稱為加密方,對密文進行解密從而得到消息明文的用戶稱為解密方。加密方加密消息和解密方解密密文這兩個流程用到的密鑰為一對公私密鑰對,加密消息用的是公鑰PB,解密密文用的是私鑰dB,其中的PB是橢圓曲線上的一個點的坐標,dB為p元有限域中的一個數(shù)值,為標量。PB和dB相互對應(yīng),二者通過橢圓曲線的基G聯(lián)系起來,滿足如下關(guān)系PB= [dB]G,其中的[dB]G表示對點G進行dB倍點運算。而且,PB是公開為大眾所共知的,而dB則僅有解密方知道,在已知PB和G的情況下計算dB是不可行的,這可以保證dB的私密性,從而保證用PB加密過的消息只有解密方用dB才能解密,外界即使截獲了密文也不能解密,因而也保證了信息的安全。圖4為國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中利用公鑰加密算法來加密消息的流程圖,該流程由加密方來執(zhí)行。如圖4所示,該流程包括如下步驟步驟401 已知橢圓曲線方程中的參數(shù)a、b,橢圓曲線的基G、余因子h、階n,公鑰PB,待加密消息M及其長度klen比特。待加密的消息M為一比特串,長度為klen比特,其為明文的形式,加密消息的過程就是對M進行加密,得到密文C輸出的過程,解密密文的過程就是由解密方對接收到的密文C進行解密,從而得到消息明文的過程。步驟402 :生成I與(n-1)之間的隨機數(shù)k ;根據(jù)Cl = [k]G計算點Cl的坐標(xl,yl),并將其轉(zhuǎn)換為比特串Cl ;根據(jù)S = [h]PB計算點S的坐標。這里,[k]G為對坐標為(xG,yG)的點G進行k倍點運算,運算結(jié)果為另一個點Cl的坐標,圖4中用(xl,yl)來標識,并且Cl也為橢圓曲線上的點。同樣,[h]PB為對點PB進行h倍點運算,運算結(jié)果也為一個點S的坐標,而且運算得到的點S也為橢圓曲線上的點。將點Cl的坐標轉(zhuǎn)換為比特串的方法,可以采用國家密碼管理局2010年12月發(fā)布的《橢圓曲線公鑰密碼算法》第I部分4. 2. 4和4. 2. 5部分記載的方法,為現(xiàn)有技術(shù),在此不多做描述。需要指出的是,由于點Cl的坐標與比特串Cl之間是相互對應(yīng)的,可利用該《橢圓曲線公鑰密碼算法》中記載的方法進行相互轉(zhuǎn)換,因而在本發(fā)明中不改變二者的標識Cl,而僅用點Cl或比特串Cl來分別表示其不同的形式。步驟403 :判斷S是否為無窮遠點,是則執(zhí)行步驟408,否則執(zhí)行步驟404。
這里,無窮遠點是橢圓曲線上一個特殊的點,步驟402計算得到的點S可能是無窮遠點,因而本步驟需要對其進行驗證,如果是,則加密失敗,退出加密過程,執(zhí)行步驟408,否貝U,可以繼續(xù)進行加密,執(zhí)行步驟404。步驟404 :根據(jù)(x2, y2) = [k]PB 計算得到坐標(x2, y2),根據(jù) t = KDF(x2-y2,klen)計算得到比特串t。這里,[k]PB是對點PB進行k倍點運算,作為運算結(jié)果的點(x2,y2)也是橢圓曲線上的點。x2-y2為對x2和y2進行拼接得到的新的比特串,具體做法為將y2比特串連接于x2比特串的最末比特位的后面,形成一個新的比特串。KDF(x2-y2, klen)是對比特串x2_y2進行密碼派生運算,得到長度為klen的比 特串輸出,其中的KDF為密鑰派生函數(shù)的標識。這里的密鑰派生運算的方法與圖3中步驟A-307所述的密鑰派生運算的方法相同,其核心是循環(huán)執(zhí)行的密碼雜湊運算。與圖I中的步驟101所述的雜湊運算的方法相同,這里的密碼雜湊運算是將任意長度的比特串映射為固定長度比特串的運算,其輸出值稱為雜湊值。本步驟中的密鑰派生運算的方法及參與運算的參數(shù)可描述如下設(shè)在該密鑰派生運算中所進行的密碼雜湊運算生成的雜湊值的長度均為V比特,用Z來標識比特串x2-y2,并設(shè)置一個32比特的計數(shù)變量ct,則該密鑰派生運算的運算方法為(c)置ct的初始值為16進制的00000001 ;(d)確定出大于或等于(klen/v)的最小整數(shù)I | klen/v | I,在循環(huán)變量i從I增加到I lklen/vl I的過程中,循環(huán)執(zhí)行bl和b2步驟(bl)根據(jù)Hai = Hv(Z_ct)得到Hai ;其中,Hv(Z_ct)是對Z與ct拼接而成的比特串Z-Ct進行密碼雜湊運算,生成長度為V比特的雜湊值;(b2) ct遞增,增加量為16進制的00000001 ;(c)如果(klen/v)為整數(shù),則直 Ha ! ||kien/v|| = ^a\ |kien/v| ;否則,將 Ha ! ||kien/v||置為比特串Ha 11klen/v!!中從最高比特位起的(klen - v x / V」)比特,其中的/ V」為小于或等于(klen/v)的最小整數(shù);(d)根據(jù) t = Ha1-Ha2-. . . -Ha(Hkwvlhl)-Ha ! Mklen/vN 進行拼接運算,得到比特串
to由此,從步驟(a)至步驟(d),可通過密鑰派生運算得到比特串t,可以看出,該密鑰派生運算過程中,除了比特串拼接運算外,最核心的運算為循環(huán)進行的密碼雜湊運算。步驟(C)的目的在于,確定步驟(d)中用于拼接成t的最后一個比特串Ha ! I|klen/v|l,使t的長度為klen比特。步驟405 判斷比特串t是否為全0比特串,是則返回步驟402,否則執(zhí)行步驟406。這里使用的步驟404產(chǎn)生的比特串t可能為全0比特串,如果判斷結(jié)果為是,則無法繼續(xù)加密,返回步驟402重新運算,如果判斷結(jié)果為否,則可以繼續(xù)執(zhí)行加密過程,進入步驟406執(zhí)行。步驟406 :對M和t進行按位異或運算,得到比特串C2,對x2_M_y2進行密碼雜湊運算,得到雜湊值C3。
這里,對M和t進行按位異或運算可用公式C2=M t來表示,其中的 為按位異或運算符。x2-M_y2為對比特串x2、M和y2進行拼接后得到的新的比特串,具體做法為將比特串M拼接到x2比特串的最末比特位的后面,將y2比特串拼接到M比特串的最末比特位的后面,從而形成新的比特串x2-M-y2。對x2-M_y2進行的密碼雜湊運算可用公式C3 = Hash(x2_M_y2)來表示,其中,Hash(X)為對比特串X進行密碼雜湊運算的函 數(shù)。步驟404進行的密碼派生運算中的密碼雜湊運算,以及本步驟中的密碼雜湊運算,生成的雜湊值的長度均為V比特,這里的V可以為192,也可以為256,視具體情況而定。步驟407 :將比特串Cl、C2和C3拼接為新的比特串C1-C2-C3,并將其作為密文C輸出。這里,比特串C1-C2-C3的形成方法可以為將比特串C2拼接到比特串Cl的最末比特位的后面,將比特串C3拼接于比特串C2的最末比特位的后面。將密文C輸出,意味著加密方將密文C發(fā)送給解密方。步驟408 :加密失敗,輸出本次加密過程結(jié)束的消息。這里,加密失敗后,本次加密過程停止執(zhí)行,并輸出本次加密過程結(jié)束的消息。如果要重新對M進行加密,則需要重新從步驟401起執(zhí)行。加密方在步驟407中輸出密文C之后,密文C經(jīng)過傳輸?shù)竭_解密方,由于可能存在數(shù)據(jù)丟失、數(shù)據(jù)被篡改、數(shù)據(jù)被偽造等可能,解密方收到的數(shù)據(jù)可能與密文C不同,因而可用C’來標識解密方收到的數(shù)據(jù)。國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中的公鑰加密算法,除了包括加密方法之外,還包括解密方法。圖5為國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中利用公鑰加密算法來解密密文的流程圖,該流程由解密方來實現(xiàn)。該解密流程與圖4所示的加密流程相對應(yīng),實現(xiàn)的是對圖4所示的加密流程所輸出的密文C在傳輸?shù)浇饷芊胶蟊唤饷芊绞盏降拿芪腃’的解密。如圖5所示,該解密流程包括如下步驟步驟501 已知橢圓曲線方程中的參數(shù)a、b,橢圓曲線的基G、余因子h、階n,私鑰dB,接收的密文C’ = Cl’ -C2’ -C3’以及密文中比特串C2’的長度klen比特。本步驟中,私鑰dB是與圖4步驟中所述的公鑰PB相對應(yīng)的,二者構(gòu)成一公私密鑰對。C’為解密方接收到的待解密的密文,其可表示為由C1’、C2’、C3’拼接而成的比特串Cl’ -C2’ -C3’的形式。由于圖4所述的加密方法中,加密方輸出的密文C的形式可以表示為由Cl、C2和C3這三個比特串拼接而成的比特串C1-C2-C3的形式,這里的待解密密文C’的表示形式與其相對應(yīng),用比特串Cl’與比特串Cl對應(yīng),用比特串C2’與比特串C2對應(yīng),用比特串C3’與比特串C3對應(yīng),相對應(yīng)的兩個比特串長度相同,且長度為加密方和解密方所共知,因而可在后續(xù)步驟從C’中分別取出C1’、C2’和C3’。步驟502:從C,中取出比特串Cl’,并將其轉(zhuǎn)換為點Cl’。這里,由于解密方接收到的C’與加密方發(fā)送的密文C在形式上是對應(yīng)的,即均可表示為三個長度相對應(yīng)的比特串拼接而成的拼接比特串的形式,而且相對應(yīng)的比特串之間長度是相同且為加密方、解密方共知,因而可從C’中取出比特串Cl’、C2’和C3’。將比特串Cl’轉(zhuǎn)換為點Cl’的方法,可以采用國家密碼管理局2010年12月發(fā)布的《橢圓曲線公鑰密碼算法》第I部分4. 2. 3和4. 2. 9記載的方法,為現(xiàn)有技術(shù),在此不多做描述。需要指出的是,由于點Cl’的坐標與比特串Cl’本質(zhì)是相同的,二者之間相互對應(yīng),可利用該《橢圓曲線公鑰密碼算法》中記載的方法進行相互轉(zhuǎn)換,因而在本發(fā)明中不改變二者的標識Cl’,而僅用點Cl’或比特串Cl’來分別表示其不同的形式。步驟503 :判斷點Cl’的坐標是否滿足橢圓曲線方程,是則執(zhí)行步驟504,否則執(zhí)行步驟511。這里,點Cl’的坐標不滿足橢圓曲線方程,則說明點Cl’不是橢圓曲線上的點,因而可判斷加密方發(fā)送的密文C在傳輸過程中發(fā)生了數(shù)據(jù)丟失、被偽造、被篡改等可能的改變,因而解密方接收到的密文C’與C是不同的,這樣,該方法就無需、也不能對C’進行解密 而得到加密方要發(fā)送的消息M,故執(zhí)行步驟511,停止解密并輸出解密結(jié)束的消息。步驟504 :根據(jù)S,= [h]Cl’計算點S,的坐標。在步驟503判斷結(jié)果為是的情況下,執(zhí)行本步驟。其中的[h]Cl’是對點Cl’進行h倍點運算,其運算結(jié)果為一新的點S’。步驟505 :判斷S’是否為無窮遠點,是則執(zhí)行步驟511,否則執(zhí)行步驟506。本步驟中,如果S’是無窮遠點,則說明加密方發(fā)送的密文C在傳輸過程中發(fā)生了數(shù)據(jù)丟失、被偽造、被篡改等可能的改變,因而解密方接收到的密文C’與C是不同的,這樣,該方法就無需、也不能對C’進行解密而得到加密方要發(fā)送的消息M,故執(zhí)行步驟511,停止解密并輸出解密結(jié)束的消息。步驟506 :根據(jù)(x2,,y2,) = [dB]Cl,計算得到坐標(x2,,y2,),根據(jù) t,=KDF(x2,-y2’,klen)計算得到比特串t’。在步驟505的判斷結(jié)果為否的情況下,執(zhí)行本步驟。其中,[dB]Cl’為對點Cl’進行dB倍點運算,得到的結(jié)果一新的點,其坐標為(x2’,y2,)。KDF(x2,-y2’,klen)是對x2,與y2’拼接而成的比特串x2,-y2’進行密鑰派生運算,生成長度為klen比特的新的比特串t’。密鑰派生運算的方法已在圖4步驟404中詳細敘述,在此不再重復(fù)。步驟507 :判斷t’是否為全0比特串,是則執(zhí)行步驟511,否則執(zhí)行步驟508。這里,如果t’為全0比特串,則說明加密方發(fā)送的密文C在傳輸過程中發(fā)生了數(shù)據(jù)丟失、被偽造、被篡改等可能的改變,因而解密方接收到的密文C’與C是不同的,這樣,該方法就無需、也不能對C’進行解密而得到加密方要發(fā)送的消息M,故執(zhí)行步驟511,停止解密并輸出解密結(jié)束的消息。步驟508 :從C’中取出比特串C2’ ;對02’和t’進行按位異或運算,得到比特串M’ ;對比特串x2’ -M’ -y2’進行密碼雜湊運算,得到雜湊值u ;從C’中取出比特串C3’。在步驟507的判斷結(jié)果為否的情況下,執(zhí)行本步驟。對C2’和t’進行按位異或運算的方法為公知常識,在此不做贅述。其得到的比特串M’的長度與C2’和t’相同,均為klen比特。對x2’、M’、y2’拼接而成的比特串x2’ _M’ -y2’進行密碼雜湊運算的方法,可以為國家密碼管理局發(fā)布的SM3密碼雜湊運算方法,其運算結(jié)果為一雜湊值U。步驟509 :判斷u是否與C3’相等,是則執(zhí)行步驟510,否則執(zhí)行步驟511。這里,如果u不等于C3’,則說明加密方發(fā)送的密文C在傳輸過程中發(fā)生了數(shù)據(jù)丟失、被偽造、被篡改等可能的改變,因而解密方接收到的密文C’與C是不同的,這樣,該方法就無需、也不能對C’進行解密而得到加密方要發(fā)送的消息M,故執(zhí)行步驟511,停止解密并輸出解密結(jié)束的消息。
步驟510 -MW作為C’對應(yīng)的明文輸出。在步驟509的判斷結(jié)果為是的情況下執(zhí)行本步驟。本步驟是一個數(shù)據(jù)輸出步驟,其輸出的M’,即為解密得到的明文,該明文被解密方當作是對加密方所要發(fā)送的消息M的復(fù)原,至此,對C’的解密過程結(jié)束。步驟511 :解密失敗,輸出本次解密過程結(jié)束的消息。本步驟是在點Cl’的坐標不滿足橢圓曲線的方程、S’為無窮遠點、t’為全0比特串、u不等于C3’這四種情況中的任一種情況發(fā)生時執(zhí)行的步驟。上述任一種情況的發(fā)生,都說明加密方發(fā)送的密文C在向解密方傳輸?shù)倪^程中發(fā)生了改變,造成解密方無法通過解密自身接收的密文C’來獲得加密方所發(fā)送的消息M。因此,該步驟結(jié)束解密過程,并輸出解密因失敗而結(jié)束的消息。圖I至圖5為國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法的流程。圖6為本發(fā)明提供的p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng)結(jié)構(gòu)圖,該系統(tǒng)能夠用硬件來實現(xiàn)P元域SM2橢圓曲線公鑰密碼算法。本發(fā)明中的橢圓曲線具有階n、基G、余因子h等特征量。p元域SM2橢圓曲線公鑰密碼算法包括數(shù)字簽名算法、密鑰交換協(xié)議和公鑰加密算法,其中的數(shù)字簽名算法包括公鑰PA和私鑰dA構(gòu)成的公私密鑰對;執(zhí)行密鑰交換協(xié)議的為發(fā)起方和響應(yīng)方,發(fā)起方具有發(fā)起方公鑰PAl和發(fā)起方私鑰dAl構(gòu)成的公私密鑰對,響應(yīng)方具有響應(yīng)方公鑰PBl和響應(yīng)方私鑰dBl構(gòu)成的公私密鑰對,并且發(fā)起方和響應(yīng)方約定的會話密鑰的長度為klen ;公鑰加密算法包括公鑰PB2和私鑰db2構(gòu)成的公私密鑰對。如圖6所示,該系統(tǒng)包括主控模塊601、解析模塊602、簽名控制中心603、驗證控制中心604、發(fā)起方控制中心605、響應(yīng)方控制中心606、加密方控制中心607、解密方控制中心608、s生成模塊609、上層復(fù)選模塊610、隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613、密鑰派生模塊614 ;其中,主控模塊601是整個系統(tǒng)的控制核心,其通過解析模塊602向各控制中心發(fā)送相應(yīng)的控制命令,以控制各控制中心分別實現(xiàn)上述的數(shù)字簽名生成與驗證功能(即數(shù)字簽名算法)、密鑰交換功能(即密鑰交換協(xié)議)、公鑰加密與解密功能(即公鑰加密算法)。主控模塊601通過解析模塊602與簽名控制中心603、驗證控制中心604、發(fā)起方控制中心605、響應(yīng)方控制中心606、加密方控制中心607、解密方控制中心608通信,包括向簽名控制中心603和驗證控制中心604分別發(fā)送數(shù)字簽名命令和驗證簽名命令,向發(fā)起方控制中心605和響應(yīng)方控制中心606發(fā)送密鑰交換命令,向加密方控制中心607和解密方控制中心608分別發(fā)送加密命令和解密命令;接收簽名控制中心603輸出的數(shù)字簽名、驗證控制中心604輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、發(fā)起方控制中心605和響應(yīng)方控制中心606輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、加密方控制中心607輸出的加密因失敗而結(jié)束的消息或密文、解密方控制中心608輸出的解密因失敗而結(jié)束的消息或明文。當然,主控模塊601在通過解析模塊602向各控制中心發(fā)送相應(yīng)命令的同時,還可以通過解析模塊602向各控制中心發(fā)送相應(yīng)的運算數(shù)據(jù),例如,向簽名控制中心603發(fā)送待簽名消息m,向加密方控制中心607發(fā)送長度為klenl比特的待加密消息M等。另外,主控模塊601還用于控制發(fā)送各控制命令的時間,例如,其向簽名控制中心和驗證控制中心分別發(fā)送數(shù)字簽名命令和驗證簽名命令的時間是不同的,向發(fā)起方控制中心和響應(yīng)方控制中心發(fā)送密鑰交換命令的時間也是不同的,向加密方控制中心和解密方控制中心分別發(fā)送加密命令和解密命令的時間也是不同的。解析模塊602為解析主控模塊601發(fā)送的各種命令,從而將命令發(fā)送給相應(yīng)控制中心,并將各控制中心返回的數(shù)據(jù)轉(zhuǎn)發(fā)給主控模塊601的命令解析與數(shù)據(jù)轉(zhuǎn)發(fā)模塊。解析模塊602用于,解析數(shù)字簽名命令和驗證簽名命令,并將其分別發(fā)送到簽名控制中心603和驗證控制中心604 ;解析密鑰交換命令,并將其分別發(fā)送到發(fā)起方控制中心605和響應(yīng)方控 制中心606 ;解析加密命令和解密命令,并將其分別發(fā)送到加密方控制中心607和解密方控制中心608 ;將簽名控制中心603輸出的數(shù)字簽名、驗證控制中心604輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、發(fā)起方控制中心605和響應(yīng)方控制中心606輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、加密方控制中心607輸出的加密因失敗而結(jié)束的消息或密文、解密方控制中心608輸出的解密因失敗而結(jié)束的消息或明文轉(zhuǎn)發(fā)給主控模塊601??梢姡馕瞿K可以用譯碼器來實現(xiàn)。簽名控制中心603是實現(xiàn)數(shù)字簽名算法中生成數(shù)字簽名的控制核心。簽名控制中心603用于,根據(jù)數(shù)字簽名命令,與s生成模塊609、并通過上層復(fù)選模塊610與隨機數(shù)生成模塊611、倍點運算模塊612交換數(shù)據(jù),包括將待簽名消息m與簽名方雜湊值進行拼接,對得到的拼接消息m’進行密碼雜湊運算,生成拼接消息雜湊值e ;通知隨機數(shù)生成模塊611提供隨機數(shù)k ;將G和k作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,并接收其返回的運算結(jié)果(xl,yl);根據(jù)r = (e+xl)mod n計算得到r ;將r、k發(fā)送到s生成模塊609 ;在r=0、r+k = n或s = 0的情況下,通知隨機數(shù)生成模塊611重新生成并提供k ;將r和s作為m的數(shù)字簽名輸出。本發(fā)明中,對兩個比特串進行的拼接運算為將一個比特串拼接到另一個比特串最末比特位的后面,從而形成一個新的比特串。對更多個比特串進行的拼接運算可依此類推。本發(fā)明中進行的密碼雜湊運算是對任意長度的輸入比特串進行密碼雜湊運算,從而得到一個固定長度的比特串,其運算結(jié)果稱為雜湊值。密碼雜湊算法可為現(xiàn)有技術(shù)中的任一密碼雜湊算法,例如國家密碼管理局發(fā)布的SM3密碼雜湊算法。驗證控制中心604是實現(xiàn)數(shù)字簽名算法中驗證數(shù)字簽名的控制核心。驗證控制中心604用于,根據(jù)驗證簽名命令,通過上層復(fù)選模塊610與倍點運算模塊612、點加模塊613交換數(shù)據(jù),包括將接收的r’和s’作為接收的待驗證消息M,的數(shù)字簽名;判斷r’和s’是否均在I與(n-1)之間;將,與簽名方雜湊值進行拼接,對得到的驗證方拼接消息斤進行密碼雜湊運算,生成驗證方拼接消息雜湊值e’;根據(jù)t = (r' +s' )mod n確定t,判斷t是否為O ;將s’和G作為一組倍點運算數(shù)據(jù)、t和PA作為另一組倍點運算數(shù)據(jù)分別發(fā)送到倍點運算模塊612,將倍點運算模塊612分別返回的點[s' ]G和點[t]PA作為一組點加運算數(shù)據(jù)發(fā)送到點加模塊613,并接收其返回的運算結(jié)果(xl',yl');根據(jù)R=(e' +xl')mod n確定R,并判斷R是否與r’相等;判斷出r’不在I與(n_l)之間、s’不在I與(n_l)之間、t為0、R不等于r’中的任一情況時,輸出數(shù)字簽名驗證不通過的消息,上述各情況均不出現(xiàn)時,輸出數(shù)字簽名驗證通過的消息。本發(fā)明中所涉及的倍點運算數(shù)據(jù)均包括一個點和一個標量,其中的點用坐標的形式表示,標量用數(shù)值的形式來表示,其運算結(jié)果為一個新的點。點加運算數(shù)據(jù)包括兩個點,每個點都用坐標的形式來表示,其運算結(jié)果為一個新的點。這里,數(shù)字簽名驗證不通過的消息,意味著待驗證消息M’與簽名控制中心輸出的消息m不同,原因可能是數(shù)據(jù)在傳輸過程中被篡改、數(shù)據(jù)丟失或M’本身是偽造的數(shù)據(jù),因而不可信。主控模塊在收到該消息后,可以向簽名控制中心重新發(fā)送數(shù)字簽名命令,以令簽名控制中心重新生成數(shù)字簽名,也可以不發(fā)送數(shù)字簽名命令,檢查數(shù)據(jù)傳輸過程所存在的問 題。上述的主控模塊601、解析模塊602、簽名控制中心603、驗證控制中心604、s生成模塊609、上層復(fù)選模塊610、隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613共同構(gòu)成了用硬件來實現(xiàn)國家密碼管理局發(fā)布的P元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名算法的實現(xiàn)子系統(tǒng)。發(fā)起方控制中心605與響應(yīng)方控制中心606分別為發(fā)起方和響應(yīng)方實現(xiàn)密鑰交換協(xié)議、生成會話密鑰的控制核心,但實際應(yīng)用中,二者分別與其他實現(xiàn)系統(tǒng)中的響應(yīng)方控制中心和發(fā)起方控制中心進行通信,以實現(xiàn)密鑰交換協(xié)議。如果一個實現(xiàn)系統(tǒng)中的發(fā)起方控制中心與其他實現(xiàn)系統(tǒng)中的響應(yīng)方控制中心能夠協(xié)商成功,則該發(fā)起方控制中心生成的發(fā)起方會話密鑰與響應(yīng)方控制中心生成的響應(yīng)方會話密鑰是相同的,即為密鑰交換協(xié)議所要得到的會話密鑰。如果二者協(xié)商失敗,則該響應(yīng)方控制中心生成的響應(yīng)方會話密鑰是無效的,發(fā)起方控制中心與響應(yīng)方控制中心也就不能利用該會話密鑰對通信信息進行加密,此時,兩個實現(xiàn)系統(tǒng)中的主控模塊將重新發(fā)送密鑰交換命令,以重新啟動密鑰交換協(xié)議來生成會話密鑰。發(fā)起方控制中心605用于,根據(jù)密鑰交換命令,與其他實現(xiàn)系統(tǒng)中的響應(yīng)方控制中心、并通過上層復(fù)選模塊610與隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613、密鑰派生模塊614交換數(shù)據(jù),包括通知隨機數(shù)生成模塊611提供隨機數(shù)rA ;將rA和G作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,接收其返回的坐標為(xxl,yyl)的點RA,并將RA發(fā)送到其他實現(xiàn)系統(tǒng)中的響應(yīng)方控制中心;根據(jù)xlO = 2w+[xxl&(2w-l)]和x20 =2w+[xx2&(2w-l)]分別確定 xlO 和 x20,其中的 w=||(||logl/2)| 卜I ;根據(jù) tA = (dAl+xlO -rA)mod n計算得到tA ;判斷RB是否為橢圓曲線上的點;將x20和RB作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,接收其返回的點[x20]RB ;將PBl和[x20]RB作為一組點加運算數(shù)據(jù)發(fā)送到點加模塊613,接收其返回的點(PB+[x20]RB) Jfh.tA和(PB+[x20]RB)作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,判斷其返回的坐標為(xU,yU)的點U是否為無窮遠點;將xU、yU、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串Z與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到密鑰派生模塊614,將其返回的比特串KA作為發(fā)起方會話密鑰輸出,并輸出協(xié)商成功的消息;在判斷出RB不為橢圓曲線上的點、U為無窮遠點的情況之一時,輸出協(xié)商失敗的消息。響應(yīng)方控制中心606用于,根據(jù)密鑰交換命令,與其他實現(xiàn)系統(tǒng)中的發(fā)起方控制中心、并通過上層復(fù)選模塊610與隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613、密鑰派生模塊614交換數(shù)據(jù),包括通知隨機數(shù)生成模塊611提供隨機數(shù)rB ;將rB和G作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,接收其返回的坐標為(xx2,yy2)的點RB ;根據(jù) xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2&(2w-l)]分別計算得到 xlO 和 x20 ;根據(jù) tB=(dBl+x20 rB)mod n計算tB ;判斷RA是否為橢圓曲線上的點;將xlO和RA作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,接收其返回的點[xlO]RA ;將點PAl和點[xlO]RA作為一組點加運算數(shù)據(jù)發(fā)送到點加模塊613,接收其返回的點(PA+[xlO]RA)和(PA+[xlO]RA)作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,判斷其返回的坐標為(XV,yV)的點V是否為無窮遠點;將xV、yV、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串V與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到密鑰派生模塊614,將其返回的比特串KB作為響應(yīng)方會話密鑰輸出;將RB發(fā)送到其他實現(xiàn)系統(tǒng)中的發(fā)起方控制中心;在判斷出RA 不為橢圓曲線上的點、V為無窮遠點的情況之一時,輸出協(xié)商失敗的消息。本發(fā)明中,點加模塊可以對兩個點組成的點加運算數(shù)據(jù)進行點加運算,其運算結(jié)果為一個新的點。本發(fā)明中所述的點均以坐標的形式來表示。本發(fā)明中的密鑰派生模塊是對比特串進行密鑰派生運算的模塊,密鑰派生運算是對一比特串進行處理,得到一個預(yù)定長度的比特串的運算,其核心為循環(huán)進行多次密碼雜
湊運算。上述的無窮遠點是橢圓曲線上的一個特殊點,對橢圓曲線上的點進行倍點運算之后,所得到的運算結(jié)果仍為該橢圓曲線上的一個點,其有可能是無窮遠點,但如果發(fā)起方控制中心605得到的U或響應(yīng)方控制中心得到的V為無窮遠點,將導(dǎo)致后續(xù)的密鑰派生運算無法進行,或計算得到的會話密鑰不能應(yīng)用,因此,發(fā)起方控制中心和響應(yīng)方控制中心要分別判斷U和V是否為無窮遠點,以防止發(fā)生上述情況。上述的主控模塊601、解析模塊602、發(fā)起方控制中心605、其他系統(tǒng)中的響應(yīng)方控制中心、上層復(fù)選模塊610、隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613、密鑰派生模塊614共同構(gòu)成了一套用硬件來實現(xiàn)國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中的密鑰交換協(xié)議的實現(xiàn)子系統(tǒng)。同樣,上述的主控模塊601、解析模塊602、其他系統(tǒng)中的發(fā)起方控制中心、響應(yīng)方控制中心606、上層復(fù)選模塊610、隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613、密鑰派生模塊614共同構(gòu)成了另一套用硬件來實現(xiàn)國家密碼管理局發(fā)布的p元域SM2橢圓曲線公鑰密碼算法中的密鑰交換協(xié)議的實現(xiàn)子系統(tǒng)。加密方控制中心607是進行消息加密的控制核心。加密方控制中心607用于,根據(jù)加密命令,通過上層復(fù)選模塊610與隨機數(shù)生成模塊611、倍點運算模塊612、密鑰派生模塊614交換數(shù)據(jù),包括接收長度為klenl比特的待加密消息M ;通知隨機數(shù)生成模塊611提供隨機數(shù)k ;將k和點G作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,接收其返回的點Cl ;將點Cl轉(zhuǎn)換為比特串Cl ;將余因子h和點PB作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,并接收其返回的點S ;判斷S是否為無窮遠點,在判斷結(jié)果為是的情況下輸出本次加密因失敗而結(jié)束的消息;將k和點PB2作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,并接收其返回的點的坐標(x2,y2);將x2和y2拼接為比特串x2-y2 ;將標量klenl與比特串x2-y2作為一組密鑰派生數(shù)據(jù)發(fā)送到密鑰派生模塊614,并接收其返回的比特串tl ;判斷tl是否為全O比特串,在判斷結(jié)果為是的情況下,通知隨機數(shù)生成模塊611重新生成隨機數(shù)k,在判斷結(jié)果為否的情況下,對M與tl進行按位異或運算,得到比特串C2 ;將12、M和y2拼接而成的比特串x2-M-y2進行密碼雜湊運算,生成雜湊值C3 ;將比特串C1、C2和C3拼接為新的比特串C1-C2-C3,并將其作為密文C輸出。加密方控制中心接收的待加密消息M可以來自于主控模塊,即主控模塊在通過解析模塊將加密命令發(fā)送給加密方控制中心的同時,將M也發(fā)送給加密方控制中心。加密方控制中心輸出加密因失敗而結(jié)束的消息,意味著本次加密過程失敗,如果要重新對M進行加密,則主控模塊需要重新通過解析模塊向加密方控制中心發(fā)送加密命令和待加密消息M。上述的將點Cl轉(zhuǎn)換為比特串Cl的方法,與解密方控制中心所執(zhí)行的將比特串Cl ’轉(zhuǎn)換為點Cl’的方法,均為現(xiàn)有技術(shù),而且對于一個點而言,可利用上述轉(zhuǎn)換方法將其轉(zhuǎn)換·為比特串,同時,也可以利用上述方法,將得到的比特串逆轉(zhuǎn)換為點,即點與比特串之間的轉(zhuǎn)換是可逆的,該點和比特串之間具有一一對應(yīng)關(guān)系,因此,本發(fā)明中,將點轉(zhuǎn)換為比特串之后,以及將比特串轉(zhuǎn)換為點之后,標號不變,僅用“點”或“比特串”來標識其形式,例如,點Cl和比特串Cl的標號均為Cl,而標識形式分別為點和比特串。解密方控制中心608是進行密文解密的控制核心。解密方控制中心608用于,根據(jù)解密命令,通過上層復(fù)選模塊610與倍點運算模塊612、密鑰派生模塊614交換數(shù)據(jù),包括接收形式為由Cl’、C2’、C3’拼接而成的比特串Cl’ -C2’ -C3’的待解密的密文C’,其中的比特串Cl’與比特串Cl對應(yīng),比特串C2’與比特串C2對應(yīng)且其長度為klenl比特,比特串C3’與比特串C3對應(yīng);JAC’中取出比特串Cl’,并將其轉(zhuǎn)換為點Cl’;判斷點Cl’的坐標是否滿足橢圓曲線的方程,在判斷結(jié)果為是的情況下,將余因子h和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,并接收其返回的點S’;判斷S’是否為無窮遠點,在判斷結(jié)果為否的情況下,將私鑰dB2和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算模塊612,并接收其返回的點的坐標(x2’,y2’),將x2’、y2’拼接而成的比特串x2’ -y2’與標量klenl作為一組密鑰派生數(shù)據(jù)發(fā)送到密鑰派生模塊614,并接收其返回的比特串tl’ ;判斷tl’是否為全0比特串,在判斷結(jié)果為否的情況下,從C’中取出比特串C2’ ;對02’和tl’進行按位異或運算,得到比特串Ml’;對比特串x2’ -Ml’ -y2’進行密碼雜湊運算,得到雜湊值u ;從C’中取出比特串C3’;判斷u是否與C3’相等,在判斷結(jié)果為是的情況下,將Ml’作為C’對應(yīng)的明文輸出;在點Cl’的坐標不滿足橢圓曲線的方程、S’為無窮遠點、tl’為全0比特串、u不等于C3’中的任一種情況發(fā)生時,輸出解密因失敗而結(jié)束的消息。上述的主控模塊601、解析模塊602、加密方控制中心607、解密方控制中心608、上層復(fù)選模塊610、隨機數(shù)生成模塊611、倍點運算模塊612、密鑰派生模塊614共同構(gòu)成了用硬件來實現(xiàn)國家密碼管理局發(fā)布的P元域SM2橢圓曲線公鑰密碼算法中的公鑰加密算法的實現(xiàn)子系統(tǒng)。s生成模塊609用于,根據(jù)s = [ (1+dA) (k_r dA) ]mod n生成s,將生成的s發(fā)送到簽名控制中心603。本發(fā)明中的s生成模塊用于生成數(shù)字簽名中的S。
上層復(fù)選模塊610為簽名控制中心603與隨機數(shù)生成模塊611、倍點運算模塊612之間,驗證控制中心604與倍點運算模塊612、點加模塊613之間,發(fā)起方控制中心605與隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613、密鑰派生模塊614之間,響應(yīng)方控制中心606與隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613、密鑰派生模塊614之間,加密方控制中心607與隨機數(shù)生成模塊611、倍點運算模塊612、密鑰派生模塊614之間,以及解密方控制中心608與倍點運算模塊612、密鑰派生模塊614之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊。由于本發(fā)明中的隨機數(shù)生成模塊611、倍點運算模塊612、點加模塊613、密鑰派生模塊614均為多個控制中心控制,如果為每個控制中心均設(shè)置一套相應(yīng)的上述模塊,則硬件投入太大,而且浪費,因此,本發(fā)明設(shè)置了上層復(fù)選模塊,實現(xiàn)了隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊的復(fù)用,從而節(jié)約了硬件資源,降低了系統(tǒng)成本。隨機數(shù)生成模塊611用于,生成I與(n-1)之間的隨機數(shù)并通過上層復(fù)選模塊610轉(zhuǎn)發(fā)。本發(fā)明中的隨機數(shù)生成模塊可在多個控制中心的控制下生成隨機數(shù),該隨機數(shù)是 正整數(shù),且不能超過(n-1)。該隨機數(shù)生成模塊可利用國家密碼管理局發(fā)布的隨機數(shù)發(fā)生器來實現(xiàn)。倍點運算模塊612用于,對倍點運算數(shù)據(jù)中的點進行其中的標量倍點運算,將運算結(jié)果通過上層復(fù)選模塊610轉(zhuǎn)發(fā)。本發(fā)明中的倍點運算模塊是實現(xiàn)倍點運算的硬件模塊,其通過上層復(fù)選模塊接收各控制中心發(fā)送的包括點和標量的倍點運算數(shù)據(jù),從而對其中的點進行倍點運算。點加模塊613用于,對點加運算數(shù)據(jù)中的兩個點的坐標進行點加運算,將運算結(jié)果通過上層復(fù)選模塊610轉(zhuǎn)發(fā)。點加模塊是實現(xiàn)點加運算的硬件模塊,其通過上層復(fù)選模塊接收各控制中心發(fā)送的包括兩個點的點加運算數(shù)據(jù),然后對其中的兩個點進行點加運算。密鑰派生模塊614用于,對密鑰派生數(shù)據(jù)中的比特串進行密鑰派生運算,將得到的長度為密鑰派生數(shù)據(jù)中的標量的比特串通過上層復(fù)選模塊610轉(zhuǎn)發(fā)。本發(fā)明中的密鑰派生模塊是實現(xiàn)密鑰派生運算的硬件模塊,其通過上層復(fù)選模塊接收各控制中心發(fā)送的包括比特串和預(yù)定長度的密鑰派生數(shù)據(jù),然后對該比特串進行密鑰派生運算,得到預(yù)定長度的比特串輸出。綜上所述,本發(fā)明中,由于主控模塊可通過解析模塊向各控制中心發(fā)送相應(yīng)的命令,從而可控制簽名控制中心實現(xiàn)數(shù)字簽名算法中的數(shù)字簽名生成功能,控制驗證控制中心實現(xiàn)數(shù)字簽名算法中的驗證數(shù)字簽名的功能,控制該實現(xiàn)系統(tǒng)中的發(fā)起方控制中心實現(xiàn)密鑰交換協(xié)議中發(fā)起方的功能,控制響應(yīng)方控制中心實現(xiàn)密鑰交換協(xié)議中響應(yīng)方的功能,控制加密方控制中心實現(xiàn)公鑰加密算法中的消息加密,控制解密方控制中心實現(xiàn)公鑰加密算法中的密文解密,進一步,除簽名控制中心與s生成模塊直接交換數(shù)據(jù)外,所有控制中心可利用上層復(fù)選模塊來實現(xiàn)對隨機數(shù)生成模塊、倍點運算模塊、點加模塊和密鑰派生模塊的復(fù)用,從而實現(xiàn)生成隨機數(shù)、進行倍點運算、點加運算和密鑰派生的功能,而且上述的各控制中心和各模塊均為硬件模塊,因此,本發(fā)明能夠用硬件來實現(xiàn)p元域SM2橢圓曲線公鑰密碼算法。如圖6所示,該系統(tǒng)還包括w生成模塊615,用于根據(jù)w =|| (II log" ||/2) || -I計算得到參數(shù)W,并將其分別發(fā)送到發(fā)起方控制中心605和響應(yīng)方控制中心606。這里,I |X| I為大于或等于X的最小整數(shù),例如,I Ilog2nI I為大于或等于Iog21^A最小整數(shù),Il (II log〗 11/2) Il為大于或等于(II log〗 Il/2)的最小整數(shù)。w生成模塊可以是在發(fā)起方控制中心或響應(yīng)方控制中心的控制下,生成w并發(fā)送給相應(yīng)控制中心的,例如,發(fā)起方控制中心或響應(yīng)方控制中心向W生成模塊發(fā)送生成W的命令,則W生成模塊生成W,并發(fā)送給相應(yīng)的 控制中心。圖7為本發(fā)明提供的s生成模塊的結(jié)構(gòu)圖,該s生成模塊可以為圖6中的s生成模塊609。如圖7所示,該s生成模塊609包括s生成控制子模塊701、域轉(zhuǎn)換子模塊702、蒙哥馬利域乘法子模塊703、有限域求逆子模塊704 ;其中,s生成控制子模塊701為生成s的核心控制子模塊,其與圖6中的簽名控制中心603交換數(shù)據(jù),控制其他子模塊的工作時序。s生成控制子模塊701用于,接收簽名控制中心603發(fā)送的r和k在有限域的值;將(1+dA)在有限域的值發(fā)送到有限域求逆子模塊704,接收其返回的(1+dAr1在有限域的值^r、dA、(1+dAr1和k各自在有限域的值分別發(fā)送到域轉(zhuǎn)換子模塊702,接收其返回的r、dA、(1+dA)-1和k各自在蒙哥馬利域的值;將r和dA各自在蒙哥馬利域的值發(fā)送到蒙哥馬利域乘法子模塊703,用k在蒙哥馬利域的值與其返回的(r dA)在蒙哥馬利域的值進行減法運算,得到(k-r dA)在蒙哥馬利域的值;將(1+dAr1和(k-r*dA)各自在蒙哥馬利域的值發(fā)送到蒙哥馬利域乘法子模塊703,將其返回的[(1+dAr1 (k-r dA)]在仿射坐標系的值與I發(fā)送到蒙哥馬利域乘法子模塊703,接收其返回的 s = [ (1+dA) (k-r *dA) ]mod n 在有限域的值 s ;將 s = [ (1+dA) (k-r *dA)]mod n在有限域的值s發(fā)送到簽名控制中心603 ;域轉(zhuǎn)換子模塊702用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到s生成控制子模塊701 ;蒙哥馬利域乘法子模塊703用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到s生成控制子模塊701 ;有限域求逆子模塊704用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到s生成控制子模塊701。本發(fā)明利用域轉(zhuǎn)換子模塊將有限域的值轉(zhuǎn)換為蒙哥馬利域的值,并利用蒙哥馬利域乘法子模塊在蒙哥馬利域進行乘法運算,相對于直接在仿射坐標系下的有限域內(nèi)進行上述乘法運算,本發(fā)明雖然增加了子模塊和數(shù)值轉(zhuǎn)換的數(shù)量,但大大提高了運算效率。圖8為本發(fā)明提供的倍點運算模塊的結(jié)構(gòu)圖,該倍點運算模塊為圖6中的倍點運算模塊612。如圖8所示,該倍點運算模塊612包括倍點運算控制子模塊801、射影系二倍點運算子模塊803、域轉(zhuǎn)換子模塊806、蒙哥馬利域乘法子模塊804、有限域求逆子模塊805、射影系點加子模塊802 ;其中,倍點運算控制子模塊801是進行倍點運算的核心控制子模塊,其與圖6中的上層復(fù)選模塊610交換數(shù)據(jù),并控制其他子模塊的工作時序。倍點運算控制子模塊801用于,從上層復(fù)選模塊610接收倍點運算數(shù)據(jù),倍點運算數(shù)據(jù)包括標量f和點D ;將D在仿射坐標系下的坐標(xd,yd)轉(zhuǎn)換為D在射影坐標系下的坐標0 12,7(12,1),并將1(12、知2、1分別發(fā)送到域轉(zhuǎn)換子模塊806,接收其返回的xd2、yd2、I在蒙哥馬利域的值xd3、yd3、zd3 ;將(xd3,yd3,zd3)作為倍點運算結(jié)果[f]D在蒙哥馬利域的坐標(xdl, ydl, zdl)的初始值;確定f■的二進制比特長度L ;將f的二進制形式中的次高比特位作為其當前比特位的初始值,從f的二進制形式中的次高比特位起,每次降低一個比特位作為當前比特位,直至其最低比特位為止,進行(L-I)次迭代運算;將(L-I)次迭代運算的結(jié)果坐標(xdl,ydl,zdl)中的zdl與I發(fā)送到蒙哥馬利域乘法子模塊804,接收其返回的zdl在有限域的值;將zdl在有限域的值發(fā)送到有限域求逆子模塊805,接收其返回的Zdr1在有限域的值;將Zdr1在有限域的值發(fā)送到域轉(zhuǎn)換子模塊806,接收其返回的Zdr1在蒙哥馬利域的值;將(L-I)次迭代運算的結(jié)果坐標(xdl,ydl,zd l)中的xdl、ydl分別與Zdr1在蒙哥馬利域的值一同發(fā)送到蒙哥馬利域乘法子模塊804,分別接收其返回的xdl、ydl 二者在仿射坐標系的值;將I與xdl在仿射坐標系的值、I與ydl在仿射坐標系的值分別發(fā)送到蒙哥馬利域乘法子模塊804,分別接收其返回的xdl、ydl 二者在有限域的值;將xdl、ydl 二者在有限域的值組成的坐標(xdl,ydl)作為[f]D的運算結(jié)果輸出到上層復(fù)選模塊610轉(zhuǎn)發(fā);其中的一次迭代運算包括將坐標(xdl, ydl, zdl)的當前值發(fā)送到射影系二倍點運算子模塊803、在f的當前比特位為二進制I的情況下,將射影系二倍點運算子模塊803返回的輸出坐標與坐標(xd3,yd3, zd3)發(fā)送到射影系點加子模塊802 ;射影系二倍點運算子模塊803用于,對輸入坐標進行二倍點運算,將運算結(jié)果作為輸出坐標返回至倍點運算控制子模塊801。域轉(zhuǎn)換子模塊806用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到倍點運算控制子模塊801 ;蒙哥馬利域乘法子模塊804用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到倍點運算控制子模塊801 ;有限域求逆子模塊805用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到倍點運算控制子模塊801 ;射影系點加子模塊802用于,對輸入的兩個點的坐標進行點加運算,將得到的新的坐標返回倍點運算控制子模塊801。倍點運算控制子模塊801從上層復(fù)選模塊610接收的倍點運算數(shù)據(jù)包括標量f和點D,這里的標量f和D分別是標量數(shù)值和點的指代,可以分別代表圖6所述的各模塊發(fā)送的任一倍點運算數(shù)據(jù)中的標量數(shù)值和點。同樣,這里用域轉(zhuǎn)換子模塊將有限域的數(shù)值轉(zhuǎn)換到蒙哥馬利域,從而提高了運算效率。圖9為本發(fā)明提供的點加模塊的結(jié)構(gòu)圖,該點加模塊為圖6中的點加模塊613。如圖9所示,該點加模塊613包括點加控制子模塊901、域轉(zhuǎn)換子模塊905、射影系點加子模塊902、蒙哥馬利域乘法子模塊904、有限域求逆子模塊903 ;其中,點加控制子模塊901是進行點加運算的核心控制子模塊,其與圖6中的上層復(fù)選模塊610交換數(shù)據(jù),并控制其他子模塊的工作時序。點加控制子模塊901用于,從上層復(fù)選模塊610接收點加數(shù)據(jù),點加數(shù)據(jù)包括點PPl和點PP2 ;將點PPl和PP2在仿射坐標系下的坐標(xll’,yll’ )和(xl2’,yl2’ )分別轉(zhuǎn)換為各自在射影坐標系下的坐標(xll’,yll’,I)和(xl2’,yl2’,I),并將xll’、yll’、I和xl2’、yl2’、I分別發(fā)送到域轉(zhuǎn)換子模塊905,接收其返回的xll’、yll’、I和xl2’、yl2’、l各自在蒙哥馬利域的值xlir、ylll’、zlll’和xl21’、yl21’、zl2r ;將 xlll’、ylll’、zlll’ 組成的坐標(xlll,,ylll’,zlll’)和 xl21’、yl21’、zl2r組成的坐標(xl21’,yl21’,zl21’ )發(fā)送到射影系點加子模塊902,將其返回的坐標(X13r,y131’,Z13r )中的zl31’與I發(fā)送到蒙哥馬利域乘法子模塊904,將其返回的zl31’在有限域的值發(fā)送到有限域求逆子模塊903,接收其返回的zl31' ―1在有限域的值;將zl31' ―1在有限域的值發(fā)送到域轉(zhuǎn)換子模塊905,接收其返回的zl31' ―1在蒙哥馬利域的值;將坐標(xl31’,yl31’,zl31’ )中的xl31’、yl3r分別與zl31' ―1在蒙哥馬利域的值一起發(fā)送到蒙哥馬利域乘法子模塊904,接收其返回的xl31’、yl31’ 二者在仿射坐標系的值;將1131’在仿射坐標系的值與l、yl31’在仿射坐標系的值與I分別發(fā)送到蒙哥馬利域乘法子模塊904,將其返回的xl31’、yl3r二者在有限域的值組成的坐標(xl31’,yl31’ )作為PPl和PP2點加運算的結(jié)果輸出到上層復(fù)選模塊610轉(zhuǎn)發(fā);域轉(zhuǎn)換子模塊905用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到點加控制子模塊;射影系點加子模塊902用于,對輸入的兩個點的坐標進行點加運算,將得到的新 的坐標返回點加控制子模塊901 ;蒙哥馬利域乘法子模塊904用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到點加控制子模塊;有限域求逆子模塊903用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到點加控制子模塊。這里,點加控制子模塊901從上層復(fù)選模塊610接收的點加數(shù)據(jù)包括點PPl和點PP2,這里的PPl和PP2是兩個點的指代,其可以代表圖6中的各模塊發(fā)出的點加運算數(shù)據(jù)中的兩個點。圖10為本發(fā)明提供的密鑰派生模塊的結(jié)構(gòu)圖,該密鑰派生模塊為圖6中的密鑰派生模塊614。如圖10所示,該密鑰派生模塊614包括密鑰派生控制子模塊1001、輸出V比特的雜湊值的密碼雜湊子模塊1002 ;其中,密鑰派生控制子模塊1001為進行密鑰派生運算的核心控制子模塊,其與上層復(fù)選模塊610交換數(shù)據(jù),并控制密碼雜湊子模塊1002的工作時序。密鑰派生控制子模塊1001用于,從上層復(fù)選模塊610接收密鑰派生數(shù)據(jù),密鑰派生數(shù)據(jù)包括標量kk和比特串ZZ ;設(shè)置32比特的計數(shù)變量ct的初始值為16進制表示的00000001 ;確定大于或等于(kk/v)的最小整數(shù)I I kk/v I I ;循環(huán)變量i從I起遞增至I I kk/v I I,每次增加I,執(zhí)行I I kk/v I I次密碼雜湊運算;在(kk/v)為整數(shù)的情況下,置Ha ! Mkk/vN = Hallkk7vl ;在(kk/v)不為整數(shù)的情況下,將Ha ! Mkk/vN置為比特串Hal|kk/v|l中從最高比特位起的(M-vx^M/v」)比特,其中的LM/v」為小于或等于(kk/v)的最小整數(shù);將i從I遞增至(I I kk/v I |-1)的Hai以及Ha !Nkk/v|J_次拼接,將得到的長度為kk比特的比特串作為對ZZ進行密鑰派生運算的結(jié)果輸出至上層復(fù)選模塊610轉(zhuǎn)發(fā);其中,一次密碼雜湊運算包括將ct的當前值與ZZ拼接為比特串ZZ-ct ;將ZZ-ct和標量V作為一組密碼雜湊數(shù)據(jù)發(fā)送到密碼雜湊子模塊1002,將其返回的Hv(ZZ-Ct)賦值給Hai ;ct的值增加16進制的00000001 ;密碼雜湊子模塊1002用于,對接收的密碼雜湊數(shù)據(jù)中的比特串進行密碼雜湊運算,將輸出的長度為密碼雜湊數(shù)據(jù)中的標量比特的雜湊值返回密鑰派生控制子模塊1001。這里的kk和ZZ為圖6中任一密鑰派生數(shù)據(jù)所包括的標量和比特串的指代,例如,kk可以代表圖6中所述的klen或klenl,ZZ可以代表圖6所述的Z和Z’等。
根據(jù)以上所述,密鑰派生運算是一種以循環(huán)的密碼雜湊運算為核心的運算,其輸出比特串的長度由密鑰派生數(shù)據(jù)中的標量所決定。由圖6至圖10的描述可以看出,其中的簽名控制中心603、驗證控制中心604、加密方控制中心607、解密方控制中心608均需要進行密碼雜湊運算,該密碼雜湊運算功能也可以通過一個獨立的密碼雜湊子模塊來實現(xiàn),這與密鑰派生模塊中的密碼雜湊子模塊也可以進行復(fù)用,而且,域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊、射影系點加子模塊也都為多個模塊所應(yīng)用,因而也可以進行復(fù)用。圖11為本發(fā)明提供的另一種p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng)的結(jié)構(gòu)圖。如圖11所示,該系統(tǒng)在圖6對倍點運算、生成隨機數(shù)、點加運算、密鑰派生運算進行復(fù)用的基礎(chǔ)上,進一步設(shè)置了下層復(fù)選模塊,對域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊、射影系點加子模塊、密碼雜湊子模塊也進行了復(fù)用,從而進一步節(jié)約了硬件資源,降低了系統(tǒng)成本。圖11實現(xiàn)系統(tǒng)中所涉及的橢圓曲線具有階n、基G、余因子h等特征量,其實現(xiàn)的p 元域SM2橢圓曲線公鑰密碼算法包括數(shù)字簽名算法、密鑰交換協(xié)議和公鑰加密算法,其中,數(shù)字簽名算法包括公鑰PA和私鑰dA構(gòu)成的公私密鑰對;執(zhí)行密鑰交換協(xié)議的有發(fā)起方和響應(yīng)方,發(fā)起方具有發(fā)起方公鑰PAl和發(fā)起方私鑰dAl構(gòu)成的公私密鑰對,響應(yīng)方具有響應(yīng)方公鑰PBl和響應(yīng)方私鑰dBl構(gòu)成的公私密鑰對,且發(fā)起方和響應(yīng)方約定的會話密鑰的長度為klen ;公鑰加密算法包括公鑰PB2和私鑰db2構(gòu)成的公私密鑰對。如圖11所示,該系統(tǒng)包括主控模塊1101、解析模塊1102、簽名控制中心1103、驗證控制中心1104、發(fā)起方控制子模塊1105、響應(yīng)方控制子模塊1106、加密方控制子模塊1107、解密方控制子模塊1108、s生成控制子模塊1109、上層復(fù)選模塊1110、倍點運算控制子模塊1112、射影系二倍點運算子模塊1116、隨機數(shù)生成模塊1111、點加控制子模塊1113、密鑰派生控制子模塊1114、下層復(fù)選模塊1117、域轉(zhuǎn)換子模塊1118、蒙哥馬利域乘法子模塊1119、有限域求逆子模塊1120、射影系點加子模塊1121、密碼雜湊子模塊1122 ;其中,與圖6中的主控模塊601相同,這里的主控模塊1101是整個系統(tǒng)的控制核心,其用于,主控模塊1101通過解析模塊1102與簽名控制中心1103、驗證控制中心1104、發(fā)起方控制子模塊1105、響應(yīng)方控制子模塊1106、加密方控制子模塊1107、解密方控制子模塊1108通信,包括向簽名控制中心1103和驗證控制中心1104分別發(fā)送數(shù)字簽名命令和驗證簽名命令,向發(fā)起方控制子模塊1105和響應(yīng)方控制子模塊1106發(fā)送密鑰交換命令,向加密方控制子模塊1107和解密方控制子模塊1108分別發(fā)送加密命令和解密命令;接收簽名控制中心1103輸出的數(shù)字簽名、驗證控制中心1104輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、發(fā)起方控制子模塊1105和響應(yīng)方控制子模塊1106輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、加密方控制子模塊1107輸出的加密因失敗而結(jié)束的消息或密文、解密方控制子模塊1108輸出的解密因失敗而結(jié)束的消息或明文;與圖6中的解析模塊602相同,這里的解析模塊1102用于,解析數(shù)字簽名命令和驗證簽名命令,并將其分別發(fā)送到簽名控制中心1103和驗證控制中心1104 ;解析密鑰交換命令,并將其分別發(fā)送到發(fā)起方控制子模塊1105和響應(yīng)方控制子模塊1106 ;解析加密命令和解密命令,并將其分別發(fā)送到加密方控制子模塊1107和解密方控制子模塊1108 ;將簽名控制中心1103輸出的數(shù)字簽名、驗證控制中心1104輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、發(fā)起方控制子模塊1105和響應(yīng)方控制子模塊1106輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、加密方控制子模塊1107輸出的加密因失敗而結(jié)束的消息或密文、解密方控制子模塊1108輸出的解密因失敗而結(jié)束的消息或明文轉(zhuǎn)發(fā)給主控模塊1101 ;與圖6中的簽名控制中心603稍有差異,這里的簽名控制中心1103沒有密碼雜湊功能,其將密碼雜湊數(shù)據(jù)通過下層復(fù)選模塊1117發(fā)送給復(fù)用的密碼雜湊子模塊1122,從而接收其返回的雜湊值,實現(xiàn)密碼雜湊功能。簽名控制中心1103與簽名控制中心603的其他功能相同,具體為簽名控制中心1103用于,根據(jù)數(shù)字簽名命令,與s生成控制子模塊1109、并通過上層復(fù)選模塊1110與隨機數(shù)生成模塊1111、倍點運算控制子模塊1112、通過下層復(fù)選模塊1117與密碼雜湊子模塊1122交換數(shù)據(jù),包括將待簽名消息m與簽名方雜湊值進行拼接,將得到的拼接消息m’與雜湊值長度標量作為一組密碼雜湊數(shù)據(jù)發(fā)送到密碼雜湊子模塊1122,接收其返回的拼接消息雜湊值e ;通知隨機數(shù)生成模塊1111提供隨機數(shù)k ;將G和k作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,并接收其返回的運算結(jié)果(xl, yl);根據(jù)r = (e+xl)mod n計算得到r ;將r、k發(fā)送到s生成控制子模塊1109 ;在 r = 0、r+k = n或s = 0的情況下,通知隨機數(shù)生成模塊1111重新生成并提供k ;將r和s作為m的數(shù)字簽名輸出;與簽名控制中心1103相似,這里的驗證控制中心1104與圖6中的驗證控制中心604相比,也通過將密碼雜湊數(shù)據(jù)發(fā)送給復(fù)用的密碼雜湊子模塊1117,從而實現(xiàn)密碼雜湊功能。驗證控制中心1104的其他功能與驗證控制中心604的相同,具體如下驗證控制中心1104用于,根據(jù)驗證簽名命令,通過上層復(fù)選模塊1110與倍點運算控制子模塊1112、點加控制子模塊1113,通過下層復(fù)選模塊1117與密碼雜湊子模塊1122交換數(shù)據(jù),包括將接收的r’和s’作為接收的待驗證消息M,的數(shù)字簽名;判斷r’和s’是否均在I與(n-1)之間;將,與簽名方雜湊值進行拼接,將得到的驗證方拼接消息^發(fā)送到密碼雜湊子模塊1122,接收其返回的驗證方拼接消息雜湊值e’;根據(jù)t= (r' +s' )modn確定t,判斷t是否為0 ;將s’和G作為一組倍點運算數(shù)據(jù)、將t和PA作為另一組倍點運算數(shù)據(jù)分別發(fā)送到倍點運算控制子模塊1112,將其分別返回的點[s' ]G和點[t]PA作為一組點加運算數(shù)據(jù)發(fā)送到點加控制子模塊1113,并接收其返回的運算結(jié)果(xl',yl');根據(jù)R=(e' +xl' )mod n確定R,并判斷R是否與r’相等;判斷出r’不在I與(n-1)之間、s’不在I與(n-1)之間、t為O、R不等于r’中的任一情況時,輸出數(shù)字簽名驗證不通過的消息,上述各情況均不出現(xiàn)時,輸出數(shù)字簽名驗證通過的消息;發(fā)起方控制子模塊1105用于,根據(jù)密鑰交換命令,與其他實現(xiàn)系統(tǒng)中的響應(yīng)方控制子模塊、通過上層復(fù)選模塊1110與隨機數(shù)生成模塊1111、倍點運算控制子模塊1112、點加控制子模塊1113、密鑰派生控制子模塊1114,通過下層復(fù)選模塊與域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊交換數(shù)據(jù),包括通知隨機數(shù)生成模塊1111提供隨機數(shù)rA ;將rA和G作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,接收其返回的坐標為(xxl,yyl)的點RA,并將RA發(fā)送到其他實現(xiàn)系統(tǒng)中的響應(yīng)方控制子模塊1106 ;根據(jù) xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2&(2W-1)]分別確定 xlO 和 x20,其中的w =II (II log〗 11/2) Il -I;將xlO和rA發(fā)送到域轉(zhuǎn)換子模塊,接收其返回的xlO和rA在蒙哥馬利域的值dfxlO和rA在蒙哥馬利域的值發(fā)送到蒙哥馬利域乘法子模塊,將其返回的xlO -rA在仿射坐標系的值與I發(fā)送到蒙哥馬利域乘法子模塊,并接收其返回的xlO rA在有限域的值;根據(jù)tA = (dAl+xlO *rA)mod n計算得到tA ;判斷RB是否為橢圓曲線上的點;將x20和RB作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,接收其返回的點[x20]RB ;將PBl和[x20]RB作為一組點加運算數(shù)據(jù)發(fā)送到點加控制子模塊1113,接收其返回的點(PB+[x20]RB);將h和tA發(fā)送到域轉(zhuǎn)換子模塊,接收其返回的h和tA在蒙哥馬利域的值;將h和tA在蒙哥馬利域的值發(fā)送到蒙哥馬利域乘法子模塊,將其返回的h -tA在仿射坐標系的值與I發(fā)送到蒙哥馬利域乘法子模塊,并接收其返回的h tA在有限域的值;將h tA和(PB+[x20]RB)作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,判斷其返回的坐標為(xU,yU)的點U是否為無窮遠點JfxU、yU、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串Z與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到密鑰派生控制子模塊1114,將其返回的比特串KA作為發(fā)起方會話密鑰輸出,并輸出協(xié)商成功的消息;在判斷出RB不為橢圓曲線上的點、U為無窮遠點的情況之一時,輸出協(xié)商失敗的消息;響應(yīng)方控制子模塊1106用于,根據(jù)密鑰交換命令,與其他實現(xiàn)系統(tǒng)中的發(fā)起方控制子模塊、通過上層復(fù)選模塊1110與隨機數(shù)生成模塊1111、倍點運算控制子模塊1112、點 加控制子模塊1113、密鑰派生控制子模塊1114,通過下層復(fù)選模塊與域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊交換數(shù)據(jù),包括通知隨機數(shù)生成模塊1111提供隨機數(shù)rB ;將rB和G作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,接收其返回的坐標為(xx2,yy2)的點 RB ;根據(jù) xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2&(2w_l)]分別計算得到 xlO 和 x20 ;將x20和rB發(fā)送到域轉(zhuǎn)換子模塊,接收其返回的x20和rB在蒙哥馬利域的值;將x20和rB在蒙哥馬利域的值發(fā)送到蒙哥馬利域乘法子模塊,將其返回的x20 rB在仿射坐標系的值與I發(fā)送到蒙哥馬利域乘法子模塊,并接收其返回的x20 rB在有限域的值;根據(jù)tB =(dBl+x20 rB)mod n計算tB ;判斷RA是否為橢圓曲線上的點;將xlO和RA作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,接收其返回的點[xl0]RA;將點PAl和點[xlO]RA作為一組點加運算數(shù)據(jù)發(fā)送到點加控制子模塊1113,接收其返回的點(PA+[xl0]RA);將h和tB發(fā)送到域轉(zhuǎn)換子模塊,接收其返回的h和tB在蒙哥馬利域的值;將h和tB在蒙哥馬利域的值發(fā)送到蒙哥馬利域乘法子模塊,將其返回的h tB在仿射坐標系的值與I發(fā)送到蒙哥馬利域乘法子模塊,并接收其返回的h tB在有限域的值;將1! tB和(PA+[xl0]RA)作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,判斷其返回的坐標為(xV,yV)的點V是否為無窮遠點JfxV、yV、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串Z’與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到密鑰派生控制子模塊1114,將其返回的比特串KB作為響應(yīng)方會話密鑰輸出;將RB發(fā)送到其他實現(xiàn)系統(tǒng)中的發(fā)起方控制子模塊;在判斷出RA不為橢圓曲線上的點、V為無窮遠點的情況之一時,輸出協(xié)商失敗的消息;加密方控制子模塊1107用于,根據(jù)加密命令,通過上層復(fù)選模塊1110與隨機數(shù)生成模塊1111、倍點運算控制子模塊1112、密鑰派生控制子模塊1114,通過下層復(fù)選模塊1117與密碼雜湊子模塊1122交換數(shù)據(jù),包括接收長度為klenl比特的待加密消息M ;通知隨機數(shù)生成模塊1111提供隨機數(shù)k ;將k和點G作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,接收其返回的點Cl ;將點Cl轉(zhuǎn)換為比特串Cl ;將余因子h和點PB作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,并接收其返回的點S ;判斷S是否為無窮遠點,在判斷結(jié)果為是的情況下輸出本次加密因失敗而結(jié)束的消息和點PB2作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,并接收其返回的點的坐標(x2,y2);將12和12拼接為比特串x2_y2 ;將標量klenl與比特串x2_y2作為一組密鑰派生數(shù)據(jù)發(fā)送到密鑰派生控制子模塊1114,并接收其返回的比特串tl ;判斷tl是否為全O比特串,在判斷結(jié)果為是的情況下,通知隨機數(shù)生成模塊1111重新生成隨機數(shù)k,在判斷結(jié)果為否的情況下,對M與tl進行按位異或運算,得到比特串C2 ;將x2、M和y2拼接而成的比特串x2_M-y2與雜湊值長度作為一組密碼雜湊數(shù)據(jù)發(fā)送到密碼雜湊子模塊1122,接收其返回的雜湊值C3 ;將比特串C1、C2和C3拼接為新的比特串C1-C2-C3,并將其作為密文C輸出;解密方控制子模塊1108用于,根據(jù)解密命令,通過上層復(fù)選模塊1110與倍點運算控制子模塊1112、密鑰派生控制子模塊1114,通過下層復(fù)選模塊1117與密碼雜湊子模塊1122交換數(shù)據(jù),包括接收形式為由Cl’、C2’、C3’拼接而成的比特串Cl’ -C2’ -C3’的待解密的密文C’,其中的比特串Cl’與比特串Cl對應(yīng),比特串C2’與比特串C2對應(yīng)且其長度為klenl比特,比特串C3’與比特串C3對應(yīng);從C’中取出比特串Cl’,并將其轉(zhuǎn)換為點Cl’;判斷點Cl’的坐標是否滿足橢圓曲線的方程,在判斷結(jié)果為是的情況下,將余因子h和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,并接收其返回的點S’ ;判斷S’是否為無窮遠點,在判斷結(jié)果為否的情況下,將私鑰dB2和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到倍點運算控制子模塊1112,并接收其返回的點的坐標(x2’,y2’),將x2’、y2’拼接而成的比特串x2’ _y2’與標量klenl作為一組密鑰派生數(shù)據(jù)發(fā)送到密鑰派生控制子模塊1114,并接收其返回的比特串tl’ ;判斷tl’是否為全0比特串,在判斷結(jié)果為否的情況下,從C’中取出比特串C2’ ;對02’和tl’進行按位異或運算,得到比特串Ml’ ;將比特串x2’ -Ml’ -y2’與雜湊值長度發(fā)送到密碼雜湊子模塊1122,接收其返回的雜湊值u ;從C’中取出比特串C3’;判斷u是否與C3’相等,在判斷結(jié)果為是的情況下,將Ml’作為C’對應(yīng)的明文輸出;在點Cl’的坐標不滿足橢圓曲線的方程、S’為無窮遠點、tl’為全0比特串、u不等于C3’中的任一種情況發(fā)生時,輸出解密因失敗而結(jié)束的消息;s生成控制子模塊1109用于,接收簽名控制中心1103發(fā)送的r和k在有限域的值;將(1+dA)在有限域的值發(fā)送到有限域求逆子模塊1120,接收其返回的(1+dAr1在有限域的值;將1'、(^、(1+(^)_1和k各自在有限域的值分別發(fā)送到域轉(zhuǎn)換子模塊1118,接收其返回的r、dA、(1+dA)-1和k各自在蒙哥馬利域的值;將r和dA各自在蒙哥馬利域的值發(fā)送到蒙哥馬利域乘法子模塊1119,用k在蒙哥馬利域的值與其返回的(r dA)在蒙哥馬利域的值進行減法運算,得到(k-r MA)在蒙哥馬利域的值;將(1+dAr1和(k-r MA)各自在蒙哥馬利域的值發(fā)送到蒙哥馬利域乘法子模塊1119,將其返回的[(1+dAr1 (k-r -dA)]在仿射坐標系的值與I發(fā)送到蒙哥馬利域乘法子模塊1119,接收其返回的s = [(1+dA)-1 (k-r-dA)]mod n在有限域的值s ;將s = [ (1+dA) (k-r *dA)]mod n在有限域的值s發(fā)送到簽名控制中心1103 ;上層復(fù)選模塊1110為簽名控制中心1103與隨機數(shù)生成模塊1111、倍點運算控制子模塊1112之間,驗證控制中心1104與倍點運算控制子模塊1112、點加控制子模塊1113之間,發(fā)起方控制子模塊1105與隨機數(shù)生成模塊1111、倍點運算控制子模塊1112、點加控制子模塊1113、密鑰派生控制子模塊1114之間,響應(yīng)方控制子模塊1106與隨機數(shù)生成模塊1111、倍點運算控制子模塊1112、點加控制子模塊1113、密鑰派生控制子模塊1114之間,力口密方控制子模塊1107與隨機數(shù)生成模塊1111、倍點運算控制子模塊1112、密鑰派生控制子模塊1114之間,以及解密方控制子模塊1108與倍點運算控制子模塊1112、密鑰派生控制子模塊1114之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊;倍點運算控制子模塊1112用于,通過下層復(fù)選模塊1117與域轉(zhuǎn)換子模塊1118、射影系點加子模塊1121、射影系二倍點運算子模塊1116、蒙哥馬利域乘法子模塊1119、有限域求逆子模塊1120交換數(shù)據(jù),包括從上層復(fù) 選模塊1110接收倍點運算數(shù)據(jù),倍點運算數(shù)據(jù)包括標量f和點D ;將D在仿射坐標系下的坐標(xd,yd)轉(zhuǎn)換為D在射影坐標系下的坐標(xd2, yd2,1),并將xd2、yd2、l分別發(fā)送到域轉(zhuǎn)換子模塊1118,接收其返回的xd2、yd2、I在蒙哥馬利域的值xd3、yd3、zd3 ;將(Xd3,yd3,zd3)作為倍點運算結(jié)果[f]D在蒙哥馬利域的坐標(xdl,ydl,zdl)的初始值;確定f的二進制比特長度L ;將f的二進制形式中的次高比特位作為其當前比特位的初始值,從f 的二進制形式中的次高比特位起,每次降低一個比特位作為當前比特位,直至其最低比特位為止,進行(L-I)次迭代運算;將(L-I)次迭代運算的結(jié)果坐標(xdl,ydl,Zdl)中的zdl與I發(fā)送到蒙哥馬利域乘法子模塊1119,接收其返回的zdl在有限域的值;將zdl在有限域的值發(fā)送到有限域求逆子模塊1120,接收其返回的Zdr1在有限域的值;將Zdr1在有限域的值發(fā)送到域轉(zhuǎn)換子模塊1118,接收其返回的Zdr1在蒙哥馬利域的值;將(L-I)次迭代運算的結(jié)果坐標(xdl, ydl, zdl)中的xdl、ydl分別與zdl-1在蒙哥馬利域的值一同發(fā)送到蒙哥馬利域乘法子模塊1119,分別接收其返回的xdl、ydl 二者在仿射坐標系的值;將I與xdl在仿射坐標系的值、I與ydl在仿射坐標系的值分別發(fā)送到蒙哥馬利域乘法子模塊1119,分別接收其返回的xdl、ydl 二者在有限域的值;將xdl、ydl 二者在有限域的值組成的坐標(xdl,ydl)作為[f]D的運算結(jié)果輸出到上層復(fù)選模塊1110轉(zhuǎn)發(fā);其中的一次迭代運算包括將坐標(xdl, ydl, zdl)的當前值發(fā)送到射影系二倍點運算子模塊1116、在f 的當前比特位為二進制I的情況下,將射影系二倍點運算子模塊1116返回的輸出坐標與坐標(xd3,yd3,zd3)發(fā)送到射影系點加子模塊1121 ;射影系二倍點運算子模塊1116用于,對輸入坐標進行二倍點運算,將運算結(jié)果作為輸出坐標返回至倍點運算控制子模塊1112 ;隨機數(shù)生成模塊1111用于,生成I與(n-1)之間的隨機數(shù)并通過上層復(fù)選模塊1110轉(zhuǎn)發(fā),這里的隨機數(shù)均為正整數(shù)。點加控制子模塊1113用于,通過下層復(fù)選模塊1117與域轉(zhuǎn)換子模塊1118、蒙哥馬利域乘法子模塊1119、射影系點加子模塊1121、有限域求逆子模塊1120交換數(shù)據(jù),包括從上層復(fù)選模塊1110接收點加數(shù)據(jù),點加數(shù)據(jù)包括點PPl和點PP2 ;將點PPl和PP2在仿射坐標系下的坐標(xll’,yll’ )和(xl2’,yl2’ )分別轉(zhuǎn)換為各自在射影坐標系下的坐標(xll’,yll’,I)和(xl2’,yl2’,l),并將 111’、711’、1和112’、712’、1分別發(fā)送到域轉(zhuǎn)換子模塊1118,接收其返回的xll’、yll’、l和xl2’、yl2’、l各自在蒙哥馬利域的值xlll’、ylll’、zlll’ 和 xl21’、yl2r、zl21’ ;將 xlll’、ylll’、zlll’ 組成的坐標(xlll,,ylll’,ziir )和xi2r、yi2i’、zi2r組成的坐標(xi2r,yi2i’,zi2r )發(fā)送到射影系點加子模塊1121,將其返回的坐標(X13r,yl31’,Z13r)中的Z131’與I發(fā)送到蒙哥馬利域乘法子模塊1119,將其返回的Z131’在有限域的值發(fā)送到有限域求逆子模塊1120,接收其返回的zl31' ―1在有限域的值;將zl31' ―1在有限域的值發(fā)送到域轉(zhuǎn)換子模塊1118,接收其返回的zl31' ―1在蒙哥馬利域的值;將坐標(xl31’,yl31’,zl31’ )中的xl31’、yl3r分別與zl31' ―1在蒙哥馬利域的值一起發(fā)送到蒙哥馬利域乘法子模塊1119,接收其返回的xl31’、yl31’ 二者在仿射坐標系的值Jfxl31’在仿射坐標系的值與I、yl31’在仿射坐標系的值與I分別發(fā)送到蒙哥馬利域乘法子模塊1119,將其返回的xl31’、yl3r 二者在有限域的值組成的坐標(xl31’,yl3r )作為PPl和PP2點加運算的結(jié)果輸出到上層復(fù)選模塊1110轉(zhuǎn)發(fā);密鑰派生控制子模塊 1114用于,通過下層復(fù)選模塊1117與密碼雜湊子模塊1122交換數(shù)據(jù),包括從上層復(fù)選模塊1110接收密鑰派生數(shù)據(jù),密鑰派生數(shù)據(jù)包括標量kk和比特串ZZ ;設(shè)置32比特的計數(shù)變量Ct的初始值為16進制表示的00000001 ;確定大于或等于(kk/v)的最小整數(shù)I I kk/v I I ;循環(huán)變量i從I起遞增至I I kk/v | | ,每次增加1,執(zhí)行I I kk/V I I次密碼雜湊運算;在(kk/v)為整數(shù)的情況下,置Ha ! Nkk/vM = HaNkk/vM ;在(kk/v)不為整數(shù)的情況下,將Ha ! Mkk/vN置為比特串Hal|kk/v|l中從最高比特位起的
比特,其中的^為小于或等于(kk/v)的最小整數(shù);將i從I遞增至(I I kk/v I |-1)的Hai以及Ha ! i |kk/v| i順次拼接,將得到的長度為kk比特的比特串作為對ZZ進行密鑰派生運算的結(jié)果輸出至上層復(fù)選模塊1110轉(zhuǎn)發(fā);其中,一次密碼雜湊運算包括將ct的當前值與ZZ拼接為比特串ZZ-ct ;將ZZ-ct和標量V作為一組密碼雜湊數(shù)據(jù)發(fā)送到密碼雜湊子模塊1122,將其返回的Hv(ZZ-Ct)賦值給Hai ;ct的值增加16進制的00000001 ;與圖6相比,該系統(tǒng)增加了下層復(fù)選模塊,從而實現(xiàn)了對域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊、射影系點加子模塊、密碼雜湊子模塊的復(fù)用。下層復(fù)選模塊1117為簽名控制中心1103、驗證控制中心1104、加密方控制子模塊1107、解密方控制子模塊1108、密鑰派生控制子模塊1114與密碼雜湊子模塊1122之間,發(fā)起方控制子模塊與域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊之間,響應(yīng)方控制子模塊與域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊之間,倍點運算控制子模塊1112與域轉(zhuǎn)換子模塊1118、射影系點加子模塊1121、射影系二倍點運算子模塊1116、蒙哥馬利域乘法子模塊1119、有限域求逆子模塊1120之間,點加控制子模塊1113與域轉(zhuǎn)換子模塊1118、蒙哥馬利域乘法子模塊1119、射影系點加子模塊1121、有限域求逆子模塊1120之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊;域轉(zhuǎn)換子模塊1118用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到下層復(fù)選模塊1117轉(zhuǎn)發(fā);蒙哥馬利域乘法子模塊1119用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到下層復(fù)選模塊1117轉(zhuǎn)發(fā);有限域求逆子模塊1120用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到下層復(fù)選模塊1117轉(zhuǎn)發(fā);射影系點加子模塊1121用于,對輸入的兩個點的坐標進行點加運算,將得到的新的坐標返回下層復(fù)選模塊1117轉(zhuǎn)發(fā);密碼雜湊子模塊1122用于,對接收的密碼雜湊數(shù)據(jù)中的比特串進行密碼雜湊運算,將輸出的長度為密碼雜湊數(shù)據(jù)中的標量比特的雜湊值返回下層復(fù)選模塊1117轉(zhuǎn)發(fā)。本發(fā)明中的上層復(fù)選模塊和下層復(fù)選模塊均可以通過多路選擇器來實現(xiàn)??梢钥闯觯瑘D11所示的系統(tǒng)也可以用多個硬件模塊來分別實現(xiàn)數(shù)字簽名算法、密鑰交換協(xié)議和公鑰加密算法,即用硬件來實現(xiàn)P元域SM2橢圓曲線公鑰密碼算法。并且,與圖6中的系統(tǒng)相比,該系統(tǒng)使用的硬件子模塊的數(shù)量更少,因而更加節(jié)約硬件資源,成本也更低。如圖11所示,該系統(tǒng)還包括w生成模塊1115,用于根據(jù)撕=II (II log" ||/2) Il -I計算得到參數(shù)w,并將其分別發(fā)送到發(fā)起方控制子模塊1105和響應(yīng)方控制子模塊1106。與圖6所示的w生成模塊615相同,w生成模塊1115可以是在發(fā)起方控制子模塊1105或響應(yīng)方控制子模塊1106的控制下生成W。由此可見,本發(fā)明具有以下優(yōu)點(I)本發(fā)明中,由于主控模塊可通過解析模塊向各控制中心發(fā)送相應(yīng)的命令,從而可控制簽名控制中心實現(xiàn)數(shù)字簽名算法中的數(shù)字簽名生成功能,控制驗證控制中心實現(xiàn)數(shù)字簽名算法中的驗證數(shù)字簽名的功能,控制該實現(xiàn)系統(tǒng)中的發(fā)起方控制中心實現(xiàn)密鑰交換協(xié)議中發(fā)起方的功能,控制響應(yīng)方控制中心實現(xiàn)密鑰交換協(xié)議中響應(yīng)方的功能,控制加密 方控制中心實現(xiàn)公鑰加密算法中的消息加密,控制解密方控制中心實現(xiàn)公鑰加密算法中的密文解密,進一步,除簽名控制中心與s生成模塊直接交換數(shù)據(jù)外,所有控制中心可利用上層復(fù)選模塊來實現(xiàn)對隨機數(shù)生成模塊、倍點運算模塊、點加模塊和密鑰派生模塊的復(fù)用,從而實現(xiàn)生成隨機數(shù)、進行倍點運算、點加運算和密鑰派生的功能,而且上述的各控制中心和各模塊均為硬件模塊,因此,本發(fā)明能夠用硬件來實現(xiàn)P元域SM2橢圓曲線公鑰密碼算法。(2)本發(fā)明設(shè)置了上層復(fù)選模塊,實現(xiàn)了隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊的復(fù)用,進一步設(shè)置了下層復(fù)選模塊,從而對域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊、射影系點加子模塊、密碼雜湊子模塊也進行了復(fù)用,因此,本發(fā)明能夠節(jié)約硬件資源,降低系統(tǒng)成本。(3)本發(fā)明利用域轉(zhuǎn)換子模塊將有限域的值轉(zhuǎn)換為蒙哥馬利域的值,并利用蒙哥馬利域乘法子模塊在蒙哥馬利域進行乘法運算,相對于直接在仿射坐標系下的有限域內(nèi)進行上述乘法運算,本發(fā)明雖然增加了子模塊和數(shù)值轉(zhuǎn)換的數(shù)量,但大大提高了運算效率。以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種P元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng),所述橢圓曲線具有階n、基G、余因子h ;所述p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名算法包括公鑰PA和私鑰dA構(gòu)成的公私密鑰對;執(zhí)行所述P元域SM2橢圓曲線公鑰密碼算法中的密鑰交換協(xié)議的為發(fā)起方和響應(yīng)方,發(fā)起方具有發(fā)起方公鑰PAl和發(fā)起方私鑰dAl構(gòu)成的公私密鑰對,響應(yīng)方具有響應(yīng)方公鑰PBl和響應(yīng)方私鑰dBl構(gòu)成的公私密鑰對;發(fā)起方和響應(yīng)方約定的會話密鑰的長度為klen ;所述p元域SM2橢圓曲線公鑰密碼算法中的公鑰加密算法包括公鑰PB2和私鑰db2構(gòu)成的公私密鑰對;其特征在于,該系統(tǒng)包括主控模塊、解析模塊、簽名控制中心、驗證控制中心、發(fā)起方控制中心、響應(yīng)方控制中心、加密方控制中心、解密方控制中心、s生成模塊、上層復(fù)選模塊、隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊;其中, 所述主控模塊通過所述解析模塊與所述簽名控制中心、驗證控制中心、發(fā)起方控制中心、響應(yīng)方控制中心、加密方控制中心、解密方控制中心通信,包括向所述簽名控制中心和 驗證控制中心分別發(fā)送數(shù)字簽名命令和驗證簽名命令,向所述發(fā)起方控制中心和響應(yīng)方控制中心發(fā)送密鑰交換命令,向所述加密方控制中心和解密方控制中心分別發(fā)送加密命令和解密命令;接收所述簽名控制中心輸出的數(shù)字簽名、所述驗證控制中心輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、所述發(fā)起方控制中心和響應(yīng)方控制中心輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、所述加密方控制中心輸出的加密因失敗而結(jié)束的消息或密文、所述解密方控制中心輸出的解密因失敗而結(jié)束的消息或明文; 所述解析模塊用于,解析所述數(shù)字簽名命令和驗證簽名命令,并將其分別發(fā)送到所述簽名控制中心和驗證控制中心;解析所述密鑰交換命令,并將其分別發(fā)送到發(fā)起方控制中心和響應(yīng)方控制中心;解析所述加密命令和解密命令,并將其分別發(fā)送到所述加密方控制中心和解S方控制中心;將所述簽名控制中心輸出的數(shù)子簽名、所述驗證控制中心輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、所述發(fā)起方控制中心和響應(yīng)方控制中心輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、所述加密方控制中心輸出的加密因失敗而結(jié)束的消息或密文、所述解密方控制中心輸出的解密因失敗而結(jié)束的消息或明文轉(zhuǎn)發(fā)給所述主控模塊; 所述簽名控制中心用于,根據(jù)所述數(shù)字簽名命令,與所述s生成模塊、并通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算模塊交換數(shù)據(jù),包括將待簽名消息m與簽名方雜湊值進行拼接,對得到的拼接消息m’進行密碼雜湊運算,生成拼接消息雜湊值e ;通知所述隨機數(shù)生成模塊提供隨機數(shù)k ;將G和k作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的運算結(jié)果(xl, yl);根據(jù)r = (e+xl)mod n計算得到r ;將r、k發(fā)送到所述s生成模塊;在r = 0、r+k = n或s = O的情況下,通知所述隨機數(shù)生成模塊重新生成并提供k ;將r和s作為m的數(shù)字簽名輸出; 所述驗證控制中心用于,根據(jù)所述驗證簽名命令,通過所述上層復(fù)選模塊與所述倍點運算模塊、點加模塊交換數(shù)據(jù),包括將接收的r’和s’作為接收的待驗證消息M,的數(shù)字簽名;判斷r’和s’是否均在I與(n-1)之間;將,與簽名方雜湊值進行拼接,對得到的驗證方拼接消息W進行密碼雜湊運算,生成驗證方拼接消息雜湊值e’;根據(jù)t = (r' +s' )modn確定t,判斷t是否為O ;將S,和G作為一組倍點運算數(shù)據(jù)、t和PA作為另一組倍點運算數(shù)據(jù)分別發(fā)送到所述倍點運算模塊,將所述倍點運算模塊分別返回的點[s' ]G和點[t]PA作為一組點加運算數(shù)據(jù)發(fā)送到所述點加模塊,并接收其返回的運算結(jié)果(Xl',yl');根據(jù)R=(e' +xl' )mod n確定R,并判斷R是否與r’相等;判斷出r’不在I與(n-1)之間、s’不在I與(n-1)之間、t為O、R不等于r’中的任一情況時,輸出數(shù)字簽名驗證不通過的消息,上述各情況均不出現(xiàn)時,輸出數(shù)字簽名驗證通過的消息; 所述發(fā)起方控制中心用于,根據(jù)所述密鑰交換命令,與其他所述實現(xiàn)系統(tǒng)中的響應(yīng)方控制中心、并通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊交換數(shù)據(jù),包括通知所述隨機數(shù)生成模塊提供隨機數(shù)rA ;將rA和G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的坐標為(xxl,yyl)的點RA,并將RA發(fā)送到其他所述實現(xiàn)系統(tǒng)中的響應(yīng)方控制中心;根據(jù)xlO = 2w+[xxl&(2w-l)]和x20 =2w+[xx2& (2W-1)]分別確定 xlO 和 x20,其中的 w=||(||logj/2)| 卜I ;根據(jù) tA = (dAl+xlO -rA)mod n計算得到tA ;判斷RB是否為所述橢圓曲線上的點;將x20和RB作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的點[x20]RB ^fPBl和[x20]RB作為一組點加運算數(shù)據(jù)發(fā)送到所述點加模塊,接收其返回的點(PB+[x20]RB) ^h*tA和(PB+[x20]RB)作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,判斷其返回的坐標為(xU,yU)的點U是否 為無窮遠點JfxU、yU、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串Z與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生模塊,將其返回的比特串KA作為發(fā)起方會話密鑰輸出,并輸出協(xié)商成功的消息;在判斷出RB不為所述橢圓曲線上的點、U為無窮遠點的情況之一時,輸出協(xié)商失敗的消息; 所述響應(yīng)方控制中心用于,根據(jù)所述密鑰交換命令,與其他所述實現(xiàn)系統(tǒng)中的發(fā)起方控制中心、并通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊交換數(shù)據(jù),包括通知所述隨機數(shù)生成模塊提供隨機數(shù)rB ;將rB和G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的坐標為(xx2,yy2)的點RB ;根據(jù)xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2&(2w-l)]分別計算得到 xlO 和 x20 ;根據(jù) tB =(dBl+x20 rB)mod n計算tB ;判斷RA是否為所述橢圓曲線上的點;將xlO和RA作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的點[xlO]RA;將點PAl和點[xlO]RA作為一組點加運算數(shù)據(jù)發(fā)送到所述點加模塊,接收其返回的點(PA+[xlO]RA)和(PA+[xlO]RA)作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,判斷其返回的坐標為(xV,yV)的點V是否為無窮遠點;將xV、yV、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串V與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生模塊,將其返回的比特串KB作為響應(yīng)方會話密鑰輸出;將RB發(fā)送到其他所述實現(xiàn)系統(tǒng)中的發(fā)起方控制中心;在判斷出RA不為所述橢圓曲線上的點、V為無窮遠點的情況之一時,輸出協(xié)商失敗的消息;所述加密方控制中心用于,根據(jù)所述加密命令,通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算模塊、密鑰派生模塊交換數(shù)據(jù),包括接收長度為klenl比特的待加密消息M ;通知所述隨機數(shù)生成模塊提供隨機數(shù)k ;將k和點G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,接收其返回的點Cl ;將點Cl轉(zhuǎn)換為比特串Cl ;將余因子h和點PB作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的點S ;判斷S是否為無窮遠點,在判斷結(jié)果為是的情況下輸出本次加密因失敗而結(jié)束的消息和點PB2作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的點的坐標(x2,y2);將12和y2拼接為比特串x2_y2 ;將標量klenl與比特串x2_y2作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生模塊,并接收其返回的比特串tl ;判斷tl是否為全O比特串,在判斷結(jié)果為是的情況下,通知所述隨機數(shù)生成模塊重新生成隨機數(shù)k,在判斷結(jié)果為否的情況下,對M與tl進行按位異或運算,得到比特串C2 Jfx2、M和y2拼接而成的比特串x2_M-y2進行密碼雜湊運算,生成雜湊值C3 ;將比特串C1、C2和C3拼接為新的比特串C1-C2-C3,并將其作為密文C輸出;所述解密方控制中心用于,根據(jù)所述解密命令,通過所述上層復(fù)選模塊與所述倍點運算模塊、密鑰派生模塊交換 數(shù)據(jù),包括接收形式為由Cl’、C2’、C3’拼接而成的比特串Cl’ -C2’ -C3’的待解密的密文C’,其中的比特串Cl’與所述比特串Cl對應(yīng),比特串C2’與所述比特串C2對應(yīng)且其長度為klenl比特,比特串C3’與所述比特串C3對應(yīng);從(’中取出比特串Cl’,并將其轉(zhuǎn)換為點Cl’;判斷點Cl’的坐標是否滿足所述橢圓曲線的方程,在判斷結(jié)果為是的情況下,將余因子h和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的點S’ ;判斷S’是否為無窮遠點,在判斷結(jié)果為否的情況下,將私鑰dB2和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算模塊,并接收其返回的點的坐標(x2’,y2’),將x2’、y2’拼接而成的比特串x2’ -y2’與標量klenl作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生模塊,并接收其返回的比特串tl’ ;判斷tl’是否為全O比特串,在判斷結(jié)果為否的情況下,從C’中取出比特串C2’;對C2’和tl’進行按位異或運算,得到比特串Ml’;對比特串x2’ -Ml’ -y2’進行密碼雜湊運算,得到雜湊值u ;從C’中取出比特串03’;判斷11是否與C3’相等,在判斷結(jié)果為是的情況下,將Ml’作為C’對應(yīng)的明文輸出;在點Cl’的坐標不滿足所述橢圓曲線的方程、S’為無窮遠點、tl’為全O比特串、u不等于C3’中的任一種情況發(fā)生時,輸出解密因失敗而結(jié)束的消息; 所述s生成模塊用于,根據(jù)s = [(1+dAr1 (k-r dA)]mod n生成s,將生成的s發(fā)送到所述簽名控制中心; 所述上層復(fù)選模塊為所述簽名控制中心與所述隨機數(shù)生成模塊、倍點運算模塊之間,所述驗證控制中心與所述倍點運算模塊、點加模塊之間,所述發(fā)起方控制中心與所述隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊之間,所述響應(yīng)方控制中心與所述隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊之間,所述加密方控制中心與所述隨機數(shù)生成模塊、倍點運算模塊、密鑰派生模塊之間,以及所述解密方控制中心與所述倍點運算模塊、密鑰派生模塊之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊; 所述隨機數(shù)生成模塊用于,生成I與(n-1)之間的隨機數(shù)并通過所述上層復(fù)選模塊轉(zhuǎn)發(fā); 所述倍點運算模塊用于,對倍點運算數(shù)據(jù)中的點進行其中的標量倍點運算,將運算結(jié)果通過所述上層復(fù)選模塊轉(zhuǎn)發(fā); 所述點加模塊用于,對所述點加運算數(shù)據(jù)中的兩個點的坐標進行點加運算,將運算結(jié)果通過所述上層復(fù)選模塊轉(zhuǎn)發(fā); 所述密鑰派生模塊用于,對密鑰派生數(shù)據(jù)中的比特串進行密鑰派生運算,將得到的長度為密鑰派生數(shù)據(jù)中的標量的比特串通過所述上層復(fù)選模塊轉(zhuǎn)發(fā)。
2.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,該系統(tǒng)還包括w生成模塊,用于根據(jù)w =II (II log〗 11/2) Il -I計算得到參數(shù)W,并將其分別發(fā)送到所述發(fā)起方控制中心和所述響應(yīng)方控制中心。
3.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,所述s生成模塊包括s生成控制子模塊、域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊;其中, 所述S生成控制子模塊用于,接收所述簽名控制中心發(fā)送的r和k在有限域的值;將d+dA)在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的(1+dAr1在有限域的值;將r、dA、(1+dAr1和k各自在有限域的值分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的r、dA、(1+dAr1和k各自在蒙哥馬利域的值;將r和dA各自在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,用k在蒙哥馬利域的值與其返回的(r dA)在蒙哥馬利域的值進行減法運算,得到(k-r MA)在蒙哥馬利域的值;將(1+dAr1和(k-r MA)各自在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的[(1+dAr1 (k-r-dA)]在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的s = [(1+dAr1 (k-r dA)]mod n在有限域的值s ;將s = [ (1+dA) (k-r *dA)]mod n在有限域的值s發(fā)送到所述簽名控制中心; 所述域轉(zhuǎn)換子模塊用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到所述s生成控制子模塊; 所述蒙哥馬利域乘法子模塊用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到所述s生成控制子模塊; 所述有限域求逆子模塊用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到所述S生成控制子模塊。
4.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,所述倍點運算模塊包括倍點運算控制子模塊、射影系二倍點運算子模塊、域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊、射影系點加子模塊;其中, 所述倍點運算控制子模塊用于,從所述上層復(fù)選模塊接收倍點運算數(shù)據(jù),所述倍點運算數(shù)據(jù)包括標量f和點D ;將D在仿射坐標系下的坐標(xd,yd)轉(zhuǎn)換為D在射影坐標系下的坐標(xd2, yd2,1),并將xd2、yd2、l分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的xd2、yd2、l在蒙哥馬利域的值xd3、yd3、zd3 ;將(xd3, yd3, zd3)作為倍點運算結(jié)果[f]D在蒙哥馬利域的坐標(xdl, ydl, zdl)的初始值;確定f的二進制比特長度L ;將f的二進制形式中的次高比特位作為其當前比特位的初始值,從所述f 的二進制形式中的次高比特位起,每次降低一個比特位作為當前比特位,直至其最低比特位為止,進行(L-I)次迭代運算;將所述(L-I)次迭代運算的結(jié)果坐標(Xdl,ydl,zdl)中的zdl與I發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的zdl在有限域的值;將zdl在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的zdl—1在有限域的值;將zdl—1在有限域的值發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的Zdr1在蒙哥馬利域的值;將所述(L-I)次迭代運算的結(jié)果坐標(xdl,ydl,zdl)中的xdl、ydl分別與zdl—1在蒙哥馬利域的值一同發(fā)送到所述蒙哥馬利域乘法子模塊,分別接收其返回的xdl、ydl 二者在仿射坐標系的值;將I與xdl在仿射坐標系的值、I與ydl在仿射坐標系的值分別發(fā)送到蒙哥馬利域乘法子模塊,分別接收其返回的xdl、ydl 二者在有限域的值;將xdl、ydl 二者在有限域的值組成的坐標(xdl,ydl)作為[f]D的運算結(jié)果輸出到所述上層復(fù)選模塊轉(zhuǎn)發(fā);其中的一次所述的迭代運算包括將坐標(xdl,ydl, zdl)的當前值發(fā)送到所述射影系二倍點運算子模塊、在f的當前比特位為二進制I的情況下,將所述射影系二倍點運算子模塊返回的輸出坐標與坐標(xd3,yd3,zd3)發(fā)送到所述射影系點加子模塊;所述射影系二倍點運算子模塊用于,對輸入坐標進行二倍點運算,將運算結(jié)果作為輸出坐標返回至所述倍點運算控制子模塊; 所述域轉(zhuǎn)換子模塊用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到所述倍點運算控制子模塊; 所述蒙哥馬利域乘法子模塊用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到所述倍點運算控制子模塊; 所述有限域求逆子模塊用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到所述倍點運算控制子模塊; 所述射影系點加子模塊用于,對輸入的兩個點的坐標進行點加運算,將得到的新的坐標返回所述倍點運算控制子模塊。
5.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,所述點加模塊包括點加控制子模塊、域轉(zhuǎn)換子模塊、射影系點加子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊;其中, 所述點加控制子模塊用于,從所述上層復(fù)選模塊接收點加數(shù)據(jù),所述點加數(shù)據(jù)包括點PPl和點PP2;將點PPl和PP2在仿射坐標系下的坐標(xll’,yir )和(xl2’,yl2’ )分別轉(zhuǎn)換為各自在射影坐標系下的坐標(xir,yll’,l)和(xl2’,yl2’,l),并將xir、yll’、l和xl2’、yl2’、l分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的xir、yll’、l和xl2’、yl2’、l各自在蒙哥馬利域的值xiir、yiir、ziir 和 xi2i’、yi2r、zi2i’ ;將 xiir、yiir、ziir組成的坐標(xlll,,ylir, Zlir )和 xl21’、yl21’、zl21’ 組成的坐標(xl21,,yl21’,Z12V)發(fā)送到所述射影系點加子模塊,將其返回的坐標(X13r,yl31’,Z13r)中的Z131’與I發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的Z131’在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的Z131' -1在有限域的值;將Z131' ―1在有限域的值發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的Z131' ―1在蒙哥馬利域的值;將坐標(X13r,yl31’,Z13r)中的X131’、yl31’分別與zl31' ―1在蒙哥馬利域的值一起發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的xl31’、yl31’ 二者在仿射坐標系的值;將xl31’在仿射坐標系的值與I、yl31’在仿射坐標系的值與I分別發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的xl31’、yl31’二者在有限域的值組成的坐標(X131’,yl31’)作為PPl和PP2點加運算的結(jié)果輸出到所述上層復(fù)選模塊轉(zhuǎn)發(fā); 所述域轉(zhuǎn)換子模塊用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到所述點加控制子模塊; 所述射影系點加子模塊用于,對輸入的兩個點的坐標進行點加運算,將得到的新的坐標返回所述點加控制子模塊; 所述蒙哥馬利域乘法子模塊用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到所述點加控制子模塊塊; 所述有限域求逆子模塊用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到所述點加控制子模塊。
6.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,所述密鑰派生模塊包括密鑰派生控制子模塊、輸出V比特的雜湊值的密碼雜湊子模塊;其中, 所述密鑰派生控制子模塊用于,從所述上層復(fù)選模塊接收密鑰派生數(shù)據(jù),所述密鑰派生數(shù)據(jù)包括標量kk和比特串ZZ ;設(shè)置32比特的計數(shù)變量ct的初始值為16進制表示的·00000001 ;確定大于或等于(kk/v)的最小整數(shù)I |kk/v| | ;循環(huán)變量i從I起遞增至I I kk/v| I,每次增加1,執(zhí)行I |kk/V| I次密碼雜湊運算;在(kk/v)為整數(shù)的情況下,置Ha ! |kk/Vl = HaNkk/vM ;在(kk/v)不為整數(shù)的情況下,將Ha ! ||kk/v||置為比特串Ha||kk/v||中從最高比特位起的(狀-vxLM/v」)比特,其中的[M/V」為小于或等于(kk/v)的最小整數(shù);將i從I遞增至(I kk/v I I I)的Hai以及Ha ! | |kk/v| i順次拼接,將得到的長度為kk比特的比特串作為對ZZ進行密鑰派生運算的結(jié)果輸出至所述上層復(fù)選模塊轉(zhuǎn)發(fā);其中,一次所述的密碼雜湊運算包括將ct的當前值與ZZ拼接為比特串ZZ-ct ;將ZZ-ct和標量V作為一組密碼雜湊數(shù)據(jù)發(fā)送到所述密碼雜湊子模塊,將其返回的Hv(ZZ-Ct)賦值給Hai ;ct的值增加16進制的 00000001 ; 所述密碼雜湊子模塊用于,對接收的密碼雜湊數(shù)據(jù)中的比特串進行密碼雜湊運算,將輸出的長度為密碼雜湊數(shù)據(jù)中的標量比特的雜湊值返回所述密鑰派生控制子模塊。
7.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,所述解析模塊為譯碼器。
8.—種p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng),所述橢圓曲線具有階n、基G、余因子h ;所述p元域SM2橢圓曲線公鑰密碼算法中的數(shù)字簽名算法包括公鑰PA和私鑰dA構(gòu)成的公私密鑰對;執(zhí)行所述P元域SM2橢圓曲線公鑰密碼算法中的密鑰交換協(xié)議的為發(fā)起方和響應(yīng)方,發(fā)起方具有發(fā)起方公鑰PAl和發(fā)起方私鑰dAl構(gòu)成的公私密鑰對,響應(yīng)方具有響應(yīng)方公鑰PBl和響應(yīng)方私鑰dBl構(gòu)成的公私密鑰對;發(fā)起方和響應(yīng)方約定的會話密鑰的長度為klen ;所述p元域SM2橢圓曲線公鑰密碼算法中的公鑰加密算法包括公鑰PB2和私鑰db2構(gòu)成的公私密鑰對;其特征在于,該系統(tǒng)包括主控模塊、解析模塊、簽名控制中心、驗證控制中心、發(fā)起方控制子模塊、響應(yīng)方控制子模塊、加密方控制子模塊、解密方控制子模塊、s生成控制子模塊、上層復(fù)選模塊、倍點運算控制子模塊、射影系二倍點運算子模塊、隨機數(shù)生成模塊、點加控制子模塊、密鑰派生控制子模塊、下層復(fù)選模塊、域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊、射影系點加子模塊、密碼雜湊子模塊;其中, 所述主控模塊用于,所述主控模塊通過所述解析模塊與所述簽名控制中心、驗證控制中心、發(fā)起方控制子模塊、響應(yīng)方控制子模塊、加密方控制子模塊、解密方控制子模塊通信,包括向所述簽名控制中心和驗證控制中心分別發(fā)送數(shù)字簽名命令和驗證簽名命令,向所述發(fā)起方控制子模塊和響應(yīng)方控制子模塊發(fā)送密鑰交換命令,向所述加密方控制子模塊和解密方控制子模塊分別發(fā)送加密命令和解密命令;接收所述簽名控制中心輸出的數(shù)字簽名、所述驗證控制中心輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、所述發(fā)起方控制子模塊和響應(yīng)方控制子模塊輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、所述加密方控制子模塊輸出的加密因失敗而結(jié)束的消息或密文、所述解密方控制子模塊輸出的解密因失敗而結(jié)束的消息或明文; 所述解析模塊用于,解析所述數(shù)字簽名命令和驗證簽名命令,并將其分別發(fā)送到所述簽名控制中心和驗證控制中心;解析所述密鑰交換命令,并將其分別發(fā)送到發(fā)起方控制子模塊和響應(yīng)方控制子模塊;解析所述加密命令和解密命令,并將其分別發(fā)送到所述加密方控制子模塊和解密方控制子模塊;將所述簽名控制中心輸出的數(shù)字簽名、所述驗證控制中心輸出的數(shù)字簽名驗證不通過的消息或數(shù)字簽名驗證通過的消息、所述發(fā)起方控制子模塊和響應(yīng)方控制子模塊輸出的發(fā)起方會話密鑰、響應(yīng)方會話密鑰、協(xié)商成功的消息或協(xié)商失敗的消息、所述加密方控制子模塊輸出的加密因失敗而結(jié)束的消息或密文、所述解密方控制子模塊輸出的解密因失敗而結(jié)束的消息或明文轉(zhuǎn)發(fā)給所述主控模塊; 所述簽名控制中心用于,根據(jù)所述數(shù)字簽名命令,與所述S生成控制子模塊、并通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括將待簽名消息m與簽名方雜湊值進行拼接,將得到的拼接消息m’與雜湊值長度標量作為一組密碼雜湊數(shù)據(jù)發(fā)送到所述密碼雜湊子模塊,接收其返回的拼接消息雜湊值e ;通知所述隨機數(shù)生成模塊提供隨機數(shù)k ;將G和k作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的運算結(jié)果(xl,yl);根據(jù)r =(e+xl)mod n計算得到r ;將r、k發(fā)送到所述s生成控制子模塊;在r = 0、r+k = n或s =O的情況下,通知所述隨機數(shù)生成模塊重新生成并提供k ;將1*和s作為m的數(shù)字簽名輸出;所述驗證控制中心用于,根據(jù)所述驗證簽名命令,通過所述上層復(fù)選模塊與所述倍點運算控制子模塊、點加控制子模塊,通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括將接收的r’和S,作為接收的待驗證消息M’的數(shù)字簽名;判斷r’和S,是否均在I與(n-1)之間;將,與簽名方雜湊值進行拼接,將得到的驗證方拼接消息^發(fā)送到所述 密碼雜湊子模塊,接收其返回的驗證方拼接消息雜湊值e’ ;根據(jù)t = (r' +s' )mod n確定t,判斷t是否為O ;將s’和G作為一組倍點運算數(shù)據(jù)、將t和PA作為另一組倍點運算數(shù)據(jù)分別發(fā)送到所述倍點運算控制子模塊,將其分別返回的點[s' ]G和點[t]PA作為一組點加運算數(shù)據(jù)發(fā)送到所述點加控制子模塊,并接收其返回的運算結(jié)果(xl',yl,);根據(jù)R=(e' +xl' )mod n確定R,并判斷R是否與r’相等;判斷出r’不在I與(n-1)之間、s’不在I與(n-1)之間、t為O、R不等于r’中的任一情況時,輸出數(shù)字簽名驗證不通過的消息,上述各情況均不出現(xiàn)時,輸出數(shù)字簽名驗證通過的消息; 所述發(fā)起方控制子模塊用于,根據(jù)所述密鑰交換命令,與其他所述實現(xiàn)系統(tǒng)中的響應(yīng)方控制子模塊、通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、點加控制子模塊、密鑰派生控制子模塊,通過所述下層復(fù)選模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊交換數(shù)據(jù),包括通知所述隨機數(shù)生成模塊提供隨機數(shù)rA ;將rA和G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的坐標為(xxl,yyl)的點RA,并將RA發(fā)送到其他所述實現(xiàn)系統(tǒng)中的響應(yīng)方控制子模塊;根據(jù)xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2& (2W-1)]分別確定 xlO 和 x20,其中的w=|| (|| log= ||/2) || -I;將 xlO 和 rA 發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的xlO和Tk在蒙哥馬利域的值;將XlO和Tk在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的xlO rA在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,并接收其返回的xlO rA在有限域的值;根據(jù)tA =(dAl+xlO rA)mod n計算得到tA ;判斷RB是否為所述橢圓曲線上的點;將x20和RB作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的點[x20]RB ^fPBl和[x20]RB作為一組點加運算數(shù)據(jù)發(fā)送到所述點加控制子模塊,接收其返回的點(PB+[x20]RB);將h和tA發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的h和tA在蒙哥馬利域的值;將h和tA在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的h .tA在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,并接收其返回的h tA在有限域的值;將h*tA和(PB+[x20]RB)作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,判斷其返回的坐標為(xU,yU)的點U是否為無窮遠點;將xU、yU、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串Z與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生控制子模塊,將其返回的比特串KA作為發(fā)起方會話密鑰輸出,并輸出協(xié)商成功的消息;在判斷出RB不為所述橢圓曲線上的點、U為無窮遠點的情況之一時,輸出協(xié)商失敗的消息; 所述響應(yīng)方控制子模塊用于,根據(jù)所述密鑰交換命令,與其他所述實現(xiàn)系統(tǒng)中的發(fā)起方控制子模塊、通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、點加控制子模塊、密鑰派生控制子模塊,通過所述下層復(fù)選模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊交換數(shù)據(jù),包括通知所述隨機數(shù)生成模塊提供隨機數(shù)rB ;將rB和G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的坐標為(xx2,yy2)的點RB ;根據(jù) xlO = 2w+[xxl&(2w-l)]和 x20 = 2w+[xx2&(2w_l)]分別計算得到 xlO 和 x20 ;將x20和rB發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的x20和rB在蒙哥馬利域的值;將x20和rB在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的x20 rB在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,并接收其返回的x20 rB在有限域的值;根據(jù)tB = (dBl+x20 rB)mod n計算tB ;判斷RA是否為所述橢圓曲線上的點;將xlO和RA作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的點[xlO]RA ;將 點PAl和點[xlO]RA作為一組點加運算數(shù)據(jù)發(fā)送到所述點加控制子模塊,接收其返回的點(PA+[xlO] RA);將h和tB發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的h和tB在蒙哥馬利域的值;將h和tB在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的h tB在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,并接收其返回的h tB在有限域的值dfh tB和(PA+[xlO]RA)作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,判斷其返回的坐標為(xV,yV)的點V是否為無窮遠點;將xV、yV、發(fā)起方雜湊值ZA和響應(yīng)方雜湊值ZB拼接成的比特串V與長度klen作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生控制子模塊,將其返回的比特串KB作為響應(yīng)方會話密鑰輸出;將RB發(fā)送到其他所述實現(xiàn)系統(tǒng)中的發(fā)起方控制子模塊;在判斷出RA不為所述橢圓曲線上的點、V為無窮遠點的情況之一時,輸出協(xié)商失敗的消息; 所述加密方控制子模塊用于,根據(jù)所述加密命令,通過所述上層復(fù)選模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、密鑰派生控制子模塊,通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括接收長度為klenl比特的待加密消息M ;通知所述隨機數(shù)生成模塊提供隨機數(shù)k ;將k和點G作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,接收其返回的點Cl ;將點Cl轉(zhuǎn)換為比特串Cl ;將余因子h和點PB作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的點S ;判斷S是否為無窮遠點,在判斷結(jié)果為是的情況下輸出本次加密因失敗而結(jié)束的消息;將k和點PB2作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的點的坐標(x2,y2);將12和y2拼接為比特串x2_y2 ;將標量klenl與比特串x2_y2作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生控制子模塊,并接收其返回的比特串tl ;判斷tl是否為全0比特串,在判斷結(jié)果為是的情況下,通知所述隨機數(shù)生成模塊重新生成隨機數(shù)k,在判斷結(jié)果為否的情況下,對M與tl進行按位異或運算,得到比特串C2 ;將x2、M和y2拼接而成的比特串x2_M-y2與雜湊值長度作為一組密碼雜湊數(shù)據(jù)發(fā)送到所述密碼雜湊子模塊,接收其返回的雜湊值C3 ;將比特串Cl、C2和C3拼接為新的比特串C1-C2-C3,并將其作為密文C輸出; 所述解密方控制子模塊用于,根據(jù)所述解密命令,通過所述上層復(fù)選模塊與所述倍點運算控制子模塊、密鑰派生控制子模塊,通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括接收形式為由C1’、C2’、C3’拼接而成的比特串Cl’ -C2’ -C3’的待解密的密文C’,其中的比特串Cl’與所述比特串Cl對應(yīng),比特串C2’與所述比特串C2對應(yīng)且其長度為klenl比特,比特串C3’與所述比特串C3對應(yīng);從C’中取出比特串Cl’,并將其轉(zhuǎn)換為點Cl’;判斷點Cl’的坐標是否滿足所述橢圓曲線的方程,在判斷結(jié)果為是的情況下,將余因子h和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的點S’;判斷S’是否為無窮遠點,在判斷結(jié)果為否的情況下,將私鑰dB2和點Cl’作為一組倍點運算數(shù)據(jù)發(fā)送到所述倍點運算控制子模塊,并接收其返回的點的坐標U2’,y2’),將x2’、·12,拼接而成的比特串x2’ -y2’與標 量klenl作為一組密鑰派生數(shù)據(jù)發(fā)送到所述密鑰派生控制子模塊,并接收其返回的比特串tl’ ;判斷tl’是否為全O比特串,在判斷結(jié)果為否的情況下,從C’中取出比特串C2’;對C2’和tl’進行按位異或運算,得到比特串Ml’;將比特串x2’ -Ml’ -y2’與雜湊值長度發(fā)送到所述密碼雜湊子模塊,接收其返回的雜湊值u ;從C’中取出比特串C3’;判斷u是否與C3’相等,在判斷結(jié)果為是的情況下,將Ml’作為C’對應(yīng)的明文輸出;在點Cl’的坐標不滿足所述橢圓曲線的方程、S’為無窮遠點、tl’為全O比特串、u不等于C3’中的任一種情況發(fā)生時,輸出解密因失敗而結(jié)束的消息; 所述s生成控制子模塊用于,接收所述簽名控制中心發(fā)送的r和k在有限域的值;將(1+dA)在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的(1+dAr1在有限域的值;將r、dA、(1+dA)-1和k各自在有限域的值分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的r、dA、(1+dA)-1和k各自在蒙哥馬利域的值;將r和dA各自在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,用k在蒙哥馬利域的值與其返回的(r dA)在蒙哥馬利域的值進行減法運算,得到(k-r MA)在蒙哥馬利域的值;將(1+dAr1和(k-r MA)各自在蒙哥馬利域的值發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的[(1+dAr1 (k-r-dA)]在仿射坐標系的值與I發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的s = [(1+dA)-1 (k-r dA)]mod n在有限域的值s ;將s = [ (1+dA) (k-r *dA)]mod n在有限域的值s發(fā)送到所述簽名控制中心; 所述上層復(fù)選模塊為所述簽名控制中心與所述隨機數(shù)生成模塊、倍點運算控制子模塊之間,所述驗證控制中心與所述倍點運算控制子模塊、點加控制子模塊之間,所述發(fā)起方控制子模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、點加控制子模塊、密鑰派生控制子模塊之間,所述響應(yīng)方控制子模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、點加控制子模塊、密鑰派生控制子模塊之間,所述加密方控制子模塊與所述隨機數(shù)生成模塊、倍點運算控制子模塊、密鑰派生控制子模塊之間,以及所述解密方控制子模塊與所述倍點運算控制子模塊、密鑰派生控制子模塊之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊; 所述倍點運算控制子模塊用于,通過所述下層復(fù)選模塊與所述域轉(zhuǎn)換子模塊、射影系點加子模塊、射影系二倍點運算子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊交換數(shù)據(jù),包括從所述上層復(fù)選模塊接收所述倍點運算數(shù)據(jù),所述倍點運算數(shù)據(jù)包括標量f 和點D ;將D在仿射坐標系下的坐標(xd,yd)轉(zhuǎn)換為D在射影坐標系下的坐標(xd2,yd2,1),并將xd2、yd2、I分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的xd2、yd2、I在蒙哥馬利域的值xd3、yd3、zd3 ;將(xd3, yd3, zd3)作為倍點運算結(jié)果[f]D在蒙哥馬利域的坐標(xdl, ydl,zdl)的初始值;確定f的二進制比特長度L ;將f的二進制形式中的次高比特位作為其當前比特位的初始值,從所述f的二進制形式中的次高比特位起,每次降低一個比特位作為當前比特位,直至其最低比特位為止,進行(L-I)次迭代運算;將所述(L-I)次迭代運算的結(jié)果坐標(xdl,ydl, zdl)中的zdl與I發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的zdl在有限域的值;將zdl在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的zdl—1在有限域的值;將Zdr1在有限域的值發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的Zdr1在蒙哥馬利域的值;將所述(L-I)次迭代運算的結(jié)果坐標(xdl, ydl, zdl)中的xdl、ydl分別與zdr1在蒙哥馬利域的值一同發(fā)送到所述蒙哥馬利域乘法子模塊,分別接收其返回的xdl、ydl 二者在仿射坐標系的值;將I與xdl在仿射坐標系的值、I與ydl在仿射坐標系的值分別發(fā)送到蒙哥馬利域乘法子模塊,分別接收其返回的xdl、ydl 二者在有限域的值;將xdl、ydl 二者在有限域的值組成的坐標(xdl,ydl)作為[f]D的運算結(jié)果輸出到所述上層復(fù)選模塊轉(zhuǎn)發(fā);其中的一次所述的迭代運算包括將坐標(xdl, ydl, zdl)的當前值發(fā)送到所述射影系二倍點運算子模塊、在f的當前比特位為二進制I的情況下,將所述射影系二倍點運算子模塊返回的輸出坐標與坐標(xd3,yd3,zd3)發(fā)送到所述射影系點加子模塊; 所述射影系二倍點運算子模塊用于,對輸入坐標進行二倍點運算,將運算結(jié)果作為輸出坐標返回至所述倍點運算控制子模塊; 所述隨機數(shù)生成模塊用于,生成I與(n-1)之間的隨機數(shù)并通過所述上層復(fù)選模塊轉(zhuǎn)發(fā); 所述點加控制子模塊用于,通過所述下層復(fù)選模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、射影系點加子模塊、有限域求逆子模塊交換數(shù)據(jù),包括從所述上層復(fù)選模塊接收點加數(shù)據(jù),所述點加數(shù)據(jù)包括點PPl和點PP2 ;將點PPl和PP2在仿射坐標系下的坐 標(xll’,yll’ )和(Xl2’,yl2’ )分別轉(zhuǎn)換為各自在射影坐標系下的坐標(xll,,yllM)和(xl2’,yl2’,l),并將xll’、yll’、l和xl2’、yl2’、l分別發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的111’、711’、1和112’、712’、1各自在蒙哥馬利域的值1111’、7111’、2111’和xl21’、yl21’、zl2r ;將 xlll’、ylll’、zlll’ 組成的坐標(xlll,,ylll’,zlll’)和 xl21’、yl21’、zl2r組成的坐標(X121’,yl2r,zl2r )發(fā)送到所述射影系點加子模塊,將其返回的坐標(X131’,yl3r,zl3r )中的zl31’與I發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的zl31’在有限域的值發(fā)送到所述有限域求逆子模塊,接收其返回的zl31' 1在有限域的值;將zl31' ―1在有限域的值發(fā)送到所述域轉(zhuǎn)換子模塊,接收其返回的zl31' ―1在蒙哥馬利域的值;將坐標(xl3r,yl31’,zl3r)中的xl31’、yl31’分別與zl31' ―1在蒙哥馬利域的值一起發(fā)送到所述蒙哥馬利域乘法子模塊,接收其返回的xl31’、yl31’ 二者在仿射坐標系的值;將xl31’在仿射坐標系的值與l、yl31’在仿射坐標系的值與I分別發(fā)送到所述蒙哥馬利域乘法子模塊,將其返回的xl31’、yl3r 二者在有限域的值組成的坐標U131’,yl31’ )作為PPl和PP2點加運算的結(jié)果輸出到所述上層復(fù)選模塊轉(zhuǎn)發(fā); 所述密鑰派生控制子模塊用于,通過所述下層復(fù)選模塊與所述密碼雜湊子模塊交換數(shù)據(jù),包括從所述上層復(fù)選模塊接收密鑰派生數(shù)據(jù),所述密鑰派生數(shù)據(jù)包括標量kk和比特串ZZ ;設(shè)置32比特的計數(shù)變量ct的初始值為16進制表示的00000001 ;確定大于或等于 (kk/v)的最小整數(shù)I I kk/v I I ;循環(huán)變量i從I起遞增至I I kk/v | | ,每次增加1,執(zhí)行I I kk/V I I次密碼雜湊運算;在(kk/v)為整數(shù)的情況下,置Ha ! Nkk/vM = HaNkk/vM ;在(kk/v)不為整數(shù)的情況下,將Ha ! I|kk/v|l置為比特串Hal|kk/v|l中從最高比特位起的比特,其中的V」為小于或等于(kk/v)的最小整數(shù);將i從I遞增至(I kk/v I |-1)的Hai以及Ha ! I|kk/v|l順次拼接,將得到的長度為kk比特的比特串作為對ZZ進行密鑰派生運算的結(jié)果輸出至所述上層復(fù)選模塊轉(zhuǎn)發(fā);其中,一次所述的密碼雜湊運算包括將ct的當前值與ZZ拼接為比特串ZZ-ct ;將ZZ-ct和標量V作為一組密碼雜湊數(shù)據(jù)發(fā)送到所述密碼雜湊子模塊,將其返回的Hv(ZZ-Ct)賦值給Hai ;ct的值增加16進制的00000001 ; 所述下層復(fù)選模塊為所述簽名控制中心、驗證控制中心、加密方控制子模塊、解密方控制子模塊、密鑰派生控制子模塊與所述密碼雜湊子模塊之間,所述發(fā)起方控制子模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊之間,所述響應(yīng)方控制子模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊之間,所述倍點運算控制子模塊與所述域轉(zhuǎn)換子模塊、射影系點加子模塊、射影系二倍點運算子模塊、蒙哥馬利域乘法子模塊、有限域求逆子模塊之間,所述點加控制子模塊與所述域轉(zhuǎn)換子模塊、蒙哥馬利域乘法子模塊、射影系點加子模塊、有限域求逆子模塊之間的數(shù)據(jù)轉(zhuǎn)發(fā)模塊; 所述域轉(zhuǎn)換子模塊用于,將輸入的有限域的數(shù)值轉(zhuǎn)換為其在蒙哥馬利域的值,輸出到所述下層復(fù)選模塊轉(zhuǎn)發(fā); 所述蒙哥馬利域乘法子模塊用于,對輸入的兩個蒙哥馬利域的數(shù)值進行蒙哥馬利域乘法運算,將得到的運算結(jié)果輸出到所述下層復(fù)選模塊轉(zhuǎn)發(fā); 所述有限域求逆子模塊用于,對輸入的有限域的值進行求逆運算,將得到的運算結(jié)果輸出到所述下層復(fù)選模塊轉(zhuǎn)發(fā); 所述射影系點加子模塊用于,對輸入的兩個點的坐標進行點加運算,將得到的新的坐標返回所述下層復(fù)選模塊轉(zhuǎn)發(fā); 所述密碼雜湊子模塊用于,對接收的密碼雜湊數(shù)據(jù)中的比特串進行密碼雜湊運算,將輸出的長度為密碼雜湊數(shù)據(jù)中的標量比特的雜湊值返回所述下層復(fù)選模塊轉(zhuǎn)發(fā)。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,該系統(tǒng)還包括w生成模塊,用于根據(jù)w =II (II log" ||/2) Il -I計算得到參數(shù)W,并將其分別發(fā)送到所述發(fā)起方控制子模塊和所述響應(yīng)方控制子模塊。
全文摘要
本發(fā)明涉及p元域SM2橢圓曲線公鑰密碼算法的實現(xiàn)系統(tǒng)。該系統(tǒng)在主控模塊的控制下,利用簽名控制中心和驗證控制中心來控制實現(xiàn)數(shù)字簽名算法,利用發(fā)起方控制中心和響應(yīng)方控制中心來控制實現(xiàn)密鑰交換協(xié)議,利用加密方控制中心和解密方控制中心來控制實現(xiàn)公鑰加密算法,利用s生成模塊、隨機數(shù)生成模塊、倍點運算模塊、點加模塊、密鑰派生模塊實現(xiàn)算法中的基本運算,利用上層復(fù)選模塊來實現(xiàn)模塊的復(fù)用,從而減少硬件資源的使用。本發(fā)明能用硬件實現(xiàn)p元域SM2橢圓曲線公鑰密碼算法。
文檔編號H04L9/30GK102761413SQ20111010757
公開日2012年10月31日 申請日期2011年4月27日 優(yōu)先權(quán)日2011年4月27日
發(fā)明者劉建巍, 劉振, 屈善新, 徐樹民, 王紹麟, 田心 申請人:航天信息股份有限公司