本發(fā)明涉及信息安全技術領域,尤其涉及一種多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法及系統(tǒng)。
背景技術:
使用非對稱或公鑰密碼體系可根據(jù)應用,產(chǎn)生密鑰對(d,p),包括一個公鑰p和一個私鑰d。其中私鑰d被秘密保存,主要應用于對特定數(shù)據(jù)的數(shù)字簽名s。鑒于互聯(lián)網(wǎng)的日益廣泛應用,手機app,服務中心、簽名中心及多個服務實體與終端聯(lián)合進行用戶簽名成為可能。
傳統(tǒng)的方法是簽名設備獨立秘密生產(chǎn)一組密鑰對(d,p),并秘密保存私鑰d。需要數(shù)字簽名時,簽名設備獨立使用私鑰d進行運算出數(shù)字簽名值sign=(r,s)。數(shù)據(jù)m的數(shù)字簽名最終結果s由兩個簽名分量r和s組成,使用用戶私鑰d對數(shù)據(jù)e運算,得到最終的數(shù)字簽名;
即:sign(m)=digital_sign(e,k,d)=(r,s),其中k為隨機數(shù),數(shù)據(jù)e為密碼雜湊函數(shù)作用于消息m的輸出值。
數(shù)字簽名是使用私鑰d對待簽名數(shù)據(jù)進行運算的結果,對于諸如筆記本、智能手機、電視機頂盒等終端設備缺乏專門的安全部件時,私鑰將很難做到秘密保存,特別是在使用時,更容易遭到蠕蟲、木馬等惡意軟件的攻擊,造成私鑰泄露。
另一方面,很多場景需要多方數(shù)字簽名的場景,需要各方具有獨立的私鑰,簽名時各方使用各自的密鑰進行運算,最終得到多方聯(lián)合數(shù)字簽名值。如果簽名時將各方的各自私鑰合成為簽名私鑰再進行簽名運算,或各方密鑰是先產(chǎn)生簽名私鑰再分解后由各方保管,則存在顯著的私鑰安全泄露隱患。
技術實現(xiàn)要素:
基于此,本發(fā)明的目的在于提供一種多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法及系統(tǒng),將標準數(shù)字簽名結果擴展到由多個獨立個體組成的聯(lián)合體的情況,并在各方聯(lián)合完成數(shù)字簽名運算的情況下,才可以實現(xiàn)該聯(lián)合體的數(shù)字簽名,進一步提高數(shù)字簽名的安全性。為實現(xiàn)上述目的,本發(fā)明的技術方案如下:
一種多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法,聯(lián)合簽名私鑰d由m份私鑰因子di組成,i=[1,m],其中m≥3,m份私鑰因子di由聯(lián)合各方在密鑰生成時獨立秘密產(chǎn)生并秘密保存在各自的設備中;聯(lián)合數(shù)字簽名完成需要各方按照一定順序,使用各自秘密保存的私鑰因子di通過計算共同參與完成,且m方聯(lián)合使用各自私鑰因子di的聯(lián)合簽名結果與單獨使用私鑰d進行簽名的結果一致。
根據(jù)本發(fā)明的一個方面,提供一種多方聯(lián)合密鑰產(chǎn)生和多方聯(lián)合數(shù)字簽名方法,其中多方聯(lián)合密鑰產(chǎn)生包括以下步驟:
m個聯(lián)合方按照預設順序產(chǎn)生隨機數(shù)ki∈(0,n-1],并使用密鑰產(chǎn)生函數(shù)fd()計算pi=fd(g,ki)和qi=fd(qi-1,ki-1),然后將計算出的公鑰因子pi和臨時變量qi發(fā)送至下一個聯(lián)合方并刪除臨時變量qi;所述下一個聯(lián)合方重復上述步驟,以此類推,直至計算出所述預設順序中最后一個聯(lián)合方的公鑰因子pm和qm。最終根據(jù)qm計算出聯(lián)合公鑰p=fp(qm),其中fp為聯(lián)合公鑰計算函數(shù)。具體的流程可為:
步驟k1:第一順序方產(chǎn)生隨機數(shù)k1∈(0,n-1]作為私鑰因子,并計算p1=fd(g,k1),q1=fd(q0,k1-1),然后將計算出的公鑰因子p1和臨時變量q1,將q1發(fā)送至第二順序方;其中fd()為密鑰產(chǎn)生函數(shù),q0為fd()初值,g為橢圓曲線的基點,n為sm2的橢圓曲線基點g的階。
步驟k2:第二順序方產(chǎn)生隨機數(shù)k2∈(1,n-1]作為私鑰因子,并計算p2=fd(g,k2),q2=fd(q1,k2-1),然后將計算出的公鑰因子p2和臨時變量q2,將q2發(fā)送至第三順序方;
以此類推。
步驟ki:第i順序方產(chǎn)生隨機數(shù)ki∈(0,n-1]作為私鑰因子,并計算pi=fd(g,ki),qi=fd(qi-1,ki-1),然后將計算出的公鑰因子pi和臨時變量qi,將qi發(fā)送至第i+1順序方;
直至計算出所述預設順序中最后一個聯(lián)合方:第m順序方;
步驟km:第m順序方產(chǎn)生隨機數(shù)km∈(0,n-1]作為私鑰因子,并計算pm=fd(g,km),qm=fd(qm-1,km-1);并計算聯(lián)合公鑰p=fp(qm),其中fp為聯(lián)合公鑰計算函數(shù)。
第m順序方需驗證聯(lián)合公鑰p的合法性,如果p是一個合法公鑰,則聯(lián)合密鑰產(chǎn)生結束,如p不是一個合法公鑰,第m順序方需重新產(chǎn)生隨機數(shù)km計算pm、qm和聯(lián)合公鑰p,直至聯(lián)合公鑰p合法,密鑰產(chǎn)生結束。
經(jīng)過上述步驟,m個聯(lián)合方均各自獨立地產(chǎn)生出私鑰因子di=ki和公鑰鑰因子pi,同時也最終計算出聯(lián)合公鑰p。
上述密鑰產(chǎn)生過程的有益結果是,各方均秘密地產(chǎn)生用于數(shù)字簽名使用的生出私鑰因子di同時妥善保存,產(chǎn)生過程中其它各方均無法也無需知道其它參與方的私鑰信息。最終結果可以表述為聯(lián)合簽名私鑰d=f(d1,d2,…,dm)和聯(lián)合公鑰p,同時保證了(d,p)為一個合法的密鑰對。
上述步驟生成的聯(lián)合簽名私鑰d由m份私鑰因子di組成,i=[1,m],其中m≥3。私鑰因子di是在密鑰生成時由m個聯(lián)合方各自分別產(chǎn)生并秘密保存在各自的設備中。
根據(jù)本發(fā)明的另一個方面,提供一種多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法,其中多方聯(lián)合數(shù)字簽名包括以下步驟:
m個聯(lián)合方按照預設順序產(chǎn)生隨機數(shù)組ki,計算ri=fr(ri-1,ki),其中fr()為聯(lián)合簽名第一分量計算函數(shù)。得出所述預設順序中最后一個聯(lián)合方的rm=(x,y),計算出聯(lián)合數(shù)字簽名第一分量r=f1(rm,e);其中,f1()第一分量取值計算函數(shù),e為密碼雜湊函數(shù)作用于消息m的輸出值;
m個聯(lián)合方依據(jù)與所述預設順序相反的順序恢復各自的私鑰因子di,計算si=fs(si+1,ki,di),其中ki為計算聯(lián)合簽名第一分量時第i個聯(lián)合方秘密產(chǎn)生的隨機數(shù)組,fs()為聯(lián)合簽名第二分量計算函數(shù);得出所述預設順序中第一個聯(lián)合方的s1,并計算出聯(lián)合簽名的第二分量s=f2(s1,r);其中,f2()為第二分量取值計算函數(shù),r為聯(lián)合數(shù)字簽名第一分量。
最終,根據(jù)聯(lián)合簽名第一分量r和簽名第二分量s得到多方聯(lián)合的數(shù)字簽名值sign(m)=(r,s)。
計算多方聯(lián)合數(shù)字簽名的聯(lián)合簽名第一分量r具體流程為:
步驟r1:第一順序方產(chǎn)生隨機數(shù)組k1,計算r1=fr(r0,k1),將r1發(fā)送至第二順序方;其中r0為函數(shù)fr的初值。
步驟r2:第二順序方產(chǎn)生隨機數(shù)組k2,計算r2=fr(r1,k2),將r2發(fā)送至第三順序方;
以此類推。
步驟ri:第i順序方產(chǎn)生隨機數(shù)組ki,計算ri=fr(ri-1,ki),將ri發(fā)送至第i+1順序方;直至計算出所述預設順序中最后一個聯(lián)合方:第m順序方;
步驟rm:第m順序方產(chǎn)生隨機數(shù)組km,計算rm=fr(rm-1,km)=(x,y)。
步驟r:最終計算出聯(lián)合簽名第一分量r=f1(rm,e);其中,f1()為第一分量取值計算函數(shù),e為密碼雜湊函數(shù)作用于消息m的輸出值;
計算多方聯(lián)合數(shù)字簽名的聯(lián)合簽名第二分量s具體流程為:
步驟sm:第m順序方使用私鑰因子dm計算sm=fs(sm+1,km,dm),將sm發(fā)送至第m-1順序方;其中sm+1為函數(shù)fs()的初值,dm是第m順序方的私鑰因子,km是第m順序方在計算聯(lián)合簽名第一分量r時所產(chǎn)生的隨機數(shù)組;
步驟sm-1:第m-1順序方使用私鑰因子dm-1計算sm-1=fs(sm,km-1,dm-1),將sm-1發(fā)送至第m-2順序方;其中dm-1是第m-1順序方的私鑰因子,km-1是第m-1順序方在計算聯(lián)合簽名第一分量r時所產(chǎn)生的隨機數(shù)組;
以此類推。
步驟si:第i順序方使用私鑰因子di計算si=fs(si+1,ki,di),將si發(fā)送至第i-1順序方;其中di是第i順序方的私鑰因子,ki是第i順序方在計算聯(lián)合簽名第一分量r時所產(chǎn)生的隨機數(shù)組;
直至計算出所述預設順序中第一個聯(lián)合方:第1順序方;
步驟s1:第1順序方使用私鑰因子d1計算s1=fs(s2,k1,d1),其中d1是第1順序方的私鑰因子,k1是第1順序方在計算聯(lián)合簽名第一分量r時所產(chǎn)生的隨機數(shù)組;
步驟s:最終計算出聯(lián)合數(shù)字簽名第二分量s=f2(s1,r);其中f2()是第二分量取值計算函數(shù),r是聯(lián)合簽名第一分量值。
最終,根據(jù)聯(lián)合簽名第一分量r和聯(lián)合簽名第二分量s得到多方聯(lián)合的數(shù)字簽名值sign(m)=(r,s)。
經(jīng)過上述步驟,m個聯(lián)合方均各自獨立地產(chǎn)生隨機數(shù)組,并使用各自獨立秘密保存的私鑰因子di進行運算,最終得到聯(lián)合數(shù)字簽名值。
上述聯(lián)合數(shù)字簽名過程的有益結果是,各方均秘密地使用各自的私鑰因子進行運算,同時僅將運算送至下一順序方,私鑰無需外送。很好地保證了各自私鑰因子的安全性,同時,通過聯(lián)合運算得到聯(lián)合數(shù)字簽名值。由于m方聯(lián)合簽名的結果與單獨使用私鑰d進行數(shù)字簽名的結果完全一樣,因此,該聯(lián)合數(shù)字簽名值(r,s)可使用聯(lián)合公鑰p進行簽名驗證。
優(yōu)選地,所述的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法還包括m個聯(lián)合方根據(jù)各自的私鑰因子di和公鑰因子pi進行數(shù)據(jù)簽名和驗證,其中第i順序方使用簽名私鑰因子di對數(shù)據(jù)進行簽名,公鑰因子pi在聯(lián)合密鑰產(chǎn)生時發(fā)送相關方或所有其它各方,用于對數(shù)據(jù)進行驗證;具體步驟如下:
計算多方聯(lián)合數(shù)字簽名的聯(lián)合簽名第一分量r具體流程為:
步驟r1’:第一順序方產(chǎn)生隨機數(shù)組k1,計算r1=fr(r0,k1),同時使用私鑰因子d1對數(shù)據(jù)r1進行數(shù)字簽名sign1(r1),將r1及簽名值sign1(r1)發(fā)送至第二順序方;其中r0為函數(shù)fr()的初值。
步驟r2’:第二順序方使用第一方公鑰因子p1對簽名值sign1(r1)進行簽名驗證,如驗證通過,產(chǎn)生隨機數(shù)組k2,計算r2=fr(r1,k2),同時使用私鑰因子d2對數(shù)據(jù)r2進行數(shù)字簽名sign2(r2),將r2及簽名值sign2(r2)發(fā)送至第三順序方;
以此類推。
步驟ri’:第i順序方使用第i-1順序方公鑰因子pi-1對簽名值signi-1(ri-1)進行簽名驗證,如驗證通過,產(chǎn)生隨機數(shù)組ki,計算ri=fr(ri-1,ki),同時使用私鑰因子di對數(shù)據(jù)ri進行數(shù)字簽名signi(ri),將ri及簽名值signi(ri)發(fā)送至第i+1順序方;直至計算出所述預設順序中最后一個聯(lián)合方:第m順序方;
步驟rm’:第m順序方使用第m-1方公鑰因子pm-1對簽名值signm-1(rm-1)進行簽名驗證,如驗證通過,產(chǎn)生隨機數(shù)組km,計算rm=fr(rm-1,km)。
步驟r’:最終計算出聯(lián)合數(shù)字簽名第一分量r=f1(rm,e);其中,f1()為第一分量取值計算函數(shù),e為密碼雜湊函數(shù)作用于消息m的輸出值。
計算多方聯(lián)合數(shù)字簽名的聯(lián)合簽名第二分量s具體流程為:
步驟sm’:第m順序方使用私鑰因子dm計算sm=fs(sm+1,km,dm),同時使用私鑰因子dm對數(shù)據(jù)sm進行數(shù)字簽名signm(sm),將sm及簽名值signm(sm)發(fā)送至第m-1順序方;其中sm+1為函數(shù)fs的初值。
步驟sm-1’:第m-1順序方使用第m方公鑰因子pm對簽名值signm(sm)進行簽名驗證。如驗證通過,使用私鑰因子dm-1計算sm-1=fs(sm,km-1,dm-1),同時使用私鑰因子dm-1對數(shù)據(jù)sm-1進行數(shù)字簽名signm-1(sm-1),將sm-1及簽名值signm-1(sm-1)發(fā)送至第m-2順序方;
以此類推。
步驟si’:第i順序方使用第i+1方公鑰因子pi+1對簽名值signi+1(si+1)進行簽名驗證。如驗證通過,使用私鑰因子di計算si=fs(si+1,ki,di),同時使用私鑰因子di對數(shù)據(jù)si進行數(shù)字簽名signi(si),將si及簽名值signi(si)發(fā)送至第i-1順序方;直至計算出所述預設順序中第一個聯(lián)合方:第1順序方;
步驟s1’:第1順序方使用第2方公鑰因子p2對簽名值sign2(s2)進行簽名驗證。如驗證通過,使用私鑰因子d1計算s1=fs(s2,k1,d1);
步驟s’:最終計算出聯(lián)合數(shù)字簽名的聯(lián)合簽名第二分量s=f2(s1,r),其中f2()是第二分量取值計算函數(shù),r是聯(lián)合數(shù)字簽名的第一分量值。
最終,根據(jù)聯(lián)合簽名第一分量r和聯(lián)合簽名第二分量s得到多方聯(lián)合的數(shù)字簽名值sign(m)=(r,s)。
上述聯(lián)合數(shù)字簽名過程的有益結果是,聯(lián)合簽名各方使用各自秘密保存的私鑰因子進行數(shù)字簽名,而數(shù)據(jù)接收方使用發(fā)送方的公鑰因子對數(shù)字簽名進行簽名驗證,從而保證數(shù)據(jù)的真實性和有效性。這對于數(shù)據(jù)傳輸網(wǎng)絡不是很安全的情況下,增強了整個聯(lián)合數(shù)字簽名過程的安全性和可靠性。
進一步地,所述的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法還包括m個聯(lián)合方根據(jù)各自的公鑰因子pi和私鑰因子di進行數(shù)據(jù)加密和解密,其中第i方使用公鑰因子pk對數(shù)據(jù)進行數(shù)據(jù)加密并發(fā)送給相關方k,相關方k使用私鑰因子dk對接收的密文進行解密。步驟如下:
計算多方聯(lián)合數(shù)字簽名的聯(lián)合簽名第一分量r具體流程為:
步驟r1”:第一順序方產(chǎn)生隨機數(shù)組k1,計算r1=fr(r0,k1),同時使用第二順序方公鑰因子p2對數(shù)據(jù)r1進行加密,得到密文r1”。將r1”發(fā)送至第二順序方;其中r0為函數(shù)fr的初值。
步驟r2”:第二順序方使用秘密保存的私鑰因子d2對r1”解密得到明文r1。產(chǎn)生隨機數(shù)組k2,計算r2=fr(r1,k2),同時使用第三順序方公鑰因子p3對數(shù)據(jù)r2進行加密,得到密文r2”。將r2”發(fā)送至第三順序方;
以此類推。
步驟ri”:第i順序方使用秘密保存的私鑰因子di對ri-1”解密得到明文ri-1。產(chǎn)生隨機數(shù)組ki,計算ri=fr(ri-1,ki),同時使用第i+1順序方公鑰因子pi+1對數(shù)據(jù)ri進行加密,得到密文ri”。將ri”發(fā)送至第i+1順序方;直至計算出所述預設順序中最后一個聯(lián)合方:第m順序方;
步驟rm”:第m順序方使用秘密保存的私鑰因子dm對rm-1”解密得到明文rm-1。產(chǎn)生隨機數(shù)組km,計算rm=fr(rm-1,km)=(x,y)。
步驟r”:最終計算出聯(lián)合數(shù)字簽名的聯(lián)合簽名第一分量r=f1(rm,e);其中,f1()為第一分量取值計算函數(shù),e為密碼雜湊函數(shù)作用于消息m的輸出值;
計算多方聯(lián)合數(shù)字簽名的聯(lián)合簽名第二分量s具體流程為:
步驟sm”:第m順序方使用私鑰因子dm計算sm=fs(sm+1,km,dm),同時使用m-1順序方公鑰因子pm-1對數(shù)據(jù)sm加密,得到密文sm”。將sm”發(fā)送至第m-1順序方;其中sm+1為函數(shù)fs的初值。
步驟sm-1”:第m-1順序方使用私鑰因子dm-1解密密文sm”,得到明文數(shù)據(jù)sm。計算sm-1=fs(sm,km-1,dm-1),同時使用m-2順序方公鑰因子pm-2對數(shù)據(jù)sm-1加密,得到密文sm-1”。將sm-1”發(fā)送至第m-2順序方;
以此類推。
步驟si”:第i順序方使用私鑰因子di解密密文si+1”,得到明文數(shù)據(jù)si+1。計算si=fs(si+1,ki,di),同時使用i-1順序方公鑰因子pi-1對數(shù)據(jù)si加密,得到密文si”。將si”發(fā)送至第i-1順序方;直至計算出所述預設順序中第一個聯(lián)合方:第1順序方;
步驟s1”:第1順序方使用私鑰因子d1解密密文s2”,得到明文數(shù)據(jù)s2。計算s1=fs(s2,k1,d1);
步驟s”:最終計算出聯(lián)合數(shù)字簽名第二分量s=f2(s1,r),其中f2()是第二分量取值計算函數(shù),r是聯(lián)合簽名第一分量值。
最終,根據(jù)聯(lián)合簽名第一分量r和聯(lián)合簽名第二分量s得到多方聯(lián)合的數(shù)字簽名值sign(m)=(r,s)。
上述聯(lián)合數(shù)字簽名過程的有益結果是,聯(lián)合簽名各方使用相關方的公鑰因子進行數(shù)據(jù)加密,并將密文發(fā)送給下一個順序方;而數(shù)據(jù)接收方使用自己的私鑰因子對密文解密得到明文并進行聯(lián)合數(shù)字簽名運算,從而保證數(shù)據(jù)的私密性和安全性。同時,對數(shù)據(jù)加解密的密鑰使用非對稱密碼算法,也不需要使用額外的密鑰。這對于數(shù)據(jù)傳輸網(wǎng)絡不是很安全的情況下,增強了整個聯(lián)合數(shù)字簽名過程的私密性和安全性。
更進一步地,所述的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法還可以包括有服務中心的m個聯(lián)合方進行多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名系統(tǒng)。具體步驟如下:
m個聯(lián)合方進行多方聯(lián)合密鑰產(chǎn)生過程如下:
步驟ck1:服務中心設定初值q0,發(fā)送q0至第一方;
步驟kc1:第一方產(chǎn)生隨機數(shù)k1∈(0,n-1]作為私鑰因子d1,并計算公鑰因子p1=fd(g,k1)和臨時變量q1=fd(q0,k1-1),將p1和q1發(fā)送至服務中心;其中fd()為密鑰產(chǎn)生函數(shù),g為橢圓曲線的基點,n為sm2的橢圓曲線基點g的階;
步驟ck2:服務中心發(fā)送q1至第二方;
步驟kc2:第二方產(chǎn)生隨機數(shù)k2∈(0,n-1]作為私鑰因子d2,并計算公鑰因子p2=fd(g,k2)和臨時變量q2=fd(q1,k2-1),將p2和q2發(fā)送至服務中心;
以此類推。
步驟kci:第i方產(chǎn)生隨機數(shù)ki∈(0,n-1]作為私鑰因子di,并計算公鑰因子pi=fd(g,ki)和臨時變量qi=fd(qi-1,ki-1),將pi和qi發(fā)送至服務中心;
步驟cki:服務中心發(fā)送qi至第i+1方;
直至計算出所述預設順序中最后一個聯(lián)合方:第m方;
步驟kcm:第m方產(chǎn)生隨機數(shù)km∈(0,n-1]作為私鑰因子dm,并計算公鑰因子pm=fp(g,km)和臨時變量qm=fd(qm-1,km-1),將pm和qm發(fā)送至服務中心;
步驟ckm:服務中心計算聯(lián)合公鑰p=fp(qm),其中fp為聯(lián)合公鑰計算函數(shù)。并將聯(lián)合公鑰p發(fā)送給m各方;
計算有中心m個聯(lián)合方進行多方聯(lián)合數(shù)字簽名的聯(lián)合簽名第一分量r具體流程為:
步驟cr0:服務中心根據(jù)待簽名消息m和聯(lián)合公鑰p計算密碼雜湊函數(shù)作用于消息m的輸出值e,設定函數(shù)fr的初值r0;將m、e、r0發(fā)送到第一方;
步驟rc1:第一方檢查簽名數(shù)據(jù)m和e的正確性,產(chǎn)生隨機數(shù)組k1,計算r1=fr(r0,k1),將r1發(fā)送至服務中心;
步驟cr1:服務中心將m、e、r1發(fā)送至第二方;
步驟rc2:第二方檢查簽名數(shù)據(jù)m和e的正確性,產(chǎn)生隨機數(shù)組k2,計算r2=fr(r1,k2),將r2發(fā)送至服務中心;
步驟cr2:服務中心將m、e、r2發(fā)送至第三方;
以此類推。
步驟rci:第i方檢查簽名數(shù)據(jù)m和e的正確性,產(chǎn)生隨機數(shù)組ki,計算ri=fr(ri-1,ki),將m、e、ri發(fā)送至服務中心;
步驟cri:服務中心將m、e、ri發(fā)送至第i+1方;
直至計算出所述預設順序中最后一個聯(lián)合方:第m方;
步驟rcm:第m方檢查簽名數(shù)據(jù)m和e的正確性,產(chǎn)生隨機數(shù)組km,計算rm=fr(rm-1,km),將rm發(fā)送至服務中心;
步驟crm:服務中心接收rm。最終計算出聯(lián)合簽名第一分量r=f1(rm,e);其中,f1()為第一分量取值計算函數(shù),e為密碼雜湊函數(shù)作用于消息m的輸出值;
計算有中心m個聯(lián)合方進行多方聯(lián)合數(shù)字簽名的聯(lián)合簽名第二分量s具體流程為:
步驟csm+1:服務中心第m方設定函數(shù)fs()初值sm+1,將sm+1發(fā)送至第m方;
步驟scm:第m方使用私鑰因子dm計算sm=fs(sm+1,km,dm),將sm發(fā)送服務中心;
步驟csm:服務中心將sm發(fā)送至第m-1方;
步驟scm-1:第m-1方使用私鑰因子dm-1計算sm-1=fs(sm,km-1,dm-1),將sm-1發(fā)送至服務中心;
以此類推。
步驟csi:服務中心將si+1發(fā)送至第i方;
步驟sci:第i方使用私鑰因子di計算si=fs(si+1,ki,di),將si發(fā)送至服務中心;
直至計算出所述預設順序中第一個聯(lián)合方:第1方;
步驟cs1:服務中心將s2發(fā)送至第1方;
步驟sc1:第1方使用私鑰因子d1計算s1=fs(s2,k1,d1),將s1發(fā)送至服務中心;
步驟cs0:服務中心接收s1,最終計算出聯(lián)合簽名第二分量s=f2(s1,r),其中f2()是第二分量取值計算函數(shù),r是聯(lián)合簽名第一分量值。
最終,根據(jù)聯(lián)合簽名第一分量r和聯(lián)合簽名第二分量s得到多方聯(lián)合的數(shù)字簽名值sign(m)=(r,s)。
上述有中心聯(lián)合數(shù)字簽名過程的有益結果是,在服務中心的協(xié)調(diào)下,m個聯(lián)合方各方僅與服務中心通信,彼此之間不需要互通;同時m個聯(lián)合方均不需要關心自己是第幾順序方,各方的運算函數(shù)及步驟相同。
進一步,由于服務中心具有m個聯(lián)合方各方的公鑰因子;因此對各方發(fā)送給服務中心的數(shù)據(jù)可以使用各方的私鑰因子進行數(shù)字簽名,服務中心使用對應的公鑰因子進行簽名驗證,以保證數(shù)據(jù)的可靠性。
更進一步,服務中心可以通過產(chǎn)生一個中心加密密鑰對,將中心加密公鑰發(fā)送給m個聯(lián)合方各方。這樣服務中心發(fā)送的數(shù)據(jù)通過各方的公鑰因子進行加密,各方使用各自的私鑰因子進行解密。而各方發(fā)送的數(shù)據(jù),通過中心加密公鑰進行加密,中心通過中心加密私鑰進行解密,以保證通信過程中的私密性和安全性。
更進一步,服務中心也可以是m個聯(lián)合方的一方,即服務中心也有用于數(shù)字簽名的私鑰因子和公鑰因子,并在數(shù)字簽名過程中,除了協(xié)調(diào)和轉發(fā)數(shù)據(jù),同時也產(chǎn)生隨機數(shù)組,并使用私鑰因子進行運算。由于服務中心設施到位,防控措施更加有效,可以更好地保護聯(lián)合簽名私鑰。
根據(jù)本發(fā)明的另一方面,提供了一種多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名系統(tǒng),包括m個聯(lián)合方,每個聯(lián)合方各自具有獨立的子系統(tǒng),每個子系統(tǒng)包括:
聯(lián)合密鑰生成模塊,用于生成用戶私鑰因子di,m方聯(lián)合簽名私鑰d由m份私鑰因子di組成,i=[1,m],其中m≥3,該聯(lián)合用戶簽名私鑰d是在密鑰生成時由m個聯(lián)合方各自分別產(chǎn)生并秘密保存在各自的設備中;
聯(lián)合簽名第一分量計算模塊,用于根據(jù)m個聯(lián)合方按照預設順序秘密產(chǎn)生隨機數(shù)組ki而計算ri=fr(ri-1,ki),得出所述預設順序中最后一方的rm=(x,y),并通過第一分量取值函數(shù)f1()計算簽名第一分量r=f1(rm,e),e為密碼雜湊函數(shù)作用于消息m的輸出值,fr()為單向函數(shù);
聯(lián)合簽名第二分量計算模塊,用于根據(jù)m個聯(lián)合方依據(jù)與所述預設順序相反的順序恢復各自的私鑰因子di而計算si=fs(si+1,ki,di),得出所述預設順序中第一方的s1,從而通過第二分量取值函數(shù)f2()計算出簽名第二分量s=f2(s1,r),fs()為非單向函數(shù);
系統(tǒng)還可包括數(shù)字簽名值計算模塊,用于根據(jù)簽名第一分量r值和簽名第二分量s值求出到多方聯(lián)合的數(shù)字簽名值sign(m)=(r,s)。
本發(fā)明的有益效果是:
本發(fā)明的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法及系統(tǒng),其顯著的效果是單個或多個簽名單元的信息泄露并不會造成最終用戶私鑰的泄露。即只要不是所有的簽名單元均被攻破,攻擊者并不能達到使用用戶私鑰簽名的目的,而相對集中的簽名服務中心,由于設施到位,防控措施有效,可以更好地保護用戶私鑰。
本發(fā)明提出的多方聯(lián)合數(shù)字簽名的方法,改變了過去標準的數(shù)字簽名只能由個體進行數(shù)字簽名的限制,將數(shù)字簽名擴展到由多個獨立個體組成的聯(lián)合體的情況,并在各方聯(lián)合完成數(shù)字簽名運算的情況下,才可以實現(xiàn)該聯(lián)合體的數(shù)字簽名。在聯(lián)合簽名的過程中,每個個體使用公鑰加密或私鑰簽名的手段,進一步保證信息傳遞的私密性或真實性,有效防止信息傳遞過程中的信息泄露或信息偽造等攻擊。
附圖說明
圖1為本發(fā)明多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名系統(tǒng)一實施例的構成示意圖;
圖2為本發(fā)明的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法的密鑰產(chǎn)生流程示意圖;
圖3為本發(fā)明的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法的數(shù)字簽名第一分量r產(chǎn)生流程示意圖;
圖4為本發(fā)明的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法的數(shù)字簽名第二分量s產(chǎn)生流程示意圖;
圖5為本發(fā)明的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法一實施例的三方數(shù)字簽名流程示意圖;
圖6為本發(fā)明的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法一實施例的四方無中心聯(lián)合密鑰生成及數(shù)字簽名示意圖;
圖7為本發(fā)明的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法一實施例的四方有中心聯(lián)合密鑰生成及數(shù)字簽名示意圖。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例對本發(fā)明的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法及系統(tǒng)進行進一步詳細說明。需要說明的是,在不沖突的情況下,以下各實施例及實施例中的特征可以相互組合。應當理解,此處所描述的具體實施例僅用于解釋本發(fā)明,并不用于限定本發(fā)明。
參照圖1,本發(fā)明一實施例的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名的系統(tǒng)由m個聯(lián)合方組成,m個聯(lián)合方的各方均由聯(lián)合密鑰產(chǎn)生模塊、聯(lián)合簽名第一分量計算模塊和聯(lián)合簽名第二分量計算模塊組成。其中:
聯(lián)合密鑰產(chǎn)生模塊用于聯(lián)合簽名密鑰的產(chǎn)生,即按照預定的次序,接收前一方計算結果,產(chǎn)生各自的私鑰因子和公鑰因子,并將計算結果傳送至下一方。其中第一方為發(fā)起方,需設定初始值。第m方為最后一級,計算結果無需再傳送,并計算出最終聯(lián)合簽名的公鑰結果。
聯(lián)合簽名第一分量計算模塊,用于聯(lián)合數(shù)字簽名時,計算數(shù)字簽名的第一分量,即按照預定的順序接收前一方計算的結果qi-1,計算本方的qi,并將計算結果傳送至下一方。其中第一方為發(fā)起方,需設定fr()函數(shù)的初始值q0。第m方為最后一級,計算結果無需再傳送,并計算出最終聯(lián)合簽名的第一分量r。
聯(lián)合簽名第二分量計算模塊,用于聯(lián)合數(shù)字簽名時,計算數(shù)字簽名的第二分量,即按照第一分量計算順序的相反順序,接收前一方計算結果si+1,計算本方的si,并將計算結果傳送至下一方。其中第m方為第二分量計算的發(fā)起方,需設定fs()函數(shù)的初始值sm+1。第一方為最后一級,計算結果無需再傳送,并計算出最終聯(lián)合簽名的第二分量s。
服務中心為可選模塊,其功能為按照預定的順序與聯(lián)合簽名各方進行通信,由于各方之間無需再相互通信,m個聯(lián)合方的各方僅需要與服務中心通信即可,所以簡化聯(lián)合各方的密鑰產(chǎn)生流程和聯(lián)合數(shù)字簽名的流程。圖1中服務中心包括密鑰產(chǎn)生模塊、簽名及驗證計算模塊、加密及解密計算模塊。
同時,服務中心還可以為該m個聯(lián)合方的服務過程產(chǎn)生中心密鑰對。其中,中心公鑰傳送給聯(lián)合各方,服務中心秘密保存中心私鑰,同時m各方在密鑰產(chǎn)生時,除秘密產(chǎn)生并保存自己的私鑰因子外,還可以將公鑰因子傳送給服務中心。這樣,服務中心與聯(lián)合各方可以通過數(shù)字簽名技術或加密解密技術保護數(shù)字簽名過程中的通信數(shù)據(jù)的安全性。
參照圖2至圖4,本發(fā)明實施例的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法,包括以下步驟:
生成m個聯(lián)合方的聯(lián)合簽名私鑰d,聯(lián)合簽名私鑰d由m份私鑰因子di組成,i=[1,m],其中m≥3,該用戶簽名私鑰d是在密鑰生成時,由m個聯(lián)合方各自分別產(chǎn)生并秘密保存在各自的設備中,即每個聯(lián)合方秘密產(chǎn)生并保存一份私鑰因子di。m個聯(lián)合方聯(lián)合簽名密鑰的產(chǎn)生過程為:
設定初始值q0,并按照預設順序使用單向函數(shù)fd()進行計算:
首先第一方產(chǎn)生秘密產(chǎn)生私鑰因子d1,并計算q1=fd(q0,d1);將q1傳送給第二方;
第二方產(chǎn)生秘密產(chǎn)生私鑰因子d2,并計算q2=fd(q1,d2);將q2傳送給第三方;
以此類推。一般地,第i方產(chǎn)生秘密產(chǎn)生私鑰因子di,并計算qi=fd(qi-1,di);將qi傳送給第i+1方,直至最后第m方;
第m方產(chǎn)生秘密產(chǎn)生私鑰因子dm,并計算qm=fd(qm-1,dm);并計算出聯(lián)合簽名公鑰p=fp(qm)。
m個聯(lián)合方的各方使用各自秘密保存的私鑰因子di的聯(lián)合簽名過程分為第一分量r和第二分量s的計算流程,并按照預設順序分別使用單向函數(shù)fr()和非單向函數(shù)fs()進行計算,為保護各私鑰因子的安全性,計算過程中使用了隨機數(shù)組ki,一般地,ki表述為兩個不同的隨機數(shù)。
m個聯(lián)合方按照預設順序產(chǎn)生隨機數(shù)組ki,計算ri=fr(ri-1,ki),得出所述預設順序中最后一個聯(lián)合方的rm,計算聯(lián)合簽名第一分量r=f1(rm,e);
m個聯(lián)合方依據(jù)與所述預設順序相反的順序恢復各自的私鑰因子di,計算si=fs(si+1,ki,di),得出所述預設順序中第一個聯(lián)合方的s1,計算出聯(lián)合簽名第二分量s=f2(s1,r);
根據(jù)聯(lián)合簽名第一分量r和聯(lián)合簽名第二分量s得到多方聯(lián)合的數(shù)字簽名值sign(m)=(r,s)。
以上方案的顯著效果是單個或多個簽名單元的信息泄露并不會造成最終用戶私鑰的泄露。即只要不是所有的簽名單元均被攻破,攻擊者并不能達到使用用戶私鑰簽名的目的。
采用sm2密碼算法時,各函數(shù)定義及初值定義為:
函數(shù)fd(p,d)為sm2橢圓曲線的倍點運算,初值p0=g,g為sm2橢圓曲線的基點,即:
pi=fd(pi-1,di)=[di]pi-1(公式1)
公鑰計算函數(shù)fp()為sm2橢圓曲線點所定義的減法:
fp(q)=q-g(公式2)
第一分量計算函數(shù)fr()為sm2定義的橢圓曲線上的倍點運算的混合運算,初值r0=0,k=(k1,k2):
ri=fr(ri-1,k)=[k1]ri-1+[k2]g(公式3)
上述公式中pi、ri、q均為sm2算法定義的橢圓曲線上的點,并定義如果r=o,則對任何正整數(shù)k有[k]r=o。
第二分量計算函數(shù)fs()為模運算:
s=fs(y,k,d)(公式4)
s1=dk1y1(modn)
s2=d(k2y1+y2)(modn)
上式中:s=(s1,s2),y=(y1,y2),k=(k1,k2),初值ym+1=(1,r),n為sm2橢圓曲線的階。
聯(lián)合多方數(shù)字簽名第一分量取值函數(shù)f1(r,e)定義為:如果r=(x,y)是最后一方的運算結果,e是數(shù)據(jù)m和聯(lián)合公鑰p計算密碼雜湊函數(shù)作用于消息m的輸出值,則聯(lián)合數(shù)字簽名的第一分量r值為:
r=f1(r,e)=x+e(modn)(公式5)
聯(lián)合多方數(shù)字簽名第二分量取值函數(shù)f2(r,e)定義為,如果s=(s1,s2)是循環(huán)運算的最后一方運算結果,則聯(lián)合數(shù)字簽名的第二分量s值為:
s=f2(s,r)=s2-r(modn)(公式6)
r為聯(lián)合簽名第一份值.
實例一
本實施例涉及的是三方密鑰產(chǎn)生流程及數(shù)字簽名的實現(xiàn),一種典型的應用是一個合伙人公司有三個主要領導,分別是第一方:財務總監(jiān),第二方:總經(jīng)理和第三方:董事長。公司重要文件需要三方共同對該文件進行數(shù)字簽名,三方各自具有公司簽名私鑰的一個私鑰因子,只有三方聯(lián)合簽名才會完成公司重要文件的數(shù)字簽名。并約定簽名的順序為財務總監(jiān)、總經(jīng)理、董事長,即順序為第一方、第二方、第三方。三方的簽名設備可以是他們使用的個人電腦、手機或專用簽名設備,如usb-key。
如圖5所示,以下實例以sm2非對稱密碼算法為例,說明三方(m=3)聯(lián)合密鑰產(chǎn)生流程及數(shù)字簽名的實現(xiàn)。同時,為保障消息來源的真實性,多方簽名消息過程中增加了消息簽名,以確定消息的真?zhèn)巍?/p>
1、三方密鑰產(chǎn)生流程
步驟1:第一方產(chǎn)生隨機數(shù)作為本方私鑰因子d1∈(0,n-1],并計算p1=fd(g,d1),q1=fd(q0,d1-1),并將第一方公鑰因子p1和臨時變量q1發(fā)送至第二方;
步驟2:第二方產(chǎn)生隨機數(shù)作為本方私鑰因子d2∈(0,n-1],并計算p2=fd(g,d2),q2=fd(q1,d2-1),刪除q1并將第二方公鑰因子p2和臨時變量q2發(fā)送至第三方;將第二方公鑰因子p2發(fā)送至第一方;
步驟3:第三方產(chǎn)生隨機數(shù)作為本方私鑰因子d3∈(0,n-1],并計算p3=fd(g,d3),q3=fd(q2,d3-1),計算p=fp(q3)并驗證p適合為合法公鑰,如果是,則密鑰對產(chǎn)生結束,刪除q2和q3并將第三方公鑰因子p3發(fā)送至第二方;否則重復步驟3。
其結果是:第一方產(chǎn)生并秘密保存私鑰因子d1,得到第二方的公鑰因子p2;第二方產(chǎn)生并秘密保存私鑰因子d2和第一方及第三方的公鑰因子p1和p3;第三方產(chǎn)生并秘密保存私鑰因子d3和第二方的公鑰因子p2。
驗證通過的公鑰p即為聯(lián)合簽名私鑰所對應的公鑰。
由于函數(shù)fd()為單向函數(shù),所以三方的私鑰因子di僅為產(chǎn)生方所有并秘密保存,其它兩方及無關方無法得知。
2、三方聯(lián)合數(shù)字簽名流程
令隨機數(shù)組ki=(ki1,ki2),其中ki1∈(0,n-1],ki2∈(0,n-1]為兩個相互獨立的隨機數(shù)。
設sign(x,d)為使用私鑰d對x的數(shù)字簽名結果。
已知e為密碼雜湊函數(shù)作用于消息m的輸出值,r0=o。則三方聯(lián)合數(shù)字簽名第一分量r的計算流程為:
步驟1:第一方產(chǎn)生隨機數(shù)組k1=(k11,k12),并計算r1=fr(r0,k1),并使用私鑰因子d1對r1進行數(shù)字簽名sr1=sign(r1,d1),然后將r1及sr1發(fā)送至第二方;
步驟2:第二方使用第一方公鑰因子p1對sr1進行驗簽,確定r1的真實性。若r1真實可靠,則產(chǎn)生隨機數(shù)組k2=(k21,k22),并計算r2=fr(r1,k2),并使用私鑰因子d2對r2進行數(shù)字簽名sr2=sign(r2,d2),然后將r2及sr2發(fā)送至第三方;
步驟3:第三方使用第二方公鑰因子p2對sr2進行驗簽,確定r2的真實性。若r2真實可靠,則產(chǎn)生隨機數(shù)組k3=(k31,k32),并計算r3=fr(r2,k3)。計算數(shù)字簽名第一分量:r=f1(r3,e)。
步驟4:令初值s4=(1,r),第三方計算s3=fs(s4,k3,d3),并使用私鑰因子d3對s3進行數(shù)字簽名ss3=sign(s3,d3),然后將s3及ss3發(fā)送至第二方;
步驟5:第二方使用第三方公鑰因子p3對ss3進行驗簽,確定s3的真實性。若s3真實可靠,計算s2=fs(s3,k2,d2),并使用私鑰因子d2對s2進行數(shù)字簽名ss2=sign(s2,d2),然后將s2及ss2=sign(s2,d2)發(fā)送至第一方;
步驟6:第一方使用第二方公鑰因子p2對ss2進行驗簽,確定s2的真實性。若s2真實可靠,計算s1=fs(s2,k1,d1);計算數(shù)字簽名第二分量:s=f2(s1,r)。
其結果是:三方聯(lián)合并使用各自秘密保管的私鑰因子di通過多個步驟,共同完成數(shù)字簽名sign(m)=(r,s)。同時該簽名可以使用三方密鑰產(chǎn)生流程所共同產(chǎn)生的公鑰p進行標準sm2簽名驗證。三方在消息傳遞過程中,發(fā)送方使用了私鑰因子進行消息簽名,接收方使用對方的公鑰因子進行簽名驗證,保證了消息的真實性。如果任何一方的簽名驗證失敗,則說明該消息不是對方的真實消息,而返回失敗結果。
實例二
本實施例涉及的是無中心四方密鑰產(chǎn)生流程及數(shù)字簽名的實現(xiàn),本發(fā)明的另一個特點是對等性,即m個聯(lián)合簽名方相互平等,可以不存在上下級的關聯(lián)關系。本實例以4個聯(lián)合簽名方組成的例子來說明其對等的密鑰產(chǎn)生流程及數(shù)字簽名的實現(xiàn)。
參照圖6,圖6是m=4的四方無中心聯(lián)合密鑰生成及數(shù)字簽名流程示意圖。為表示其地位相等起見,假定四個聯(lián)合方分別為a方、b方、c方、d方。本實例僅為說明各方的對等關系,因此忽略各方公鑰因子的產(chǎn)生和傳遞過程。
1、無中心四方密鑰產(chǎn)生流程
事先假定密鑰產(chǎn)生的順序為a方→b方→c方→d方,記為[a,b,c,d],如圖5的虛線所示,其密鑰生產(chǎn)過程流程為:
步驟1:a方由于是初始方,令q0=g,秘密產(chǎn)生私鑰因子da;計算qa=fd(q0,da-1);將qa發(fā)送至b方。
步驟2:b方接收qa,秘密產(chǎn)生私鑰因子db;計算qb=fd(qa,db);將qb發(fā)送至c方。
步驟3:c方接收qb,秘密產(chǎn)生私鑰因子dc;計算qc=fd(qb,dc);將qc發(fā)送至d方。
步驟4:d方接收qc,秘密產(chǎn)生私鑰因子dd;計算qd=fd(qc,dd);由于d方是密鑰產(chǎn)生的最后一方,需計算四方聯(lián)合公鑰p=pd–g。并驗證公鑰p的合法性,如不合法重新產(chǎn)生私鑰因子dd,計算并驗證公鑰直至公鑰p合法。
實際上,上述步驟是按照[a,b,c,d]的順序進行的,也可以是[b,c,a,d],也可以是[d,b,a,c],其結果是一樣的,即假設四個聯(lián)合方的私鑰因子di不變,其最終聯(lián)合簽名私鑰d和公鑰是一致的。即:密鑰產(chǎn)生順序不會影響密鑰產(chǎn)生的效果。
2、無中心四方數(shù)字簽名流程
四方聯(lián)合數(shù)字簽名同樣是與順序無關,圖6的實線標注的順序是本實例的四方聯(lián)合數(shù)字順序[d,b,c,a],其聯(lián)合數(shù)字簽名步驟為:
步驟1:d方由于是初始方,令r0=o。產(chǎn)生隨機數(shù)組kd;計算rd=fr(r0,kd);將rd發(fā)送至b方。
步驟2:b方接收rd;產(chǎn)生隨機數(shù)組kb;計算rb=fr(rd,kb);將rb發(fā)送至c方。
步驟3:c方接收rb;產(chǎn)生隨機數(shù)組kc;計算rc=fr(rb,kc);將rc發(fā)送至a方。
步驟4:a方接收rc;產(chǎn)生隨機數(shù)組aa;計算ra=fr(rc,ka)=(x,y);計算聯(lián)合簽名第一分量r=f1(ra,e)。
步驟5:a方恢復私鑰因子da,令初值s0=(1,r),計算sa=fs(s0,ka,da),然后將sa發(fā)送至c方;
步驟6:c方接收sa,c方恢復私鑰因子dc,計算sc=fs(sa,kc,dc),然后將sc發(fā)送至b方;
步驟7:b方接收sc,b方恢復私鑰因子db,計算sb=fs(sc,kb,db),然后將sb發(fā)送至d方;
步驟8:d方接收sb,d方恢復私鑰因子dd,計算sd=fs(sb,kd,dd)=(sd1,sd2)。
計算數(shù)字簽名第二分量s=f2(sd,r)。
實際上,上述數(shù)字簽名過程的步驟是按照[d,b,c,a]的順序進行的,也可以是[b,c,a,d],也可以是[d,a,b,c]等等,其結果是一樣的,簽名值sign=(r,s)均為雜湊值e的四方聯(lián)合數(shù)字簽名的有效結果。
實施例三
本實施例涉及的是有中心四方密鑰產(chǎn)生流程及數(shù)字簽名的實現(xiàn)。
多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法,也可以是有中心的系統(tǒng)構成,其特點是中心負責與聯(lián)合的各個聯(lián)絡及通信,使得各方不需相互發(fā)送消息或結果。在中心的協(xié)調(diào)下,各方使用各自的私鑰因子完成聯(lián)合密鑰產(chǎn)生和數(shù)字簽名。在有中心的情況下,聯(lián)合簽名的各方與中心之間還可以具有相互獨有的加密密鑰對即可以對各方與中心之間的信息進行加密,也可以對該信息進行簽名以保證各方與中心之間信息的機密性和真實性。
一種典型的應用是一個股份公司a有四個股東,a公司的重要文件需要各股東方對該文件進行數(shù)字簽名,四個股東各自具有公司簽名私鑰的一個私鑰因子,只有四個股東聯(lián)合簽名才會完成公司的數(shù)字簽名。而服務中心可以是一個公眾服務機構,在該服務中心的配合下完成各方的聯(lián)合簽名工作,同時該服務中心具有a公司的簽名公鑰pa,用于鑒定公司簽名的有效性或合法性。
參照圖7,圖7是四方有中心聯(lián)合密鑰生成及數(shù)字簽名示意圖。
1、有中心四方密鑰產(chǎn)生流程
有中心的多方密鑰產(chǎn)生流程需在服務中心的指揮下完成,由于各聯(lián)合方地位平等,所以服務中心流程可以任意制定該流程中各方的先后次序。為方便起見,假定服務中心按照[1,2,3,4]的順序進行。其步驟為:
步驟1:服務中心產(chǎn)生一個隨機數(shù)d作為中心私鑰,并計算中心公鑰p=fd(g,d);并將p和fr()初值r0發(fā)送給第一方;
步驟2:第一方接收服務中心公鑰p,產(chǎn)生隨機數(shù)d1作為本方的私鑰因子,并計算p1=fd(g,d1),q1=fd(q0,d1-1),并將計算結果p1和q1發(fā)送給中心。
服務中心得到p1和q1。這樣,第一方具有私鑰因子d1和中心公鑰p,中心除具有中心私鑰d外,還具有第一方的公鑰因子p1和臨時變量q1。
服務中心將中心公鑰p和q1發(fā)給第二方,并刪除q1。
步驟3:第二方接收服務中心公鑰p和q1,產(chǎn)生隨機數(shù)d2作為本方的私鑰因子,并計算p2=fd(g,d2),q2=fd(q1,d2-1),并將計算結果p2和q2發(fā)送給服務中心。
服務中心得到p2和q2。這樣,第二方具有私鑰因子d2和中心公鑰p,服務中心除具有中心私鑰d外,還具有第二方的公鑰因子p2和臨時變量q2。
服務中心將中心公鑰p和q2發(fā)給第三方,并刪除q2。
步驟4:第三方接收服務中心公鑰p和q2,產(chǎn)生隨機數(shù)d3作為本方的私鑰因子,并計算p3=fd(g,d3),q3=fd(q2,d3-1),并將計算結果p3和q3發(fā)送給服務中心。
服務中心得到p3和q3。這樣,第三方具有私鑰因子d3和中心公鑰p,服務中心除具有中心私鑰d外,還具有第三方的公鑰因子p3和臨時變量q3。
服務中心將中心公鑰p和q3發(fā)送給第四方,并刪除q3。
步驟5:第四方接收服務中心公鑰p和q3,產(chǎn)生隨機數(shù)d4作為本方的私鑰因子,并計算p4=fd(g,d4),q4=fd(q3,d4-1),并將計算結果p4和q4發(fā)送給服務中心。
服務中心得到p4和q4。這樣,第四方具有私鑰因子d4和中心公鑰p,服務中心除具有中心私鑰d外,還具有第四方的公鑰因子p4和臨時變量q4。
服務中心計算該四方聯(lián)合驗簽公鑰pa=fp(q4)。中心保存四方聯(lián)合驗簽公鑰pa,并刪除q4。
通過以上5個步驟,四方各自秘密獲得簽名私鑰因子di,(i=1,2,3,4)和中心公鑰p,而服務中心獲得并保存了與該四方使用的通信私鑰d和與各方通信專用的公鑰pi,i=(1,2,3,4)及四方聯(lián)合簽名公鑰pa。
2、有中心四方數(shù)字簽名產(chǎn)生流程
有中心的多方數(shù)字簽名流程需在服務中心的指揮下完成,由于各聯(lián)合方地位平等,所以服務中心流程可以任意制定該流程中各方的先后次序。為方便起見,假定服務中心按照[1,2,3,4]的順序進行。其步驟為:
步驟1a:服務中心獲得待簽名文件m,使用該四方簽名公鑰pa、該四方的標識ida和文件m,計算密碼雜湊函數(shù)作用于消息m的輸出值e。
步驟1b:服務中心中心使用與第一方公鑰因子p1對r0進行加密,并將密文r”0發(fā)送給第一方。
步驟2a:第一方使用私鑰因子d1解密密文r”0,得到明文r0。
步驟2b:第一方產(chǎn)生隨機數(shù)組k1;計算r1=fr(r0,k1);
步驟2c:第一方使用中心公鑰p對r1進行加密,并將密文r’1發(fā)送給服務中心。
步驟3a:服務中心使用中心私鑰d對r’1進行解密,獲得r1明文,再使用第二方公鑰因子p2對r1進行再加密,并將密文r”1發(fā)送給第二方。
步驟3b:第二方使用私鑰因子d2解密密文r”1,得到明文r1。
步驟3c:第二方產(chǎn)生隨機數(shù)組k2;計算r2=fr(r1,k2);
步驟3d:第二方使用中心公鑰p對r2進行加密,并將密文r’2發(fā)送給服務中心。
步驟4a:服務中心使用中心私鑰d對r’2進行解密,獲得r2明文,再使用第三方公鑰因子p3對r2進行再加密,并將密文r”2發(fā)送給第三方。
步驟4b:第三方使用私鑰因子d3解密密文r”2,得到明文r2。
步驟4c:第三方產(chǎn)生隨機數(shù)組k3;計算r3=fr(r2,k3);
步驟4d:第三方使用中心公鑰p對r3進行加密,并將密文r’3發(fā)送給服務中心。
步驟5a:服務中心使用中心私鑰d對r’3進行解密,獲得r3明文,再使用第四方公鑰因子p4對r3進行再加密,并將密文r”3發(fā)送給第四方。
步驟5b:第四方使用私鑰因子d4解密密文r”3,得到明文r3。
步驟5c:第四方產(chǎn)生隨機數(shù)組k4;計算r4=fr(r3,k4);
步驟5d:第四方使用中心公鑰p對r4進行加密,并將密文r’4發(fā)送給服務中心。
步驟6:服務中心使用中心私鑰d對r’4進行解密,獲得r4明文,計算四方聯(lián)合數(shù)字簽名第一分量r=f1(r4,e)。
步驟7a:服務中心使用第四方公鑰因子p4對s5=(1,r)進行加密,并將密文s”5發(fā)送給第四方。
步驟7b:第四方使用私鑰因子d4解密密文s”5,得到明文s0。
步驟7c:第四方計算s4=fs(s5,k4,d4)。
步驟7d:第四方使用中心公鑰p對s4進行加密,并將密文s’4發(fā)送給服務中心。
步驟8a:服務中心使用中心私鑰d對s’4進行解密,獲得s4明文,再使用第三方公鑰因子p3對s4進行再加密,并將密文s”4發(fā)送給第三方。
步驟8b:第三方使用私鑰因子d3解密密文s”4,得到明文s4。
步驟8c:第三方計算s3=fs(s4,k4,d3)。
步驟8d:第三方使用中心公鑰p對s3進行加密,并將密文s’3發(fā)送給服務中心。
步驟9a:服務中心使用中心私鑰d對s’3進行解密,獲得s3明文,再使用第二方公鑰因子p2對s3進行再加密,并將密文s”3發(fā)送給第二方。
步驟9b:第二方使用私鑰因子d2解密密文s’3,得到明文s3。
步驟9c:第二方計算s2=fs(s3,k2,d2)。
步驟9d:第二方使用中心公鑰p對s2進行加密,并將密文s’2發(fā)送給服務中心。
步驟10a:服務中心使用中心私鑰d對s’2進行解密,獲得s2明文,再使用第一方公鑰因子p1對s2進行再加密,并將密文s”2發(fā)送給第一方。
步驟10b:第一方使用私鑰因子d1解密密文s”2,得到明文s2。
步驟10c:第一方計算s1=fs(s2,k1,d1)。
步驟10d:第一方使用中心公鑰p對s1進行加密,并將密文s’1發(fā)送給服務中心。
步驟11:服務中心使用中心私鑰d對s’1進行解密,獲得s1明文。計算四方聯(lián)合數(shù)字簽名第二分量s=f2(s1,r)。
通過以上步驟,在服務中心指揮下,四方聯(lián)合的數(shù)字簽名sign=(r,s)完成,服務中心還可以使用該四方聯(lián)合驗簽公鑰pa對簽名值(r,s)進行驗證。
上述通信過程均使用了非對稱密碼算法對通信內(nèi)容進行了加密,其優(yōu)點是,由于使用了公鑰加密,只有具有私鑰的一方才可以正確解密并獲得正確明文。
以上各實施方式的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法及系統(tǒng),將數(shù)字簽名擴展到由多個獨立個體組成的聯(lián)合體的情況,并在各方聯(lián)合完成數(shù)字簽名運算的情況下,才可以實現(xiàn)該聯(lián)合體的數(shù)字簽名。在聯(lián)合簽名的過程中,每個個體使用公鑰加密或私鑰簽名的手段,進一步保證信息傳遞的私密性或真實性,有效防止信息傳遞過程中的信息泄露或信息偽造等攻擊。
以上各實施例的多方聯(lián)合密鑰產(chǎn)生和數(shù)字簽名方法及系統(tǒng),其顯著的效果是單個或多個簽名單元的信息泄露并不會造成最終用戶私鑰的泄露。即只要不是所有的簽名單元均被攻破,攻擊者并不能達到使用用戶私鑰簽名的目的。而相對集中的簽名服務中心,由于設施到位,防控措施有效,可以更好地保護用戶私鑰因子。
本發(fā)明的主要特點為:
多方各自產(chǎn)生并保管自己的私鑰因子di,并計算各自的公鑰因子pi;其中私鑰因子除進行聯(lián)合數(shù)字簽名外,還可以出于安全的目的進行本方的獨立的數(shù)字簽名或數(shù)據(jù)加密,并且具有其公鑰因子的其它方可以進行簽名驗證或數(shù)據(jù)解密。
數(shù)字簽名時需由多方共同聯(lián)合進行運算,各自按照順序使用自己秘密保存的私鑰di進行運算,最終得到多方聯(lián)合的數(shù)字簽名值sign(m)。數(shù)字簽名sign(m)由相互獨立的多方共同才可以完成,缺失任何一方都無法完成數(shù)字簽名。多方各自秘密保存獨立的私鑰因子di,多方各自使用獨立的私鑰因子di進行運算,相互配合最終結果完成多方聯(lián)合數(shù)字簽名sign(m)。
私鑰d可以表述為私鑰因子的函數(shù),即d=g(d1,d2,…dm)。任何一方、多方或網(wǎng)絡監(jiān)聽者均不能獲取完整私鑰d。任何一方的私鑰因子di,網(wǎng)絡監(jiān)聽者及其它方均不能獲取。
以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應當指出的是,對于本領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權利要求為準。