亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于乘積秘密分割的SM2數(shù)字簽名生成方法及系統(tǒng)與流程

文檔序號:12692056閱讀:270來源:國知局

本發(fā)明屬于信息安全技術(shù)領(lǐng)域,特別是一種基于乘積秘密分割的SM2數(shù)字簽名生成方法及系統(tǒng)。



背景技術(shù):

在公開密鑰密碼體制中,為了保障用戶私鑰的安全性,用戶的私鑰通常是存儲在專門的密碼硬件中使用,如存儲在USB Key、SmartCard中使用,且私鑰不能從密碼硬件中導(dǎo)出。但是,在有些情況下,比如,由于成本的原因,或者由于沒有合適的密碼硬件(如移動通信終端),使得用戶無法依賴密碼硬件來存儲私鑰、以及使用私鑰進行密碼運算。對于這種情況,目前最常用的方法是使用純軟件的密碼模塊,并將用戶私鑰保存在用戶計算裝置本地的永久存儲介質(zhì)中(如個人電腦的磁盤、移動通信終端內(nèi)的電子盤),并通過PIN(Personal Identification Number)碼對私鑰進行保護。當需要使用用戶私鑰時,軟件密碼模塊從用戶計算裝置的永久存儲介質(zhì)讀取用戶私鑰(必要時要求用戶輸入PIN碼),然后進行密碼運算。這種采用純軟件密碼模、將用戶私鑰保存在計算裝置本地的方式存在用戶私鑰泄露的風(fēng)險,比如,攻擊者通過木馬竊取保存在用戶計算裝置中的用戶私鑰,破解用戶保護私鑰的PIN碼,從而獲得用戶私鑰;而且這種采用純軟件密碼模塊的方式,用戶私鑰最終需以明文形式導(dǎo)入到內(nèi)存中使用,這樣攻擊者有可能通過一定的攻擊方式,竊取存放在內(nèi)存中的用戶私鑰。如何在不采用密碼硬件的情況下,安全存儲和使用用戶私鑰具有現(xiàn)實的需求,對此問題的解決具有很好的實際應(yīng)用意義。

對此問題常見的解決方案是,將用戶私鑰通過一定的方式分割成多份,每份稱為秘密份額,然后將每份秘密份額存儲到不同的計算裝置中,尤其是將部分秘密份額存放在安全保護措施到位、安全條件好的專業(yè)的密碼服務(wù)機構(gòu)的在線密碼服務(wù)系統(tǒng)中;當密碼應(yīng)用程序、系統(tǒng)需要使用用戶私鑰進行密碼運算時,如進行數(shù)字簽名或數(shù)據(jù)解密時,多個計算裝置分別使用自己的秘密份額進行密碼運算,最后將各裝置計算的結(jié)果合并,形成最后的、使用用戶私鑰進行密碼運算的結(jié)果(數(shù)字簽名或數(shù)據(jù)解密的結(jié)果)。

SM2是由國家密碼管理局頒布的一種橢圓曲線公鑰密碼算法(參見《SM2橢圓曲線公鑰密碼算法》規(guī)范,國家密碼管理局,2010年12月),基于此算法能實現(xiàn)數(shù)字簽名、密鑰交換及數(shù)據(jù)加密。但是,由于SM2算法獨特的數(shù)字簽名運算方式,通常的秘密共享(分割)方式及對應(yīng)的基于秘密共享的密碼運算方式,無法適合于使用SM2私鑰進行數(shù)字簽名的情形。



技術(shù)實現(xiàn)要素:

本發(fā)明的目的是提出一種基于秘密分割(或共享)的SM2數(shù)字簽名生成方法,以滿足沒有密碼硬件的情況下,安全使用用戶SM2私鑰進行數(shù)字簽名的需求。

針對本發(fā)明的目的,本發(fā)明提出的技術(shù)方案是一種基于乘積秘密分割的SM2數(shù)字簽名生成方法。

在以下對本發(fā)明技術(shù)方案的描述中,若P、Q是橢圓曲線點群中的元素(點),則P+Q表示P、Q的點加,[k]P表示k個橢圓曲線點P的點加,即P+P+...+P(共有k個P);省略號“...”,表示多個同樣(類型)的數(shù)據(jù)項或多個同樣的運算;c-1表示整數(shù)c的模n乘法逆(即cc-1mod n=1);多個整數(shù)相乘(包括整數(shù)符號相乘、常數(shù)與整數(shù)符號相乘),在不產(chǎn)生二義性的情況下,省略掉乘號“·”,如k1·k2簡化為k1k2,3·c,簡化位3c;mod n表示模n運算(modulo operation),對應(yīng)于《SM2橢圓曲線公鑰密碼算法》規(guī)范(國家密碼管理局,2010年12月)中的modn;還有,模n運算的算子mod n的優(yōu)先級是最低的,如a+b mod n等同于(a+b)mod n,a-b mod n等同于(a-b)mod n,ab mod n等同于(ab)mod n。

本發(fā)明的方法具體如下。

所述方法涉及兩個分別稱為裝置1、裝置2的裝置;

在生成數(shù)字簽名前,針對參與數(shù)字簽名生成的兩個裝置要進行如下初始化操作:

給裝置1分配秘密份額d1,給裝置2分配秘密份額d2,其中d1、d2是區(qū)間[1,n-1]內(nèi)的整數(shù),而n是SM2密碼運算所使用的橢圓曲線點群的階,也即SM2密碼運算所使用的橢圓曲線點群的基點G的階(SM2密碼運算所使用的橢圓曲線點群是指由基點G生成的循環(huán)群);

兩個裝置的秘密份額與用戶的SM2私鑰dA滿足關(guān)系:

(1+dA)-1dA mod n=d1d2mod n,其中,(1+dA)-1是(1+dA)的模n乘法逆(即(1+dA)-1(1+dA)mod n=1);

在區(qū)間[1,n-1]內(nèi)隨機選擇一個整數(shù)a,計算Ga=[a]G,h=a(dA)-1mod n,其中G是SM2橢圓曲線點群的基點;將h給裝置1、裝置2;Ga將給數(shù)字簽名生成過程中需要Ga的裝置1和/或裝置2(本發(fā)明中的a不是橢圓曲線方程的參數(shù)a;Ga無需保密,只是需不需要的問題);

(兩個裝置都不擁有a、dA;進行秘密分割、發(fā)放初始化操作的可以是一個專門的密鑰管理系統(tǒng),或者是用戶計算裝置中的一個密碼模塊、密鑰管理工具);

當需要使用用戶的SM2私鑰dA針對消息M進行數(shù)字簽名時,兩個裝置按如下方式進行數(shù)字簽名的生成(需要使用用戶的SM2私鑰dA、針對消息M進行數(shù)字簽名的主體可以是調(diào)用這兩個裝置的密碼應(yīng)用程序、系統(tǒng)或密碼模塊,或者兩個裝置之一中的密碼應(yīng)用程序、系統(tǒng)):

首先,兩個裝置通過交互計算得到Q=[(k1+k2)]Gb,r=(e+x1)mod n,且得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點群的零元(無窮遠點),其中k1、k2是計算Q的過程中裝置1、裝置2分別在區(qū)間[1,n-1]中隨機選擇的整數(shù),Gb=[b]Ga,b是區(qū)間[1,n-1]中的只有裝置1才知道的整數(shù)常數(shù)(秘密),或者b是計算Q的過程中裝置1在區(qū)間[1,n-1]中隨機選擇的一個整數(shù),G是SM2橢圓曲線點群的基點,x1取自(x1,y1)=Q,e是從用戶標識和消息M導(dǎo)出的雜湊值(即散列值)(本發(fā)明中的b不是橢圓曲線方程的參數(shù)b;按SM2算法,e是從用戶標識IDA等參數(shù)導(dǎo)出的雜湊值ZA同消息M合并后的數(shù)據(jù)的雜湊值,參見SM2規(guī)范);

之后,裝置1計算w1=d1b mod n,s1=(hk1-(b)-1r)mod n,然后將w1、s1發(fā)送給裝置2;

最后,裝置2接收到裝置1的w1、s1后,計算s=d2w1(hk2+s1)mod n(此時s=d2d1(bh(k2+k1)-r)mod n=(1+dA)-1(ba(k2+k1)-dAr)mod n);(r,s)就是生成的針對消息M的數(shù)字簽名。

這里r是非保密數(shù)據(jù),根據(jù)需要可在兩個裝置之間傳遞。

若b是區(qū)間[1,n-1]中的只有裝置1才知道的整數(shù)常數(shù)(秘密),則在數(shù)字簽名生成前的初始化過程中,(由初始化工具或系統(tǒng)或裝置1)計算Gb=[b]Ga,裝置1、裝置2分別保存Gb;在針對消息M進行數(shù)字簽名時,裝置1和裝置2都從本地保存的數(shù)據(jù)中獲得Gb;

若b是計算Q的過程中裝置1在區(qū)間[1,n-1]中隨機選擇的一個整數(shù),則在針對消息M進行數(shù)字簽名時,裝置1在區(qū)間[1,n-1]中隨機選擇一個整數(shù)b,計算得到Gb=[b]Ga,然后將Gb發(fā)送給裝置2,由此裝置1和裝置2都獲得Gb。

在針對消息M進行數(shù)字簽名時,兩個裝置按如下方式,或者按與如下方式等同的方式,通過交互計算得到Q=[(k1+k2)]Gb,r=(e+x1)mod n,且得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點群的零元(無窮遠點):

首先,裝置1和裝置2分別從保存的數(shù)據(jù)中或通過實時計算和交換獲得Gb;

之后,裝置1在區(qū)間[1,n-1]中隨機選擇一個整數(shù)k1,計算得到Q1=[k1]Gb;

裝置2在區(qū)間[1,n-1]中隨機選擇一個整數(shù)k2,計算得到Q2=[k2]Gb,然后將Q2發(fā)送給裝置1;

裝置1接收到Q2后,計算Q=Q1+Q2,此時Q=[(k1+k2)]Gb(=[b(k1+k2)]Ga);

裝置1檢查Q是否是SM2橢圓曲線點群的零元(無窮遠點),若是,則裝置1重新選擇k1,重新計算Q1=[k1]Gb,重新計算Q=Q1+Q2,重新判斷Q是否是零元,重復(fù)此過程,直到Q不是零元為止;若Q不是零元,則裝置1取(x1,y1)=Q,計算r=(e+x1)mod n;

若計算得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點群的零元(無窮遠點),則Q、r的計算完成;否則,裝置1重新在區(qū)間[1,n-1]中隨機選擇一個整數(shù)k1,然后重新計算Q1,Q=Q1+Q2,重新判斷Q是否是零元,以及在Q不是零元時計算r,重復(fù)此過程,直到r≠0且[r]G+Q不是SM2橢圓曲線點群的零元(無窮遠點);

或者,若r=0或[r]G+Q是SM2橢圓曲線點群的零元(無窮遠點),則兩個裝置一起從頭重新進行Q、r的計算(即裝置1和裝置2重新得到Gb,裝置1重新選擇k1,裝置2重新選擇k2,然后計算Q=Q1+Q2,判斷Q是否是零元,以及在Q不是零元時計算r=(e+x1)mod n),重復(fù)此過程,直到r≠0且[r]G+Q不是SM2橢圓曲線點群的零元(無窮遠點);

所述等同的方式,即同樣能得到Q=[(k1+k2)]Gb、并依據(jù)Q計算得到r,且使得r、Q滿足r≠0且[r]G+Q不是SM2橢圓曲線點群的零元的方式。

若裝置1在計算得到Q、r時,僅檢查r是否為零,不檢查[r]G+Q是否是SM2橢圓曲線點群的零元(無窮遠點),且僅在r=0時重新進行Q、r的計算(只要r≠0就不重新進行Q、r計算),則:

裝置2計算得到s后,若檢查發(fā)現(xiàn)(s+r)mod n=0,則放棄計算得到的s,裝置1重新在區(qū)間[1,n-1]中隨機選擇一個整數(shù)k1,重新計算Q1,Q=Q1+Q2,重新判斷Q是否是零元,以及在Q不是零元時計算r=(e+x1)modn,裝置2重新計算s,重復(fù)此過程,直到(s+r)mod n≠0;

或者裝置2計算得到s后,若檢查發(fā)現(xiàn)(s+r)mod n=0,則兩個裝置一起從頭重新進行Q、r的計算(即裝置1和裝置2得到Gb,裝置1重新選擇k1,計算Q1,裝置2重新選擇k2,計算Q2,然后裝置1重新計算Q=Q1+Q2,判斷Q是否是零元,以及在Q不是零元時計算r=(e+x1)mod n),裝置2重新計算s,直到(s+r)mod n≠0。

在以上方案中,若b是計算Q的過程中裝置1在區(qū)間[1,n-1]中隨機選擇的一個整數(shù),則k1既可以是計算Q1時裝置1在區(qū)間[1,n-1]中隨機選擇的一個整數(shù),也可以是區(qū)間[1,n-1]中的只有裝置1才知道的整數(shù)常數(shù)(每次計算Q1時都使用同一個k1)。

用戶的公鑰仍然是dAG,在秘密分割前計算并公開發(fā)布。

所述系統(tǒng)包括兩個裝置,其中,一個裝置是用戶計算裝置,另一個是密鑰服務(wù)系統(tǒng)的密碼服務(wù)器,或者兩個裝置都是密鑰服務(wù)系統(tǒng)的密碼服務(wù)器;兩個裝置按所述SM2數(shù)字簽名生成方法,生成使用用戶SM2私鑰d對消息M的數(shù)字簽名A。

從以上發(fā)明內(nèi)容可以看到,利用本發(fā)明的基于乘積秘密分割的SM2數(shù)字簽名生成方法,當用戶沒有硬件密碼裝置存放SM2私鑰時,可以將與用戶的私鑰dA相關(guān)的秘密數(shù)據(jù)(1+dA)-1按乘積分割成兩份秘密份額,分別存放在不同密碼服務(wù)機構(gòu)的密碼服務(wù)系統(tǒng),在需要使用用戶的SM2私鑰對消息進行簽名時,兩個機構(gòu)的密碼服務(wù)系統(tǒng)分別使用各自具有的秘密份額,通過交互最后生成針對消息的數(shù)字簽名;或者,兩份秘密份額中的一份存放在一個密碼服務(wù)機構(gòu)的密碼服務(wù)系統(tǒng)中,另一個存放到用戶的計算裝置中,當在需要使用用戶的SM2私鑰對消息進行簽名時,用戶的計算裝置和密碼服務(wù)機構(gòu)的密碼服務(wù)系統(tǒng)分別使用各自具有的秘密份額,通過交互最后生成針對消息的數(shù)字簽名;由于攻擊者同時獲得在兩個不同密碼服務(wù)機構(gòu)的密碼服務(wù)系統(tǒng)中的秘密份額,或者同時獲得在用戶計算裝置和密碼服務(wù)機構(gòu)的密碼服務(wù)系統(tǒng)中的秘密份額的可能性極低,這就大大提高了在沒有密碼硬件的情況下,用戶SM2私鑰使用的安全性。

具體實施方式

下面結(jié)合實施例對本發(fā)明作進一步的描述。以下實施例不作為對本發(fā)明的限定。

將秘密(1+dA)-1分割為d1、d2,且(1+dA)-1=d1d2mod n是很容易的:在[1,n-1]中隨機選擇一個整數(shù)作為d1,之后,計算d2=(d1)-1(1+dA)-1mod n即可。

實施例1、

在此實施例中,用戶的計算裝置(如個人電腦、移動通信終端)是本發(fā)明的SM2數(shù)字簽名分割生成方法中的兩個裝置中的一個(裝置1或裝置2),另一個裝置是一個密碼服務(wù)系統(tǒng)中的密碼服務(wù)器(作為裝置2或裝置1);用戶的計算裝置和密碼服務(wù)器都不保存用戶的SM2私鑰dA、(1+dA)-1;(1+dA)-1的秘密份額d1、d2,一份保存在用戶計算裝置中,另一份保存在密碼服務(wù)器中;當用戶計算裝置中的密碼應(yīng)用程序或系統(tǒng)要使用用戶的SM2私鑰dA對消息進行簽名時,用戶計算裝置(實際上,通常是用戶計算裝置中的密碼模塊)與密碼服務(wù)器交互,應(yīng)用本發(fā)明的方法使用秘密份額d1、d2生成消息的數(shù)字簽名。

實施例2、

在此實施例中,本發(fā)明的SM2數(shù)字簽名分割生成方法中的一個裝置是一個機構(gòu)的密碼服務(wù)系統(tǒng)中的密碼服務(wù)器,另一個裝置是另一個機構(gòu)的密碼服務(wù)系統(tǒng)中的密碼服務(wù)器;用戶計算裝置以及兩個密碼服務(wù)機構(gòu)的密碼服務(wù)器都不保存用戶的SM2私鑰dA、(1+dA)-1;(1+dA)-1的兩份秘密份額d1、d2,分別保存在兩個密碼服務(wù)系統(tǒng)的密碼服務(wù)器中;當用戶計算裝置中的密碼應(yīng)用程序或系統(tǒng)要使用用戶的SM2私鑰dA對消息進行簽名時,用戶計算裝置(通常是用戶計算裝置中的密碼模塊)將請求發(fā)送到一個密碼服務(wù)系統(tǒng),之后兩個密碼服務(wù)系統(tǒng)的密碼服務(wù)器通過交互,應(yīng)用本發(fā)明的方法、使用秘密份額d1、d2生成消息的數(shù)字簽名,然后將生成的簽名被返回給用戶計算裝置;在數(shù)字簽名生成過程中,分屬兩個密碼服務(wù)系統(tǒng)的兩個密碼服務(wù)器中的任一個可以都作為本發(fā)明的數(shù)字簽名生成方法中的裝置1,另一個作為裝置2。

基于本發(fā)明的方法,很容易構(gòu)建實施本發(fā)明方法的系統(tǒng)。

基于本發(fā)明的方法構(gòu)建的SM2數(shù)字簽名分割生成系統(tǒng)包括兩個裝置,其中,一個裝置是用戶計算裝置,另一個是密鑰服務(wù)系統(tǒng)的密碼服務(wù)器,或者兩個裝置都是密鑰服務(wù)系統(tǒng)的密碼服務(wù)器;兩個裝置使用本發(fā)明的方法生成使用用戶SM2私鑰dA對消息M的數(shù)字簽名。

其他未說明的具體技術(shù)實施,對于相關(guān)領(lǐng)域的技術(shù)人員而言是眾所周知,不言自明的。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1