本發(fā)明涉及基于sm2公鑰密碼算法和密鑰分割存儲(chǔ)機(jī)制的密鑰分量托管方法和系統(tǒng),屬于信息安全領(lǐng)域。
背景技術(shù):
在互聯(lián)網(wǎng)和云計(jì)算環(huán)境下,出現(xiàn)了大量與網(wǎng)絡(luò)相關(guān)的應(yīng)用,如網(wǎng)上銀行、網(wǎng)上支付、網(wǎng)上購(gòu)物和互聯(lián)網(wǎng)醫(yī)療等,需要進(jìn)行網(wǎng)上用戶(hù)身份認(rèn)證、網(wǎng)上操作確認(rèn)和用戶(hù)隱私保護(hù),以保證網(wǎng)絡(luò)應(yīng)用的安全性。解決這種安全需求的最佳手段是使用公鑰密碼技術(shù)來(lái)實(shí)現(xiàn)數(shù)字簽名和公鑰加密。在使用公鑰密碼技術(shù)時(shí),保證所使用私鑰的安全則是關(guān)鍵所在。在通常情況下,為了保證私鑰的存儲(chǔ)安全和使用安全,用于簽名和解密的私鑰都要求保存在密碼設(shè)備內(nèi),相應(yīng)的密碼運(yùn)算也在密碼設(shè)備內(nèi)執(zhí)行。所采用的密碼設(shè)備在服務(wù)器端通常為密碼機(jī),在客戶(hù)端為帶cpu的usbkey和ic卡等。但在網(wǎng)絡(luò)環(huán)境和手機(jī)移動(dòng)終端等環(huán)境下,使用這些密碼設(shè)備來(lái)保存密鑰和執(zhí)行密碼運(yùn)算就很不方便,因而出現(xiàn)了將密鑰保存在手機(jī)文件中并在手機(jī)上執(zhí)行密碼運(yùn)算的應(yīng)用需求。這種軟環(huán)境給密鑰的存儲(chǔ)安全和使用安全帶來(lái)很大隱患。為了提高密鑰存儲(chǔ)和密碼運(yùn)算的安全性,可以采用密鑰分割存儲(chǔ)和多方聯(lián)合計(jì)算的方式,將用戶(hù)的私鑰分割為幾個(gè)分量,各個(gè)私鑰分量分散保存在不同的密鑰托管系統(tǒng)中,在需要使用私鑰對(duì)一個(gè)消息作數(shù)字簽名時(shí),由多個(gè)密鑰托管系統(tǒng)聯(lián)合完成簽名計(jì)算,最后形成的簽名可使用用戶(hù)端的公鑰進(jìn)行驗(yàn)證。同樣地,在需要對(duì)用戶(hù)端公鑰加密后的密文進(jìn)行解密時(shí),由多個(gè)密鑰托管系統(tǒng)聯(lián)合完成對(duì)密文的解密計(jì)算,實(shí)現(xiàn)對(duì)加密消息的完整解密。針對(duì)國(guó)密sm2公鑰密碼算法,已經(jīng)有了相應(yīng)的密鑰分割方法和聯(lián)合簽名算法(參見(jiàn)申請(qǐng)?zhí)枮?01710157604.0的專(zhuān)利),現(xiàn)在的需求是要建立安全高效的密鑰托管系統(tǒng),為廣大用戶(hù)提供私鑰分量的托管服務(wù)。當(dāng)需要密鑰分量托管的用戶(hù)量很大(例如達(dá)到億級(jí)或十億級(jí)水平)時(shí),密鑰托管系統(tǒng)必須耗費(fèi)大量的存儲(chǔ)資源和密碼設(shè)備來(lái)保存用戶(hù)的密鑰和與用戶(hù)相關(guān)的信息,必將大大降低系統(tǒng)的運(yùn)行效率和服務(wù)水平。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對(duì)密鑰分割與聯(lián)合計(jì)算需要對(duì)大量私鑰分量進(jìn)行托管的應(yīng)用需求,提出一種基于標(biāo)識(shí)的私鑰分量托管方法,并由此構(gòu)造一種相應(yīng)的密鑰分量托管系統(tǒng)(partialkeyescrow,簡(jiǎn)稱(chēng)pke),解決大用戶(hù)量場(chǎng)景下的用戶(hù)私鑰分量托管問(wèn)題。采用的技術(shù)方案是,建立n(n≥1)個(gè)密鑰分量托管系統(tǒng),在每個(gè)密鑰分量托管系統(tǒng)中生成一個(gè)主密鑰,通過(guò)一種標(biāo)識(shí)映射算法,在用戶(hù)密鑰生成階段,密鑰分量托管系統(tǒng)采用系統(tǒng)主密鑰對(duì)用戶(hù)提供的識(shí)別信息進(jìn)行一種分散映射,生成對(duì)應(yīng)的私鑰分量,但不實(shí)際保存這個(gè)私鑰分量;在用戶(hù)需使用自已的私鑰分量時(shí),按同樣的算法恢復(fù)用戶(hù)的私鑰分量后,再進(jìn)行相關(guān)密碼運(yùn)算。這里所指的用戶(hù)識(shí)別信息可以是用戶(hù)標(biāo)識(shí)、用戶(hù)設(shè)置的pin碼和用戶(hù)端設(shè)備信息的一種組合或疊加。采用這種方案的有益效果是密鑰分量托管系統(tǒng)不需要數(shù)據(jù)庫(kù)軟件系統(tǒng)和大量的密鑰存儲(chǔ)設(shè)備,對(duì)管理的用戶(hù)數(shù)量沒(méi)有限制,可以大大提高系統(tǒng)的運(yùn)行效率和服務(wù)水平,并且安全性沒(méi)有任何降低。
本發(fā)明所述基于sm2算法的密鑰分量托管方法和系統(tǒng)所依托的密碼算法為國(guó)密sm2公鑰密碼算法和sm3雜湊算法,與sm2相關(guān)的橢圓曲線(xiàn)參數(shù)按國(guó)密sm2算法標(biāo)準(zhǔn)設(shè)置。有限域上的橢圓曲線(xiàn)記為e(fq),其基點(diǎn)記為g,g的階記為n,sm3雜湊函數(shù)記作h(x)。
本發(fā)明所述基于sm2算法的密鑰分量托管方法和系統(tǒng)涉及到的實(shí)體包括用戶(hù)和n(n≥1)個(gè)密鑰分量托管系統(tǒng),n個(gè)密鑰分量托管系統(tǒng)分別記為pke[1],pke[2],…,pke[n]。在系統(tǒng)運(yùn)行初期,密鑰分量托管系統(tǒng)pke[i]隨機(jī)生成1個(gè)系統(tǒng)主密鑰mk[i]和1對(duì)sm2非對(duì)稱(chēng)密鑰,系統(tǒng)主密鑰mk[i]也可以用非對(duì)稱(chēng)密鑰的私鑰充當(dāng)。每個(gè)用戶(hù)面對(duì)n個(gè)密鑰分量托管系統(tǒng),針對(duì)每個(gè)密鑰分量托管系統(tǒng),用戶(hù)需要提供不同的用戶(hù)識(shí)別信息,一個(gè)用戶(hù)的n個(gè)識(shí)別信息分別記為uid[1],uid[2],…,uid[n]。
所述密鑰分量托管系統(tǒng)pke[i]使用一個(gè)密鑰分量映射生成函數(shù)g(x,y),對(duì)于每個(gè)用戶(hù),通過(guò)對(duì)系統(tǒng)主密鑰mk[i]和用戶(hù)識(shí)別信息uid[i]的映射可生成一個(gè)私鑰分量di=g(mk[i],uid[i]),且di∈[1,n-1]。
用戶(hù)密鑰分量托管的具體實(shí)現(xiàn)過(guò)程分為密鑰生成和密鑰使用兩個(gè)階段,而密鑰生成又包含簽名密鑰生成和加密密鑰生成,密鑰使用又包含聯(lián)合簽名和聯(lián)合解密。
一、簽名密鑰生成
簽名密鑰生成由所述用戶(hù)和所述n個(gè)密鑰分量托管系統(tǒng)協(xié)同完成,生成步驟如下:
第1步:所述用戶(hù)以自已的標(biāo)識(shí)、輸入的pin碼和硬件設(shè)備信息等構(gòu)造n個(gè)用戶(hù)識(shí)別信息uid[1],uid[2],…,uid[n],再設(shè)置初始值qn+1=g。
第2步:對(duì)于i=n,n-1,…,1,所述用戶(hù)依次與pke[i]交互執(zhí)行:
(2a)所述用戶(hù)以pke[i]的公鑰對(duì)uid[i]加密生成一個(gè)密文c[i],發(fā)送c[i]和qi+1到pke[i]。
(2b)所述pke[i]使用私鑰對(duì)c[i]解密獲取所述用戶(hù)uid[i],計(jì)算di=g(mk[i],uid[i]),qi=(di)-1qi+1,回送qi到用戶(hù)端,將di作為用戶(hù)的第i個(gè)簽名私鑰分量,但不需保存。
(2c)所述用戶(hù)保存qi。
第3步:所述用戶(hù)隨機(jī)選取d0∈[1,n-1],計(jì)算q0=(d0)-1q1,q=q0-g,將d0作為用戶(hù)端的簽名私鑰分量保存,將q作為用戶(hù)的實(shí)際簽名公鑰保存,同時(shí)保存q0。
通過(guò)上述步驟生成的用戶(hù)實(shí)際簽名私鑰d=(d0d1d2…dn)-1-1,實(shí)際簽名公鑰q=dg。實(shí)際簽名私鑰在生成過(guò)程中并未出現(xiàn),且對(duì)用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)都不可知。用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)對(duì)各自生成的簽名私鑰分量具有完全自主權(quán),其他用戶(hù)或任何第三方都不能獲取其簽名私鑰分量的信息。
二、加密密鑰生成
所述加密密鑰主要用于對(duì)消息作公鑰加密和私鑰解密,由所述用戶(hù)和所述n個(gè)密鑰分量托管系統(tǒng)協(xié)同完成,生成步驟如下:
第1步:所述用戶(hù)以自已的標(biāo)識(shí)、輸入的pin碼和硬件設(shè)備信息等構(gòu)造n個(gè)用戶(hù)識(shí)別信息uid’[1],uid’[2],…,uid’[n],再設(shè)置初始值q’n+1=g。
第2步:所述用戶(hù)設(shè)置初始值q’n+1=g,對(duì)于i=n,n-1,…,1,依次與pke[i]交互執(zhí)行:
(2a)所述用戶(hù)以pke[i]的公鑰對(duì)uid’[i]加密生成一個(gè)密文c[i],發(fā)送c[i]和q’i+1到pke[i]。
(2b)所述pke[i]使用私鑰對(duì)c[i]解密獲取所述用戶(hù)uid’[i],計(jì)算d’i=g(mk[i],uid’[i]),q’i=d’iq’i+1,回送q’i到用戶(hù)端,將d’i作為用戶(hù)的第i個(gè)加密私鑰分量,但不需保存。
第3步:所述用戶(hù)隨機(jī)選取d’0∈[1,n-1],計(jì)算q’0=d’0q1,q’=q’0,將d’0作為用戶(hù)端的加密私鑰分量保存,將q’作為用戶(hù)的實(shí)際加密公鑰保存。
通過(guò)上述步驟生成的用戶(hù)實(shí)際加密私鑰d’=d’0d’1d’2…d’n,實(shí)際加密公鑰q’=d’g。實(shí)際加密私鑰在生成過(guò)程中并未出現(xiàn),且對(duì)用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)都不可知。用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)對(duì)各自生成的私鑰分量具有完全自主權(quán),其他用戶(hù)不能獲取其私鑰分量的信息。
三、聯(lián)合簽名
本發(fā)明所述聯(lián)合簽名是指用戶(hù)需要對(duì)消息作數(shù)字簽名時(shí),由用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)聯(lián)合按序完成對(duì)消息的簽名,且簽名結(jié)果為符合sm2標(biāo)準(zhǔn)的普通簽名,簽名接收方可以使用用戶(hù)的實(shí)際簽名公鑰進(jìn)行驗(yàn)證。
所述簽名方法涉及到用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)。所述用戶(hù)具有簽名私鑰分量d0,所述密鑰分量托管系統(tǒng)pke[i]具有簽名私鑰分量di,所述用戶(hù)的實(shí)際簽名公鑰為q=((d0d1…dn)-1–1)g。
設(shè)待簽名的消息為m,e=h(z||m)是對(duì)消息m的摘要值,其中z是與用戶(hù)公鑰和用戶(hù)標(biāo)識(shí)有關(guān)的信息。首先由用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)按次序聯(lián)合生成一對(duì)隨機(jī)密鑰對(duì),再按相反的次序聯(lián)合完成對(duì)摘要值e的sm2簽名。所述多方聯(lián)合簽名步驟如下。
第1步:所述用戶(hù)以自已的標(biāo)識(shí)、輸入的pin碼和硬件設(shè)備信息等重新構(gòu)造n個(gè)用戶(hù)的識(shí)別信息uid[1],uid[2],…,uid[n],再選擇隨機(jī)數(shù)k0,計(jì)算r0=k0q0。
第2步:對(duì)于i=1,2,…,n,所述用戶(hù)依次與pke[i]交互執(zhí)行:
(2a)用戶(hù)發(fā)送ri-1和qi到pke[i];
(2b)pke[i]隨機(jī)選取ki∈[1,n-1],計(jì)算ri=ri-1+kiqi,回送ri到用戶(hù);
第3步:設(shè)rn=(x1,y1),所述用戶(hù)計(jì)算r=(e+x1)(modn),并記sn+1=r。
第4步:對(duì)于i=n,n-1,…,1,所述用戶(hù)依次與pke[i]交互執(zhí)行:
(4a)所述用戶(hù)以所述pke[i]的公鑰對(duì)uid[i]|ri加密生成一個(gè)密文c[i],發(fā)送c[i]和si+1到pke[i];
(4b)所述pke[i]對(duì)c[i]作私鑰解密獲取uid[i]和ri’,驗(yàn)證ri’=ri是否成立,若成立,再計(jì)算簽名私鑰分量di=g(mk[i],uid[i])和部分簽名si=ki+si+1di(modn),回送所述部分簽名si到用戶(hù)端;
(4c)所述用戶(hù)在收到所述pke[i]的部分簽名si后,計(jì)算r’=ri-1+siqi–rg,檢驗(yàn)r’=rn是否成立,若成立,則接受pke[i]的部分簽名si。
第5步:所述用戶(hù)計(jì)算s=k0+s1d0–r(modn),生成最終簽名(r,s)。
按此步驟生成的簽名(r,s)可以使用公鑰q按sm2簽名的驗(yàn)證算法進(jìn)行驗(yàn)證,具體的證明過(guò)程可參見(jiàn)申請(qǐng)?zhí)枮?01710157604.0的專(zhuān)利。
四、聯(lián)合解密
當(dāng)用戶(hù)需要對(duì)使用用戶(hù)的加密公鑰加密的密文解密時(shí),可由用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)聯(lián)合完成對(duì)密文的解密。
所述解密方法涉及到用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)。用戶(hù)具有加密私鑰分量d’0,密鑰分量托管系統(tǒng)pke[i]具有加密私鑰分量d’i,用戶(hù)的實(shí)際加密私鑰為d’=d’0d’1…d’n(modn),實(shí)際加密公鑰為q’=(d’0d’1…d’n)g。
設(shè)待解密的密文為c1||c2||c3,其中c1是一個(gè)橢圓曲線(xiàn)點(diǎn)。按照sm2解密算法,用戶(hù)需要首先計(jì)算d=d’c1,然后再進(jìn)行其它解密步驟。由用戶(hù)和n個(gè)密鑰分量托管系統(tǒng)聯(lián)合完成解密的關(guān)鍵點(diǎn)就是聯(lián)合計(jì)算d=d’c1。所述多方聯(lián)合解密方案的步驟如下。
第1步:所述用戶(hù)以自已的標(biāo)識(shí)、輸入的pin碼和硬件設(shè)備信息等重新構(gòu)造用戶(hù)的識(shí)別信息uid’[1],uid’[2],…,uid’[n],再隨機(jī)選取k0∈[1,n-1],且k0≠(d’0)-1,計(jì)算dn+1=k0c1。
第2步:對(duì)于i=n,n-1,…,1,所述用戶(hù)依次與所述pke[i]交互執(zhí)行:
(2a)所述用戶(hù)從所述pke[i]獲取一個(gè)隨機(jī)數(shù)r[i]。
(2b)所述用戶(hù)以所述pke[i]的公鑰對(duì)uid’[i]||r[i]加密生成一個(gè)密文c[i],發(fā)送di+1和c[i]到pke[i]。
(2c)所述pke[i]對(duì)c[i]作私鑰解密獲取uid’[i]和r’[i],驗(yàn)證r’[i]=r[i]是否成立,若成立,計(jì)算d’i=g(mk[i],uid’[i])(modn)和di=d’idi+1,回送di到用戶(hù)端。
第3步:所述用戶(hù)計(jì)算d=(k0)-1d’0d1。
第4步:由于(k0)-1d’0d1=(k0)-1(d’0d’1…d’n)k0c1=d’c1,所以通過(guò)聯(lián)合計(jì)算得出的d正是私鑰解密所需要的計(jì)算結(jié)果,再按sm2解密算法的后續(xù)步驟即可解出明文。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明所述密鑰分量托管系統(tǒng)與用戶(hù)端關(guān)系結(jié)構(gòu)圖。
圖2為本發(fā)明所述密鑰分量托管系統(tǒng)內(nèi)部結(jié)構(gòu)圖。
圖3為本發(fā)明所述簽名密鑰生成流程圖。
圖4為本發(fā)明所述加密密鑰生成流程圖。
圖5為本發(fā)明所述聯(lián)合簽名流程圖。
圖6為本發(fā)明所述聯(lián)合解密流程圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明提出了一種基于sm2算法的密鑰分量托管方法和系統(tǒng),下面根據(jù)附圖詳細(xì)說(shuō)明本發(fā)明的具體實(shí)施方式。
本發(fā)明所述基于sm2算法的密鑰分量托管方法和系統(tǒng)所依托的密碼算法為國(guó)密sm2公鑰密碼算法和sm3雜湊算法,與sm2相關(guān)的橢圓曲線(xiàn)參數(shù)按國(guó)密sm2算法標(biāo)準(zhǔn)設(shè)置。有限域上的橢圓曲線(xiàn)記為e(fq),其基點(diǎn)記為g,g的階記為n,sm3雜湊函數(shù)記作h(x)。
圖1所示為基于sm2算法的密鑰分量托管系統(tǒng)的整體結(jié)構(gòu)圖。整個(gè)系統(tǒng)由n(n≥1)個(gè)密鑰分量托管系統(tǒng)和眾多用戶(hù)端組成,用戶(hù)端個(gè)數(shù)不受限制。每個(gè)用戶(hù)端面對(duì)n個(gè)密鑰托管系統(tǒng),用戶(hù)端私鑰在生成時(shí)即被分割成n+1個(gè)分量,分別由用戶(hù)端和n個(gè)密鑰分量托管系統(tǒng)管理。密鑰分量托管系統(tǒng)所管理的用戶(hù)端私鑰分量并不實(shí)際保存,而是通過(guò)一種映射算法,由密鑰分量托管系統(tǒng)的系統(tǒng)主密鑰和用戶(hù)端的識(shí)別信息計(jì)算得出,在密鑰生成階段確定,在密鑰使用階段重新計(jì)算后恢復(fù),使用完成后自動(dòng)銷(xiāo)毀。這種密鑰分量托管方式的有益效果是不需要實(shí)際存儲(chǔ)用戶(hù)端私鑰分量,節(jié)省大量的存儲(chǔ)資源和密碼設(shè)備,對(duì)用戶(hù)端數(shù)量沒(méi)有限制,大大提高系統(tǒng)的運(yùn)行效率和服務(wù)水平。
圖2所示是密鑰分量托管系統(tǒng)的內(nèi)部結(jié)構(gòu)。所述密鑰分量托管系統(tǒng)由服務(wù)單元、密鑰生成單元、簽名運(yùn)算單元、解密運(yùn)算單元構(gòu)成。服務(wù)單元接受用戶(hù)端請(qǐng)求,與用戶(hù)端之間進(jìn)行安全通信,對(duì)用戶(hù)端身份進(jìn)行確認(rèn),為用戶(hù)端提供密鑰生成、聯(lián)合簽名和聯(lián)合解密服務(wù)。密鑰生成單元采用系統(tǒng)主密鑰對(duì)用戶(hù)端提供的識(shí)別信息進(jìn)行一種分散映射,在用戶(hù)端密鑰生成階段和用戶(hù)端密鑰使用階段,為用戶(hù)端生成或恢復(fù)私鑰分量。簽名運(yùn)算單元執(zhí)行聯(lián)合簽名運(yùn)算,以用戶(hù)端的私鑰分量對(duì)所述消息摘要值進(jìn)行部分簽名運(yùn)算。解密運(yùn)算單元執(zhí)行聯(lián)合解密運(yùn)算,以用戶(hù)端的私鑰分量對(duì)所述數(shù)據(jù)進(jìn)行部分解密運(yùn)算。
為幫助理解本發(fā)明的實(shí)質(zhì)內(nèi)容,圖3到圖6給出了具體的密鑰生成和密鑰使用的實(shí)施步驟,并給出一個(gè)具體的映射函數(shù)g(mk,uid)=h(mk||uid)(modn),其中h(x)為sm3雜湊函數(shù)。
圖3所示為本發(fā)明所述簽名密鑰生成流程,包括以下幾個(gè)步驟:
步驟(1):所述用戶(hù)端設(shè)置用戶(hù)端識(shí)別信息uid[i],再設(shè)置初始公鑰參數(shù)qn+1=g。
步驟(2):所述用戶(hù)端以pke[n]的公鑰對(duì)uid[n]加密,發(fā)送加密的uid[n]和qn+1到pke[n]。pke[n]使用私鑰解密獲取所述用戶(hù)端uid[n],計(jì)算dn=h(mk[n]||uid[n])(modn),qn=(dn)-1qn+1,回送qn到用戶(hù)端,將dn作為用戶(hù)端的第n個(gè)簽名私鑰分量,但不需要保存。
步驟(3):對(duì)于i=n-1,…,2,所述用戶(hù)端以pke[i]的公鑰對(duì)uid[i]加密,發(fā)送加密的uid[i]和qi+1到pke[i]。pke[i]使用私鑰解密獲取所述用戶(hù)端uid[i],計(jì)算di=h(mk[i]||uid[i])(modn),qi=(di)-1qi+1,回送qi到用戶(hù)端,將di作為用戶(hù)端的第i個(gè)簽名私鑰分量,但不需要保存。
步驟(4):所述用戶(hù)端以pke[1]的公鑰對(duì)uid[1]加密,發(fā)送加密的uid[1]和q2到pke[1]。pke[1]使用私鑰解密獲取所述用戶(hù)端uid[1],計(jì)算d1=h(mk[1]||uid[1])(modn),q1=(d1)-1q2,回送q1到用戶(hù)端,將d1作為用戶(hù)端的第1個(gè)簽名私鑰分量,但不需要保存。
步驟(5):所述用戶(hù)端隨機(jī)選取d0∈[1,n-1],計(jì)算q0=(d0)-1q1,q=q0-g,將d0作為用戶(hù)端的簽名私鑰分量保存,將q作為用戶(hù)端的實(shí)際簽名公鑰保存,同時(shí)保存{q0,q1,…,qn}。
圖4所示為本發(fā)明所述加密密鑰生成流程,包括以下幾個(gè)步驟:
步驟(6):所述用戶(hù)端以自已的標(biāo)識(shí)、輸入的pin碼和硬件設(shè)備信息等構(gòu)造一組用戶(hù)端識(shí)別信息,并將所述用戶(hù)端識(shí)別信息記為uid’[i],再設(shè)置初始值q’n+1=g。
步驟(7):所述用戶(hù)端以pke[n]的公鑰對(duì)uid’[n]加密,發(fā)送加密的uid’[n]和q’n+1到pke[n]。pke[n]使用私鑰解密獲取所述用戶(hù)端uid’[n],計(jì)算d’n=h(mk[n]||uid’[n])(modn),q’n=d’nqn+1,回送q’n到用戶(hù)端,將d’n作為用戶(hù)端的第n個(gè)加密私鑰分量,但不需要保存。
步驟(8):對(duì)于i=n-1,…,2,所述用戶(hù)端以pke[i]的公鑰對(duì)uid’[i]加密,發(fā)送加密的uid’[i]和q’i+1到pke[i]。pke[i]使用私鑰解密獲取所述用戶(hù)端uid’[i],計(jì)算d’i=h(mk[i]||uid’[i])(modn),q’i=d’iqi+1,回送q’i到用戶(hù)端,將d’i作為用戶(hù)端的第i個(gè)加密私鑰分量,但不需要保存。
步驟(9):所述用戶(hù)端以pke[1]的公鑰對(duì)uid’[1]加密,發(fā)送加密的uid’[1]和q’2到pke[1]。pke[1]使用私鑰解密獲取所述用戶(hù)端uid’[1],計(jì)算d’1=h(mk[1]||uid’[1])(modn),q’1=d’1q2,回送q’1到用戶(hù)端,將d’1作為用戶(hù)的第1個(gè)加密私鑰分量,但不需要保存。
步驟(10):所述用戶(hù)端隨機(jī)選取d’0∈[1,n-1],計(jì)算q’0=d’0q1,q’=q’0,將d’0作為用戶(hù)端的加密私鑰分量保存,將q’作為用戶(hù)端的實(shí)際加密公鑰保存。
圖5所示為本發(fā)明所述聯(lián)合簽名流程,包括以下幾個(gè)步驟:
步驟(11):所述用戶(hù)端以自已的標(biāo)識(shí)、輸入的pin碼和硬件設(shè)備信息等重新構(gòu)造用戶(hù)端的識(shí)別信息uid[i],再隨機(jī)選取k0∈[1,n-1],計(jì)算r0=k0q0。設(shè)待簽名的消息為m,所述用戶(hù)端計(jì)算摘要值e=h(z||m),其中z為所述用戶(hù)端的標(biāo)識(shí)信息和公鑰信息。
步驟(12):所述用戶(hù)端發(fā)送r0和q1到pke[1],pke[1]隨機(jī)選取k1∈[1,n-1],計(jì)算r1=r0+k1q1,回送r1到用戶(hù)端。
步驟(13):對(duì)于i=2,…,n-1,所述用戶(hù)端發(fā)送ri-1和qi到pke[i],pke[i]隨機(jī)選取ki∈[1,n-1],計(jì)算ri=ri-1+kiqi,回送ri到用戶(hù)端。
步驟(14):所述用戶(hù)端發(fā)送rn-1和qn到pke[n],pke[n]隨機(jī)選取kn∈[1,n-1],計(jì)算rn=rn-1+knqn,回送rn到用戶(hù)端。
步驟(15):設(shè)rn=(x1,y1),所述用戶(hù)端計(jì)算r=(e+x1)(modn)。
步驟(16):所述用戶(hù)端以所述pke[n]的公鑰對(duì)uid[n]||rn加密,連同r發(fā)送到pke[n]。所述pke[n]用私鑰解密獲取uid[n]和ri’,驗(yàn)證r’n=rn是否成立,若成立,再計(jì)算簽名私鑰分量dn=h(mk[n]||uid[n])(modn)和部分簽名sn=kn+rdi(modn),回送所述部分簽名sn到用戶(hù)端。
步驟(17):所述用戶(hù)端在收到所述pke[n]的部分簽名sn后,計(jì)算r’=rn-1+snqn–rg,檢驗(yàn)r’=rn是否成立,若成立,則接受所述pke[n]的部分簽名sn。
步驟(18):對(duì)于i=n-1,…,2,所述用戶(hù)端以所述pke[i]的公鑰對(duì)uid[i]||ri加密,連同si+1發(fā)送到pke[i]。所述pke[i]用私鑰解密獲取uid[i]和ri’,驗(yàn)證ri’=ri是否成立,若成立,再計(jì)算簽名私鑰分量di=h(mk[i]||uid[i])(modn)和部分簽名si=ki+si+1di(modn),回送所述部分簽名si到用戶(hù)端。所述用戶(hù)端在收到所述pke[i]的部分簽名si后,計(jì)算r’=ri-1+siqi–rg,檢驗(yàn)r’=rn是否成立,若成立,則接受pke[i]的部分簽名si。
步驟(19):所述用戶(hù)端以所述pke[1]的公鑰對(duì)uid[1]||r1加密,連同s2發(fā)送到pke[1]。所述pke[1]用私鑰解密獲取uid[1]和r1’,驗(yàn)證r1’=r1是否成立,若成立,再計(jì)算簽名私鑰分量d1=h(mk[1]||uid[1])(modn)和部分簽名s1=k1+s2d1(modn),回送所述部分簽名s1到用戶(hù)端。
步驟(20):所述用戶(hù)端在收到所述pke[1]的部分簽名s1后,計(jì)算r’=r0+s1qi–rg,檢驗(yàn)r’=rn是否成立,若成立,則接受pke[1]的部分簽名s1。所述用戶(hù)端再計(jì)算s=k0+s1d0–r(modn),生成最終簽名(r,s)。
圖6所示為本發(fā)明所述聯(lián)合解密流程,包括以下幾個(gè)步驟:
步驟(21):所述用戶(hù)端以自已的標(biāo)識(shí)、輸入的pin碼和硬件設(shè)備信息等重新構(gòu)造用戶(hù)端的識(shí)別信息uid’[i],再隨機(jī)選取k0∈[1,n-1],且k0≠(d’0)-1,計(jì)算dn+1=k0c1。
步驟(22):所述用戶(hù)端以所述pke[n]的公鑰對(duì)uid’[n]加密,連同dn+1發(fā)送到pke[n]。所述pke[n]用私鑰解密獲取uid’[n],計(jì)算d’n=h(mk[n]||uid’[n])(modn)和dn=d’ndn+1,回送dn到用戶(hù)端。
步驟(23):對(duì)于i=n-1,…,2,所述用戶(hù)端以所述pke[i]的公鑰對(duì)uid’[i]加密,連同di+1發(fā)送到pke[i]。所述pke[i]用私鑰解密獲取uid’[i],計(jì)算d’i=h(mk[i]||uid’[i])(modn)和di=d’idi+1,回送di到用戶(hù)端。
步驟(24):所述用戶(hù)端以所述pke[1]的公鑰對(duì)uid’[1]加密,連同d2發(fā)送到pke[1]。所述pke[1]用私鑰解密獲取uid’[1],計(jì)算d’1=h(mk[1]||uid’[1])(modn)和d1=d’1d2,回送d1到用戶(hù)端。
步驟(25):所述用戶(hù)端計(jì)算d=(k0)-1d’0d1。
步驟(26):所述用戶(hù)端按sm2解密算法的后續(xù)步驟解出明文。
上述實(shí)施例僅從原理上描述了本發(fā)明的內(nèi)容,應(yīng)理解,此處給出的實(shí)施例和映射函數(shù)僅用于說(shuō)明本發(fā)明的基本思想,并不能限制本發(fā)明所具有的一般性。任何對(duì)本發(fā)明實(shí)質(zhì)內(nèi)容所作的數(shù)學(xué)上的變形和修飾都包含在本發(fā)明專(zhuān)利的保護(hù)范圍。