本發(fā)明屬于信息安全技術(shù)領(lǐng)域,特別是基于多裝置協(xié)同的SM2數(shù)字簽名生成方法及系統(tǒng)。
背景技術(shù):
在公開(kāi)密鑰密碼體制中,為了保障用戶私鑰的安全性,用戶的私鑰通常是存儲(chǔ)在專(zhuān)門(mén)的密碼硬件中使用,如存儲(chǔ)在USB Key、SmartCard中使用,且私鑰不能從密碼硬件中導(dǎo)出。但是,在有些情況下,比如,由于成本的原因,或者由于沒(méi)有合適的密碼硬件(如移動(dòng)通信終端),使得用戶無(wú)法依賴(lài)密碼硬件來(lái)存儲(chǔ)私鑰、以及使用私鑰進(jìn)行密碼運(yùn)算。對(duì)于這種情況,目前最常用的方法是使用純軟件的密碼模塊,并將用戶私鑰保存在用戶計(jì)算裝置本地的永久存儲(chǔ)介質(zhì)中(如個(gè)人電腦的磁盤(pán)、移動(dòng)通信終端內(nèi)的電子盤(pán)),并通過(guò)PIN(Personal Identification Number)碼對(duì)私鑰進(jìn)行保護(hù)。當(dāng)需要使用用戶私鑰時(shí),軟件密碼模塊從用戶計(jì)算裝置的永久存儲(chǔ)介質(zhì)讀取用戶私鑰(必要時(shí)要求用戶輸入PIN碼),然后進(jìn)行密碼運(yùn)算。這種采用純軟件密碼模、將用戶私鑰保存在用戶計(jì)算裝置本地的方式存在用戶私鑰泄露的風(fēng)險(xiǎn),比如,攻擊者通過(guò)木馬竊取保存在用戶計(jì)算裝置中的用戶私鑰,破解用戶保護(hù)私鑰的PIN碼,從而獲得用戶私鑰;而且這種采用純軟件密碼模塊的方式,用戶私鑰最終需以明文形式導(dǎo)入到內(nèi)存中使用,這樣攻擊者有可能通過(guò)一定的攻擊方式,竊取存放在內(nèi)存中的用戶私鑰。如何在不采用密碼硬件的情況下,安全存儲(chǔ)和使用用戶私鑰具有現(xiàn)實(shí)的需求,對(duì)此問(wèn)題的解決具有很好的實(shí)際應(yīng)用意義。
對(duì)此問(wèn)題常見(jiàn)的解決方案是,將用戶私鑰通過(guò)一定的方式分割成多份,每份稱(chēng)為秘密份額,然后將每份秘密份額存儲(chǔ)到不同的計(jì)算裝置中,尤其是將部分秘密份額存放在安全保護(hù)措施到位、安全條件好的專(zhuān)業(yè)的密碼服務(wù)機(jī)構(gòu)的在線密碼服務(wù)系統(tǒng)中;當(dāng)密碼應(yīng)用程序、系統(tǒng)需要使用用戶私鑰進(jìn)行密碼運(yùn)算時(shí),如進(jìn)行數(shù)字簽名或數(shù)據(jù)解密時(shí),多個(gè)計(jì)算裝置分別使用自己的秘密份額進(jìn)行密碼運(yùn)算,最后將各裝置計(jì)算的結(jié)果合并,形成最后的、使用用戶私鑰進(jìn)行密碼運(yùn)算的結(jié)果(數(shù)字簽名或數(shù)據(jù)解密的結(jié)果)。這里,對(duì)用戶私鑰進(jìn)行的秘密分割可以是普通秘密分割,也可以是門(mén)限秘密分割。
SM2是由國(guó)家密碼管理局頒布的一種橢圓曲線公鑰密碼算法(參見(jiàn)《SM2橢圓曲線公鑰密碼算法》規(guī)范,國(guó)家密碼管理局,2010年12月),基于此算法能實(shí)現(xiàn)數(shù)字簽名、密鑰交換及數(shù)據(jù)加密。但是,由于SM2算法獨(dú)特的數(shù)字簽名運(yùn)算方式,通常的秘密共享(分割)方式及對(duì)應(yīng)的基于秘密共享的密碼運(yùn)算方式,無(wú)法適合于使用SM2私鑰進(jìn)行數(shù)字簽名的情形。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提出在沒(méi)有密碼硬件的情況下也能安全使用用戶的SM2私鑰進(jìn)行數(shù)字簽名的方法。
針對(duì)本發(fā)明的目的,本發(fā)明提出的技術(shù)方案是兩個(gè)基于多裝置協(xié)同的SM2數(shù)字簽名生成方法(方案)。
在以下對(duì)本發(fā)明技術(shù)方案的描述中,若P、Q是橢圓曲線點(diǎn)群中的元素(點(diǎn)),則P+Q表示P、Q的點(diǎn)加,[k]P表示k個(gè)橢圓曲線點(diǎn)P的點(diǎn)加,即P+P+...+P(共有k個(gè)P);省略號(hào)“...”,表示多個(gè)同樣(類(lèi)型)的數(shù)據(jù)項(xiàng)或多個(gè)同樣的運(yùn)算;c-1表示整數(shù)c的模n乘法逆(即c(c)-1mod n=1);多個(gè)整數(shù)相乘(包括整數(shù)符號(hào)相乘、常數(shù)與整數(shù)符號(hào)相乘),在不產(chǎn)生二義性的情況下,省略掉乘號(hào)“·”,如k1·k2簡(jiǎn)化為k1k2,3·c,簡(jiǎn)化位3c;mod n表示模n運(yùn)算(modulo operation),對(duì)應(yīng)于《SM2橢圓曲線公鑰密碼算法》規(guī)范(國(guó)家密碼管理局,2010年12月)中的modn;還有,模n運(yùn)算的算子mod n的優(yōu)先級(jí)是最低的,如a+b mod n等同于(a+b)mod n,a-b mod n等同于(a-b)mod n,ab mod n等同于(ab)mod n。
本發(fā)明的方案一具體如下。
生成SM2數(shù)字簽名時(shí)有m個(gè)裝置參與,其中m大于或等于2;m個(gè)裝置分別被稱(chēng)為裝置1,裝置2,…,裝置m;
在生成數(shù)字簽名前,針對(duì)參與數(shù)字簽名生成的m個(gè)裝置進(jìn)行如下初始化操作:
在區(qū)間[1,n-1]中隨機(jī)選擇兩個(gè)整數(shù)b和a,其中n是SM2密碼運(yùn)算所使用的橢圓曲線點(diǎn)群的階,也即SM2密碼運(yùn)算所使用的橢圓曲線點(diǎn)群的基點(diǎn)G的階(SM2密碼運(yùn)算所使用的橢圓曲線點(diǎn)群是指由基點(diǎn)G生成的循環(huán)群;本發(fā)明中的b、a不是橢圓曲線方程的參數(shù)b、a);
給m個(gè)裝置中的每個(gè)裝置分配1份秘密份額,其中裝置i的秘密份額或者從裝置i的秘密份額導(dǎo)出的秘密數(shù)是bi,i=1,2,…,m,bi是區(qū)間[1,n-1]內(nèi)的整數(shù)(對(duì)于普通秘密共享,bi就是秘密份額;對(duì)于門(mén)限秘密共享,bi是從秘密份額導(dǎo)出的秘密數(shù));
m個(gè)裝置的秘密份額或者從秘密份額導(dǎo)出的秘密數(shù)與b滿足關(guān)系:
b-1=(b1+b2+…+bm)mod n,其中b-1是b的模n乘法逆(即bb-1mod n=1)(這里b-1是被共享的秘密,對(duì)b-1的秘密分割可以是普通秘密分割,也可以是門(mén)限秘密分割);
計(jì)算c=(1+dA)-1dAb mod n,w=a(dA)-1mod n,其中dA是用戶的SM2私鑰,(dA)-1是dA的模n乘法逆,(1+dA)-1是(1+dA)的模n乘法逆(即dA(dA)-1mod n=1,(1+dA)-1(1+dA)mod n=1);
計(jì)算Gb=[ba]G([b·a]G),其中G是SM2橢圓曲線點(diǎn)群的基點(diǎn);
將c、w、Gb分發(fā)給所有m個(gè)裝置;
(m個(gè)裝置都不保存dA、b、a;進(jìn)行以上初始化操作的可以是一個(gè)專(zhuān)門(mén)的密鑰管理系統(tǒng),或用戶計(jì)算裝置中的一個(gè)密碼模塊、密鑰管理工具)
當(dāng)需要使用用戶的SM2私鑰dA針對(duì)消息M進(jìn)行數(shù)字簽名時(shí),m個(gè)裝置按如下方式進(jìn)行數(shù)字簽名的生成(需要使用用戶的SM2私鑰dA針對(duì)消息M進(jìn)行數(shù)字簽名的主體可以是調(diào)用這些裝置的密碼應(yīng)用程序、系統(tǒng)或密碼模塊,或者其中一個(gè)裝置中的密碼應(yīng)用程序、系統(tǒng)):
首先,m個(gè)裝置通過(guò)交互,計(jì)算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn)),其中ki是計(jì)算Q的過(guò)程中裝置i在區(qū)間[1,n-1]中隨機(jī)選擇的一個(gè)整數(shù),i=1,2,…,m,x1取自(x1,y1)=Q,e是從用戶標(biāo)識(shí)和消息M導(dǎo)出的雜湊值(即散列值)(按SM2算法,e是從用戶標(biāo)識(shí)IDA等參數(shù)導(dǎo)出的雜湊值ZA同消息M合并后的數(shù)據(jù)的雜湊值,參見(jiàn)SM2規(guī)范);
之后,每個(gè)裝置計(jì)算si=c(wki-bir)mod n,其中i=1,2,…,m,si對(duì)應(yīng)裝置i所進(jìn)行的計(jì)算;
最后,m個(gè)裝置中的一個(gè)裝置(任一個(gè))計(jì)算得到s=(s1+s2+…+sm)mod n;則(r,s)即為使用用戶的SM2私鑰dA對(duì)消息M的數(shù)字簽名。
在上述數(shù)字簽名生成過(guò)程中,r、e、si,i=1,2,…,m,根據(jù)計(jì)算的需要在m個(gè)裝置之間傳送(如通過(guò)網(wǎng)絡(luò)傳送)。
在以上所述方案中,若參數(shù)c僅分發(fā)給裝置m(其他裝置都沒(méi)有),則以上所述方案作如下相應(yīng)改變:
在完成Q、r的計(jì)算后,裝置i,i=1,2,…,m-1,計(jì)算si=(wki-bir)mod n,將si發(fā)送給裝置m(裝置1到裝置m-1都進(jìn)行此計(jì)算、操作);
裝置m計(jì)算sm=(wkm-bmr)mod n,然后利用自己計(jì)算的sm,以及接收到的s1,s2,…sm-1,計(jì)算s=(c(s1+s2+…+sm))mod n,則(r,s)即為使用用戶的SM2私鑰dA對(duì)消息M的數(shù)字簽名。
對(duì)于以上所述方案(包括作了改變的方案),在針對(duì)消息M進(jìn)行數(shù)字簽名時(shí),m個(gè)裝置按如下方式,或者按與如下方式等同的方式,通過(guò)交互計(jì)算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn)):
m個(gè)裝置中的每個(gè)裝置在區(qū)間[1,n-1]中隨機(jī)選擇一個(gè)整數(shù)ki,計(jì)算得到Qi=[ki]Gb,其中,i=1,2,…,m,分別表示裝置i隨機(jī)選擇的整數(shù)ki,所進(jìn)行的計(jì)算及計(jì)算得到的Qi;
之后,由m個(gè)裝置中的一個(gè)裝置(任一個(gè)裝置)計(jì)算Q=Q1+Q2+…+Qm,此時(shí),Q=[k1+k2+…+km]Gb(計(jì)算過(guò)程中Q1,Q2,…,Qm可在裝置間傳遞);
若進(jìn)行Q=Q1+Q2+…+Qm計(jì)算的是裝置j,其中j=1,或2,…,或m,則在完成Q的計(jì)算后,裝置j檢查Q是否是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn)),若是,則裝置j重新選擇kj,重新計(jì)算Qj,重新計(jì)算Q=Q1+Q2+…+Qm,重新判斷Q是否是零元,重復(fù)此過(guò)程,直到Q不是零元;若Q不是零元,則裝置j取(x1,y1)=Q,計(jì)算r=(e+x1)mod n;
若計(jì)算得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn)),則Q、r的計(jì)算完成;否則,裝置j重新在區(qū)間[1,n-1]中隨機(jī)選擇一個(gè)整數(shù)kj,然后重新計(jì)算Qj、Q=Q1+Q2+…+Qm,重新判斷Q是否是零元,以及在Q不是零元時(shí)重新計(jì)算r=(e+x1)mod n,重復(fù)此過(guò)程,直到r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn));
或者,若r=0或[r]G+Q是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn)),則所有m個(gè)裝置一起從頭重新進(jìn)行Q、r的計(jì)算(即每個(gè)裝置重新選擇ki,計(jì)算Qi=[ki]Gb,其中i=1,2,…,m,表示裝置i的Qi和ki,其中一個(gè)裝置重新計(jì)算Q=Q1+Q2+…+Qm、重新判斷Q是否是零元,以及在Q不是零元時(shí)重新計(jì)算r=(e+x1)mod n),直到r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn));
所述等同的方式,即同樣能得到Q=[k1+k2+…+km]Gb、并在Q不是SM2橢圓曲線點(diǎn)群的零元時(shí)依據(jù)Q計(jì)算得到r,且使得r、Q滿足r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元的方式。
在以上Q、r的計(jì)算過(guò)程中,若計(jì)算Q=Q1+Q2+…+Qm、r=(e+x1)mod n的裝置(即前面的所述裝置j),在計(jì)算得到Q、r后,僅檢查r是否為零,不檢查[r]G+Q是否是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn)),且僅在r=0時(shí)重新進(jìn)行Q、r計(jì)算(只要r≠0就不重新進(jìn)行Q、r計(jì)算),則:
根據(jù)s1,s2,…,sm計(jì)算s的裝置(m個(gè)裝置中的任一個(gè)裝置),若檢查發(fā)現(xiàn)(s+r)mod n=0,則放棄計(jì)算得到的s,數(shù)字簽名生成過(guò)程中計(jì)算Q、r的裝置j,其中j=1,或2,…,或m,重新在區(qū)間[1,n-1]中隨機(jī)選擇一個(gè)整數(shù)kj,重新計(jì)算Qj,重新計(jì)算Q=Q1+Q2+…+Qm,重新判斷Q是否是零元,以及在Q不是零元時(shí)重新計(jì)算r=(e+x1)mod n,之后每個(gè)裝置i重新計(jì)算si,i=1,2,…m,然后由一個(gè)裝置根據(jù)s1,s2,…,sm計(jì)算s,重復(fù)此過(guò)程直到最后計(jì)算得到的s滿足(s+r)mod n≠0;
或者根據(jù)s1,s2,…,sm計(jì)算s的裝置,若檢查發(fā)現(xiàn)(s+r)mod n=0,則所有m個(gè)裝置一起從頭重新進(jìn)行Q、r的計(jì)算(每個(gè)裝置重新選擇ki、計(jì)算Qi=[ki]Gb,其中i=1,2,…,m,分別表示裝置i選擇的ki和計(jì)算的Qi,然后其中的一個(gè)裝置重新計(jì)算Q=Q1+Q2+…+Qm、確定Q是否為零元、以及在Q不是零元時(shí)重新計(jì)算r=(e+x1)mod n,之后每個(gè)裝置i重新計(jì)算si,i=1,2,…m,然后由一個(gè)裝置根據(jù)s1,s2,…,sm計(jì)算s),直到最后計(jì)算得到的s滿足(s+r)mod n≠0。
對(duì)于以上方案一中,用戶的公鑰仍然是[dA]G,在進(jìn)行秘密分割前計(jì)算得到,并公開(kāi)發(fā)布。
本發(fā)明的方案二具體如下。
同樣地,生成SM2數(shù)字簽名時(shí)有m個(gè)裝置參與,其中m大于或等于2;m個(gè)裝置分別被稱(chēng)為裝置1,裝置2,…,裝置m;
相應(yīng)地,在生成數(shù)字簽名前,針對(duì)參與數(shù)字簽名生成的m個(gè)裝置進(jìn)行如下初始化操作:
在區(qū)間[1,n-1]中隨機(jī)選擇三個(gè)整數(shù)b、a、h,且h-1ba mod n≠
(dA)-1(1+dA)mod n,其中b、a保密,h不保密(故通常h取1即可),h-1是h的模n乘法逆(即h-1h mod n=1),n是SM2密碼運(yùn)算所使用的橢圓曲線點(diǎn)群的階,也即SM2密碼運(yùn)算所使用的橢圓曲線點(diǎn)群的基點(diǎn)G的階(本發(fā)明中的b、a不是橢圓曲線方程的參數(shù)b、a);
給m個(gè)裝置中的每個(gè)裝置分配1份秘密份額,其中裝置i的秘密份額或者從裝置i的秘密份額導(dǎo)出的秘密數(shù)是bi,i=1,2,…,m,bi是區(qū)間[1,n-1]內(nèi)的整數(shù)(對(duì)于普通秘密共享,bi就是秘密份額;對(duì)于門(mén)限秘密共享,bi是從秘密份額導(dǎo)出的秘密數(shù));
m個(gè)裝置的秘密份額或者從秘密份額導(dǎo)出的秘密數(shù)與b及用戶的SM2私鑰dA滿足關(guān)系:
b-1dA mod n=(b1+b2+…+bm)mod n,其中b-1是b的模n乘法逆(即bb-1mod n=1)(這里b-1dA mod n是被共享的秘密,對(duì)b-1dA mod n的秘密分割可以是普通秘密分割,也可以是門(mén)限秘密分割);
計(jì)算c=(1+dA)-1b mod n,w=adA mod n,其中,(1+dA)-1是(1+dA)的模n乘法逆(即dA(dA)-1mod n=1,(1+dA)-1(1+dA)mod n=1);
計(jì)算Gb=[h(1+dA)-badA]G,其中G是SM2橢圓曲線點(diǎn)群的基點(diǎn);
將c、w、h、Gb分發(fā)給所有m個(gè)裝置;
(m個(gè)裝置都不保存dA、b、a;進(jìn)行以上初始化操作的可以是一個(gè)專(zhuān)門(mén)的密鑰管理系統(tǒng),或用戶計(jì)算裝置中的一個(gè)密碼模塊、密鑰管理工具)
當(dāng)需要使用用戶的SM2私鑰dA針對(duì)消息M進(jìn)行數(shù)字簽名時(shí),m個(gè)裝置按如下方式進(jìn)行數(shù)字簽名的生成(需要使用用戶的SM2私鑰dA針對(duì)消息M進(jìn)行數(shù)字簽名的主體可以是調(diào)用這些裝置的密碼應(yīng)用程序、系統(tǒng)或密碼模塊,或者其中一個(gè)裝置中的密碼應(yīng)用程序、系統(tǒng)):
首先,m個(gè)裝置通過(guò)交互,計(jì)算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn)),其中ki是計(jì)算Q的過(guò)程中裝置i在區(qū)間[1,n-1]中隨機(jī)選擇的一個(gè)整數(shù),i=1,2,…,m,x1取自(x1,y1)=Q,e是從用戶標(biāo)識(shí)和消息M導(dǎo)出的雜湊值(即散列值)(按SM2算法,e是從用戶標(biāo)識(shí)IDA等參數(shù)導(dǎo)出的雜湊值ZA同消息M合并后的數(shù)據(jù)的雜湊值,參見(jiàn)SM2規(guī)范);
之后,每個(gè)裝置計(jì)算si=(hki-c(wki+bir))mod n,其中i=1,2,…,m,si對(duì)應(yīng)裝置i所進(jìn)行的計(jì)算;
最后,m個(gè)裝置中的一個(gè)裝置(任一個(gè))計(jì)算得到s=(s1+s2+…+sm)mod n;則(r,s)即為使用用戶的SM2私鑰dA對(duì)消息M的數(shù)字簽名。
在上述數(shù)字簽名生成過(guò)程中,r、e、si,i=1,2,…,m,根據(jù)計(jì)算的需要在m個(gè)裝置之間傳送(如通過(guò)網(wǎng)絡(luò)傳送)。
在以上方案二中,若針對(duì)m個(gè)裝置的初始化設(shè)置是:
在區(qū)間[1,n-1]中隨機(jī)選擇的三個(gè)整數(shù)b、a和h,其中b、a保密,h不保密,且h-1ba mod n≠(dA)-1(1+dA)mod n;
m個(gè)裝置的秘密份額或者從秘密份額導(dǎo)出的秘密數(shù)與b及用戶的SM2私鑰dA滿足關(guān)系:
b-1(1+dA)-1mod n=(b1+b2+…+bm)mod n(這里b-1(1+dA)-1mod n是被共享的秘密,對(duì)b-1(1+dA)-1mod n的秘密分割可以是普通秘密分割,也可以是門(mén)限秘密分割);
計(jì)算c=dAb mod n,w=a(1+dA)-1mod n;
計(jì)算Gb=[h(1+dA)-badA]G;
將h、c、w、Gb分發(fā)給所有m個(gè)裝置;
則當(dāng)需要使用用戶的SM2私鑰dA針對(duì)消息M進(jìn)行數(shù)字簽名時(shí),所述m個(gè)裝置首先按與所述SM2數(shù)字簽名生成方法相同的交互方式和計(jì)算方式,計(jì)算得到Q、r,且得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn)),之后,每個(gè)裝置同樣計(jì)算si=(hki-c(wki+bir))mod n,其中i=1,2,…,m,si對(duì)應(yīng)裝置i所進(jìn)行的計(jì)算,最后,m個(gè)裝置中的一個(gè)裝置同樣計(jì)算s=(s1+s2+…+sm)mod n,生成針對(duì)消息M的數(shù)字簽名(r,s)。
對(duì)于以上所述方案二(包括作了改變的方案),在針對(duì)消息M進(jìn)行數(shù)字簽名時(shí),m個(gè)裝置按與方案一同樣的方式,通過(guò)交互計(jì)算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q滿足:r≠0且[r]G+Q不是SM2橢圓曲線點(diǎn)群的零元(無(wú)窮遠(yuǎn)點(diǎn))。
對(duì)于以上所述方案二,用戶的公鑰仍然是[dA]G,在進(jìn)行秘密分割前計(jì)算得到,并公開(kāi)發(fā)布。
從以上發(fā)明內(nèi)容并結(jié)合實(shí)施例可以看到,基于本發(fā)明的SM2數(shù)字簽名生成方法,當(dāng)用戶沒(méi)有硬件密碼裝置存放SM2私鑰時(shí),可以將與用戶的私鑰dA相關(guān)的秘密數(shù)據(jù),分別存放在不同裝置中,如用戶的計(jì)算裝置(如個(gè)人電腦、移動(dòng)終端)、一個(gè)或多個(gè)密碼服務(wù)系統(tǒng)的密碼服務(wù)器中;在需要使用用戶的SM2私鑰對(duì)消息進(jìn)行數(shù)字簽名時(shí),多個(gè)裝置使用各自擁有的秘密數(shù)據(jù)(秘密份額或從秘密份額導(dǎo)出的數(shù)據(jù))進(jìn)行運(yùn)算,通過(guò)交互生成最終的數(shù)字簽名,而且在交互過(guò)程中,每個(gè)裝置都不泄露自己的秘密數(shù)據(jù);除非攻擊者能同時(shí)獲得分布在不同裝置中的足夠數(shù)量的秘密份額,否則,攻擊者無(wú)法恢復(fù)用戶私鑰;由于攻擊者要同時(shí)獲得分布在不同裝置中的、足夠數(shù)量的秘密份額的可能性非常低,或者幾乎不可能,比如攻擊者很難獲得專(zhuān)業(yè)密碼服務(wù)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)中的秘密份額,這就大大提高了在沒(méi)有密碼硬件的情況下,用戶SM2私鑰使用的安全性。
與現(xiàn)有的技術(shù)方案相比,本發(fā)明的方法簡(jiǎn)單,不但適合于兩方共享秘密,而且適合于多裝置共享秘密,不但適合于普通的秘密分割(共享),而且適合于門(mén)限秘密分割(共享)。本發(fā)明的巧妙之處在于,引入了兩個(gè)與用戶SM2私鑰無(wú)關(guān)的隨機(jī)數(shù)b、a!
具體實(shí)施方式
下面結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的描述。以下實(shí)施例只表示本發(fā)明幾種可能的實(shí)施方式,不是全部可能的實(shí)施方式,不作為對(duì)本發(fā)明的限定。
對(duì)于本發(fā)明的方案一,要分割、共享的秘密是[1,n-1]中隨機(jī)選擇的一個(gè)整數(shù)b的模n乘法逆b-1。對(duì)b-1的秘密分割有普通秘密分割和門(mén)限秘密共享分割。若是普通秘密分割,則很簡(jiǎn)單。若有m個(gè)裝置,則在區(qū)間[1,n-1]中隨機(jī)選擇m-1個(gè)整數(shù),b1,b2,…,bm-1,計(jì)算bm=(b-1-(b1+b2+…+bm-1))mod n,若bm≠0,則b1,b2,…,bm即是所需的秘密分割,否則,重新選擇b1,b2,…,bm-1,直到bm≠0。
實(shí)際上,對(duì)于普通秘密分割,還有一種選擇b并實(shí)現(xiàn)b-1秘密分割的方法,這就是在區(qū)間[1,n-1]中隨機(jī)選擇m個(gè)整數(shù)b1,b2,…,bm,若(b1+b2+,…,+bm)mod n≠0,則令b=((b1+b2+,…,+bm)mod n)-1(即(b1+b2+,…,+bm)mod n的模n乘法逆),b1,b2,…,bm就是b-1的秘密分割,而b相當(dāng)于在區(qū)間[1,n-1]中隨機(jī)選擇的整數(shù),否則,重新選擇b1,b2,…,bm,直到(b1+b2+,…,+bm)mod n≠0,然后計(jì)算b。
若采用門(mén)限秘密共享分割,則可以采用Shamir或拉格朗日秘密共享方案。此時(shí),本發(fā)明中進(jìn)行數(shù)字簽名操作處理的m個(gè)裝置,僅是全部p個(gè)裝置中的m個(gè)(p≥m),即采用(m,p)的門(mén)限方案;初始化時(shí),按門(mén)限秘密共享算法,將秘密b-1在所有p個(gè)裝置中分享;而在應(yīng)用本發(fā)明的方法時(shí),m個(gè)裝置的秘密數(shù)據(jù)b1,b2,…,bm,是參與數(shù)字簽名生成的m個(gè)裝置中的每個(gè)裝置依據(jù)自身的門(mén)限秘密(秘密份額),針對(duì)此時(shí)的m個(gè)裝置計(jì)算得到的秘密數(shù)(若p>m,那么,針對(duì)不同的m個(gè)裝置,每個(gè)裝置依據(jù)門(mén)限秘密份額進(jìn)行恢復(fù)秘密的操作時(shí),每個(gè)裝置依據(jù)秘密份額計(jì)算得到的秘密數(shù)是不同的,它取決于恢復(fù)私鑰時(shí)參與的裝置是哪m個(gè),對(duì)于熟悉Shamir或拉格朗日秘密共享方案的人而言,這些是很容易理解的)。
以上秘密分割方法,只是對(duì)b-1分割的幾種可能方案,不是全部的方案。
對(duì)于本發(fā)明的方案二,要分割、共享的秘密是b-1dA mod n或b-1(1+dA)-1mod n,對(duì)b-1dA mod n或b-1(1+dA)-1mod n進(jìn)行普通秘密分割或門(mén)限秘密分割的方法與方案一中對(duì)b-1進(jìn)行秘密分割的方法一樣或類(lèi)似,僅僅是秘密不同而已。
以下是本發(fā)明的一些實(shí)施例,這些實(shí)施例同時(shí)適用于本發(fā)明的方案一、方案二。
實(shí)施例1、
在此實(shí)施例中,m=2,采用普通秘密共享方案,用戶的計(jì)算裝置(如個(gè)人電腦、移動(dòng)通信終端)是本發(fā)明的SM2數(shù)字簽名生成方法中的兩個(gè)裝置中的一個(gè)(裝置1或裝置2),本發(fā)明方法中的另一個(gè)裝置是密碼服務(wù)系統(tǒng)中的密碼服務(wù)器(作為裝置2或裝置1);用戶的計(jì)算裝置和密碼服務(wù)器都不保存用戶的SM2私鑰dA;b-1或b-1dA mod n或b-1(1+dA)-1mod n的秘密份額b1、b2,一份保存在用戶計(jì)算裝置中,另一份保存在密碼服務(wù)器中;當(dāng)用戶計(jì)算裝置中的密碼應(yīng)用程序或系統(tǒng)要使用用戶的SM2私鑰dA對(duì)消息進(jìn)行簽名時(shí),用戶計(jì)算裝置(實(shí)際上通常是用戶計(jì)算裝置中的密碼模塊)與密碼服務(wù)系統(tǒng)的密碼服務(wù)器交互,應(yīng)用本發(fā)明的方法、使用秘密份額b1、b2生成消息的數(shù)字簽名。
實(shí)施例2、
在此實(shí)施例中,m=2,采用普通秘密共享,兩個(gè)裝置中一個(gè)裝置是一個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)中的密碼服務(wù)器,另一個(gè)裝置是另一個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)中的密碼服務(wù)器;用戶計(jì)算裝置以及兩個(gè)機(jī)構(gòu)的密碼服務(wù)器都不保存用戶的SM2私鑰dA;b-1或b-1dA mod n或b-1(1+dA)-1mod n的兩份秘密份額b1、b2,分別保存在兩個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)的密碼服務(wù)器中;當(dāng)用戶計(jì)算裝置中的密碼應(yīng)用程序或系統(tǒng)要使用用戶的SM2私鑰dA對(duì)消息進(jìn)行簽名時(shí),用戶計(jì)算裝置(實(shí)際上通常是用戶計(jì)算裝置中的密碼模塊)將請(qǐng)求發(fā)送到一個(gè)密碼服務(wù)系統(tǒng),之后兩個(gè)密碼服務(wù)系統(tǒng)的密碼服務(wù)器通過(guò)交互,應(yīng)用本發(fā)明的方法、使用秘密份額b1、b2生成消息的數(shù)字簽名,然后將生成的簽名被返回給用戶計(jì)算裝置;在數(shù)字簽名生成過(guò)程中,分屬兩個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)中的密碼服務(wù)器中的任一個(gè)可以都作為本發(fā)明的數(shù)字簽名生成方法中的裝置1,而另一個(gè)作為裝置2。
實(shí)施例3、
在此實(shí)施例中,m=3,采用普通秘密共享,其中一個(gè)裝置是一個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)中的密碼服務(wù)器A,另一個(gè)裝置是另一個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)中的密碼服務(wù)器B,還有一個(gè)裝置是用戶的計(jì)算裝置(如個(gè)人電腦、移動(dòng)終端);密碼服務(wù)器A、B和用戶計(jì)算裝置中的任一個(gè)可作為裝置1、裝置2或3;用戶計(jì)算裝置以及兩個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)的密碼服務(wù)器都不保存用戶的SM2私鑰dA;b-1或b-1dA mod n或b-1(1+dA)-1mod n的3份秘密份額b1、b2、b3,被分別保存在密碼服務(wù)器A、B,以及用戶計(jì)算裝置中;當(dāng)用戶計(jì)算裝置中的密碼應(yīng)用程序要使用用戶的SM2私鑰dA對(duì)消息進(jìn)行簽名時(shí),用戶計(jì)算裝置、密碼服務(wù)器A、密碼服務(wù)器B通過(guò)交互,應(yīng)用本發(fā)明的方法、使用秘密份額b1、b2、b3生成消息的數(shù)字簽名。
實(shí)施例4、
在此實(shí)施例中,采用(2,3)的門(mén)限秘密共享,共三個(gè)裝置,三個(gè)裝置中的任兩個(gè)裝置可以使用本發(fā)明的方法進(jìn)行數(shù)字簽名的生成,故應(yīng)用本發(fā)明的方法進(jìn)行數(shù)字簽名生成時(shí),對(duì)應(yīng)本發(fā)明的m=2。
三個(gè)裝置中的一個(gè)是一個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)中的密碼服務(wù)器,另兩個(gè)裝置,一個(gè)是用戶的個(gè)人電腦,另一個(gè)是用戶的移動(dòng)終端;b-1或b-1dA mod n或b-1(1+dA)-1mod n的按門(mén)限秘密共享算法生成的3份秘密份額(門(mén)限秘密)被分別分配給了密碼服務(wù)器、用戶的個(gè)人電腦、用戶的移動(dòng)終端;在應(yīng)用本發(fā)明的方法時(shí),假設(shè)本發(fā)明中的裝置1始終是密碼服務(wù)器,而本發(fā)明中的裝置2或者是用戶的個(gè)人電腦,或者是用戶的移動(dòng)終端,取決于用戶的哪個(gè)裝置參與數(shù)字簽名的生成過(guò)程。
當(dāng)用戶的個(gè)人電腦要使用用戶的SM2私鑰進(jìn)行數(shù)字簽名時(shí),密碼服務(wù)器、用戶的個(gè)人電腦(中的密碼模塊)根據(jù)它們各自擁有的門(mén)限秘密及門(mén)限算法,分別算出各自此時(shí)的b1、b2(或者b1、b2已預(yù)先算好、保存,下同),然后使用b1、b2生成消息的數(shù)字簽名;
當(dāng)用戶的移動(dòng)終端要使用用戶的SM2私鑰進(jìn)行數(shù)字簽名時(shí),密碼服務(wù)器、用戶的移動(dòng)終端(中的密碼模塊)根據(jù)它們各自擁有的門(mén)限秘密及門(mén)限算法,分別算出各自此時(shí)的b1、b2,使用b1、b2生成消息的數(shù)字簽名(對(duì)于門(mén)限秘密共享,恢復(fù)秘密時(shí)的參與方不同,由門(mén)限秘密算出的相應(yīng)的秘密數(shù)是不同的)。
實(shí)施例5、
在此實(shí)施例中,采用(2,3)的門(mén)限秘密共享,共三個(gè)裝置,三個(gè)裝置中的任兩個(gè)裝置可以使用本發(fā)明的方法進(jìn)行數(shù)字簽名的生成,故應(yīng)用本發(fā)明的方法進(jìn)行數(shù)字簽名生成時(shí),對(duì)應(yīng)本發(fā)明的m=2。
三個(gè)裝置中的一個(gè)是一個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)的密碼服務(wù)器A,一個(gè)是另一個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)的密碼服務(wù)器B,再有一個(gè)是用戶的計(jì)算裝置(如個(gè)人電腦、移動(dòng)終端);b-1或b-1dA mod n或b-1(1+dA)-1mod n的按門(mén)限秘密共享算法生成的3份秘密份額(門(mén)限秘密)被分別分配給了密碼服務(wù)器A、密碼服務(wù)器B和用戶的計(jì)算裝置;在應(yīng)用本發(fā)明的方法時(shí),假設(shè)本發(fā)明中的裝置1始終是用戶的計(jì)算裝置,而本發(fā)明中的裝置2或者是密碼服務(wù)器A,或者是密碼服務(wù)器B,取決于哪個(gè)密碼服務(wù)器參與數(shù)字簽名的生成。
當(dāng)用戶的計(jì)算裝置要使用用戶的SM2私鑰進(jìn)行數(shù)字簽名時(shí),用戶計(jì)算裝置先嘗試與密碼服務(wù)器A建立連接,若無(wú)法與密碼服務(wù)器A建立連接,則嘗試與密碼服務(wù)器B建立連接。若用戶計(jì)算裝置與密碼服務(wù)器A成功建立連接,則密碼服務(wù)器A、用戶的計(jì)算裝置(中的密碼模塊)根據(jù)它們各自擁有的門(mén)限秘密(秘密份額)及門(mén)限算法,分別算出各自此時(shí)的b1、b2,然后使用b1、b2生成消息的數(shù)字簽名;若用戶計(jì)算裝置與密碼服務(wù)器A無(wú)法建立連接,但之后與密碼服務(wù)器B成功建立連接,則密碼服務(wù)器B、用戶的計(jì)算裝置(中的密碼模塊)根據(jù)它們各自擁有的門(mén)限秘密及門(mén)限算法,分別算出各自此時(shí)的b1、b2,使用b1、b2生成消息的數(shù)字簽名。
實(shí)施例6、
在此實(shí)施例中,采用(2,3)的門(mén)限秘密共享,共三個(gè)裝置,三個(gè)裝置中的任兩個(gè)裝置可以使用本發(fā)明的方法進(jìn)行數(shù)字簽名的生成,故應(yīng)用本發(fā)明的方法進(jìn)行數(shù)字簽名生成時(shí),對(duì)應(yīng)本發(fā)明的m=2。
三個(gè)裝置分別是分屬三個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)的密碼服務(wù)器A、密碼服務(wù)器B、密碼服務(wù)器C;b-1或b-1dA mod n或b-1(1+dA)-1mod n的按門(mén)限秘密共享算法生成的3份秘密份額(門(mén)限秘密)被分別分配給了密碼服務(wù)器A、密碼服務(wù)器B、密碼服務(wù)器C;在應(yīng)用本發(fā)明的方法時(shí),參與數(shù)字簽名生成的兩個(gè)服務(wù)器分別對(duì)應(yīng)本發(fā)明中的裝置1、裝置2。
當(dāng)用戶的計(jì)算裝置要使用用戶的SM2私鑰進(jìn)行數(shù)字簽名時(shí),三個(gè)密碼服務(wù)器中的兩個(gè)(至于如何選擇其中的兩個(gè),取決于實(shí)施者的方案),根據(jù)它們各自擁有的門(mén)限秘密及門(mén)限算法,分別算出各自此時(shí)的b1、b2,然后使用b1、b2生成消息的數(shù)字簽名。
實(shí)施例7、
在此實(shí)施例中,采用(3,4)的門(mén)限秘密共享,共四個(gè)裝置,其中任意三個(gè)裝置可以使用本發(fā)明的方法進(jìn)行數(shù)字簽名的生成,故應(yīng)用本發(fā)明的方法進(jìn)行數(shù)字簽名生成時(shí),對(duì)應(yīng)本發(fā)明的m=3。
四個(gè)裝置中的兩個(gè)是屬于同一個(gè)機(jī)構(gòu)的密碼服務(wù)系統(tǒng)的密碼服務(wù)器A、B,或者是分屬不同機(jī)構(gòu)的密碼服務(wù)系統(tǒng)的密碼服務(wù)器A、B,四個(gè)裝置中的另兩個(gè)裝置,一個(gè)是用戶的個(gè)人電腦,一個(gè)是用戶的移動(dòng)終端,用戶的兩個(gè)裝置只有一個(gè)參與數(shù)字簽名的生成。b-1或b-1dA mod n或b-1(1+dA)-1mod n的按門(mén)限秘密共享算法生成的4份秘密份額(門(mén)限秘密)被分別分配給了密碼服務(wù)器A、密碼服務(wù)器B、以及用戶的個(gè)人電腦、移動(dòng)終端。假定密碼服務(wù)器A、B是本發(fā)明中的裝置1、裝置2,而生成數(shù)字簽名時(shí),參與數(shù)字簽名生成過(guò)程的用戶裝置假定是本發(fā)明的裝置3。
當(dāng)用戶的一個(gè)裝置,如個(gè)人電腦或移動(dòng)終端,需要使用用戶的SM2私鑰生成針對(duì)消息的數(shù)字簽名時(shí),密碼服務(wù)器A、密碼服務(wù)器B、用戶的裝置各自根據(jù)自己擁有的門(mén)限秘密和門(mén)限算法,分別算出針對(duì)此時(shí)三個(gè)裝置的秘密數(shù)b1、b2、b3,然后通過(guò)交互應(yīng)用本發(fā)明方法、使用各自的秘密數(shù)b1、b2、b3生成數(shù)字簽名。
基于本發(fā)明的方法,很容易構(gòu)建實(shí)施本發(fā)明方法的系統(tǒng)。
基于本發(fā)明的SM2數(shù)字簽名生成方法構(gòu)建的SM2數(shù)字簽名生成系統(tǒng)包括m個(gè)裝置,其中m大于或等于2;m個(gè)裝置中的每個(gè)裝置是一個(gè)密碼服務(wù)器或一個(gè)用戶計(jì)算裝置;m個(gè)裝置按本發(fā)明的數(shù)字簽名生成方法,生成使用用戶的SM2私鑰dA針對(duì)消息M的數(shù)字簽名。
其他未說(shuō)明的具體技術(shù)實(shí)施,對(duì)于相關(guān)領(lǐng)域的技術(shù)人員而言是眾所周知,不言自明的。