本發(fā)明屬于信息安全技術(shù)領(lǐng)域,具體內(nèi)容涉及一種基于信息泄露的公鑰密碼系統(tǒng)的私鑰獲取方法。
背景技術(shù):
隨著計算機技術(shù)和信息安全技術(shù)的推廣,企業(yè)界信息安全意識的逐步加強,為了滿足日益增長的用戶需求,密碼設(shè)備的密碼運算速度被一再的提升。在保證高性能密碼運算的前提下,每臺密碼設(shè)備的安全性也至關(guān)重要。
許多密碼系統(tǒng)和協(xié)議(如Diffie-Hellman密鑰交換協(xié)議、ELGamal加密系統(tǒng)、ELGamal數(shù)字簽名系統(tǒng)、DSA簽名系統(tǒng)等)的安全性都是基于離散對數(shù)問題的困難性。這些加密系統(tǒng)和協(xié)議被有效的應(yīng)用于互聯(lián)網(wǎng)(保證電子郵件,家庭銀行業(yè)務(wù)以及網(wǎng)頁瀏覽器的安全性)、金融服務(wù)業(yè)(電子現(xiàn)金,信用卡交易,即時提款等服務(wù))以及無線通信(尋呼機,手機)中。目前存在的解決經(jīng)典離散對數(shù)問題的算法有baby-step giant-step method、Pollard’s rho method、index calculus method以及Pollard’s kangaroos method。其中index calculus method是目前最快的算法,當(dāng)群元素的光滑密度適當(dāng)?shù)臅r候其時間復(fù)雜度是亞指數(shù),否則仍是其中n是群的階。其他幾種算法平均情況下的時間復(fù)雜度均是隨著密碼學(xué)的發(fā)展,出現(xiàn)了一些特殊的離散對數(shù)問題用于解決實際中的密碼學(xué)問題,比如在某個區(qū)間上的離散對數(shù)問題。該問題的出現(xiàn)是由于在實際應(yīng)用中,如果沒有進行有效的保護措施,敵手可能通過某些側(cè)信道攻擊的手段獲取關(guān)于離散對數(shù)的某些比特位信息,從而推斷出待求解離散對數(shù)問題的指數(shù)所在的區(qū)間范圍,之后敵手在進行離散對數(shù)求解時只需要在該區(qū)間范圍內(nèi)求解即可。因此關(guān)注區(qū)間上離散對數(shù)問題的求解,在實際密碼系統(tǒng)安全中有重要的用途。
Pollard's kangaroos method(即袋鼠算法)是求解該問題的一個經(jīng)典算法,而此時本發(fā)明求得即對應(yīng)于相應(yīng)密碼系統(tǒng)、協(xié)議的私鑰或者隨機數(shù),實現(xiàn)了相關(guān)密碼系統(tǒng)或隨機數(shù)的攻擊。對該算法的改進也一直倍受人們關(guān)注。本發(fā)明提出一個新的改進Pollard’s kangaroos算法,使得區(qū)間離散對數(shù)問題的求解效率得到提高。
技術(shù)實現(xiàn)要素:
本發(fā)明提出了一種基于信息泄露的公鑰密碼系統(tǒng)的私鑰獲取方法,主要是通過預(yù)定義可區(qū)分點條件和利用三角函數(shù)進行周期迭代的方式,優(yōu)化了Pollard’s kangaroos算法中每次跳躍過程中的計算代價;并且只有當(dāng)相關(guān)結(jié)果滿足本發(fā)明給定的可區(qū)分條件時才進行完全乘法運算操作,從而使得Pollard’s kangaroos算法總的時間代價降低。
具體到某個應(yīng)用,例如在經(jīng)典的DH密鑰交換協(xié)議中,Alice和Bob雙方約定了素數(shù)p,G=<g>是中q階的循環(huán)子群,整數(shù)g作為群G的生成元,其中1<g<p。Alice隨機選擇一個整數(shù)a(保密)作為私鑰,并計算X=ga modp;Bob隨機選擇一個大整數(shù)b(保密)作為自己私鑰,并計算Y=gbmodp(注意gb是g的b次冪);Alice把X發(fā)送給Bob,Bob把Y發(fā)送給Alice,Alice計算K=Y(jié)a=gab,Bob計算K=Xb=gabmod p;此時K即是共享的密鑰,用來對明文信息進行加密。而由共享密鑰是得不到私鑰的。即當(dāng)gab,ga,gb已知時,由計算離散對數(shù)問題的困難性保證了得不到私鑰a或b,從而保證了DH協(xié)議的安全性。當(dāng)敵手可能根據(jù)現(xiàn)有的側(cè)信道攻擊技術(shù)獲取關(guān)于離散對數(shù)的某些比特位信息,獲得私鑰的所在范圍,把范圍記為[0,N]。當(dāng)私鑰a在區(qū)間[0,N]上,ga此時記為h,則通過一個算法求解gamodp=h,就可得到私鑰a,從而對基于信息泄露的數(shù)字簽名標(biāo)準(zhǔn)、DH協(xié)議等基于離散對數(shù)困難問題的密碼系統(tǒng)實現(xiàn)攻擊。本發(fā)明把待求的Alice的私鑰記為n,在這種情下面給出計算n的算法,根據(jù)計算結(jié)果確定通信是否安全,該算法主要步驟有:
(1)固定索引集合S={1,2,…,η},并作為跳躍步集合,私鑰的取值范圍[0,N],取u=η2;p是一個素數(shù),G=<g>是中階為q的循環(huán)子群;令集合M定義為M={Mk=gk|k0S,k是整數(shù)};設(shè)置兩個小整數(shù)參數(shù)d,ε滿足固定一個小正整數(shù)l,并且預(yù)計算集合Ml={M∪{l}}l。
(2)索引函數(shù)取為
(3)給定變量x,y∈G,對每個0≤i≤d-1,寫成:其中0≤xi<ε。對每個0≤i≤d-1,定義ti=εiy mod 360(0≤ti<360);
(4)定義輔助標(biāo)簽函數(shù)ti的取值在(3)中得到。由上面過程,輔助索引函數(shù)取為
(5)預(yù)定義可區(qū)分點條件為
(6)一個搜索路徑的迭代過程,對應(yīng)到一個G中的序列:算法開始于某一初始值g0∈G,在集合S中隨機選取初始值s0=s(g0)。不用計算的乘積,可利用即將帶入上述計算得到下次索引值s1,同樣不用計算出g1就可得這里在步驟(1)中已預(yù)計算出。依次計算索引值s2,s3…,每次迭代計算索引值完成一次跳躍的過程中,都不用計算完全乘法,只有滿足預(yù)定義可區(qū)分點的條件,即函數(shù)的結(jié)果落入?yún)^(qū)間中時,才計算一次完全乘法,并把結(jié)果存入相應(yīng)的索引表中。獲得此時對應(yīng)的其中,已預(yù)計算,可通過查表得。
本發(fā)明通過定義兩只kangaroos(表示兩個迭代過程),分別記為T和W計算得到私鑰n,其中,T和W分支對應(yīng)的指數(shù)分別從區(qū)間[0,N]中點(即對應(yīng)g0=gN/2)和g'0=h開始迭代跳躍,交替執(zhí)行上述過程。分支T和W分別在集合S中隨機選取初始值s0=s(g0)和s'0=s(g'0)并令兩分支初始跳躍點和跳躍距離分別為和d0(T)=0,d0(W)=0。用Ti,Wj分別表示兩分支當(dāng)前所在的第i(j)次跳躍過程,i和j分別從0開始。則按T0、W0、T1、W1、T2、W2…Ti-1、Wi-1如此交替執(zhí)行下去,當(dāng)Ti或Wj分支中函數(shù)的結(jié)果落入?yún)^(qū)間即滿足預(yù)定義可區(qū)分點條件時,計算出當(dāng)前分支對應(yīng)的跳躍點值gi或gj,然后以三元組(gi,T/W)的形式記錄。這里用di(T)記錄T分支的前i次的跳躍距離和用dj(W)記錄W分支的前i次的跳躍距離和,即對應(yīng)各自三元組中的值,然后將三元組各自以gi或gj為索引存入索引表Lt或Lw中。某個gi被不同類型分支(T或者W)kangaroos訪問時即發(fā)生碰撞,算法終止,輸出私鑰n=N/2+di(T)-dj(W)。
與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果為:
本發(fā)明中的新的改進Pollard’s kangaroos算法提出的函數(shù)是將一次完全整數(shù)乘法轉(zhuǎn)換為多次小整數(shù)乘法的關(guān)鍵。函數(shù)計算量約為d||ε||||N||次比特運算,明顯小于原來完全乘法所用的||p||2次比特運算。對于1024比特的素數(shù)的乘法用171次6比特與6比特乘法共進行了6156次比特運算和經(jīng)典Pollard’s kangaroos算法進行完全乘法所用的1049576次比特運算相比,迭代計算量大大降低相比。從而具有降低算法的每次跳躍的計算代價的作用,使得算法總的運行效率得到提高。另外改進是:本發(fā)明通過設(shè)定預(yù)定義的可區(qū)分點條件,進行一定量的預(yù)計算和優(yōu)化參數(shù)設(shè)置,使其更加簡潔明確。分析和實驗表明,相比之前的工作,該算法有明顯優(yōu)勢。
附圖說明
圖1為分支T一次跳躍過程的示意圖。
圖2為分支W一次跳躍過程的示意圖。
圖3為算法中分支T和W的總的跳躍過程的示意圖。
具體實施方式
圖1是本發(fā)明采用kangaroo分支T的跳躍過程的示意圖,描述了第i次跳躍過程。圖2則是說明kangaro分支W的第j次跳躍過程。圖3則說明改進Pollard’s kangaroos算法的兩個分支總的運行情況,分支T和分支W依次執(zhí)行,首先定義兩個分支的各自初始值,然后迭代運行,當(dāng)找到碰撞時程序終止。DH協(xié)議中p為素數(shù),n為整數(shù)作為我們要求Alice的私鑰,G=<g>是中q階的循環(huán)子群。給定G的生成元g。在DH協(xié)議消息傳輸過程中,Alice公開的會話消息記為h,以及由于信息泄露密鑰取值范圍[0,N]。下面給出本發(fā)明的具體實施方式:
(1)固定索引集合S={1,2,…,η},并作為跳躍步集合,私鑰的取值范圍[0,N],取u=η2;令集合M定義為M={Ms=gs|s∈S};設(shè)置兩個小整數(shù)參數(shù)d,ε滿足固定一個小正整數(shù)l,并且預(yù)計算集合Ml={M∪{l}}l。
(2)標(biāo)簽函數(shù)τ定義為:
(3)給定變量x,y∈G,對每個0≤i≤d-1,寫成:其中0≤xi<ε。對每個0≤i≤d-1,定義ti=εiy mod 360(0≤ti<360);
(4)定義輔助標(biāo)簽函數(shù)ti的取值在(3)中得到。由上面過程,索引函數(shù)取為s=τ,輔助索引函數(shù)取為
(5)預(yù)定義可區(qū)分點條件為
(6)一個搜索路徑的迭代過程,對應(yīng)到一個G中的序列:算法開始于某一初始值g0∈G,在集合S中隨機選取初始值s0=s(g0)。不用計算的乘積,可利用即將帶入上述計算得到下次索引值若計算得出的索引值s滿足預(yù)先定義的可區(qū)分點判斷條件不用計算出g1就可得這里在步驟(1)中已預(yù)計算出。依次計算索引值s2,s3…,每次迭代計算索引值完成一次跳躍的過程中,都不用計算完全乘法,只有滿足預(yù)定義可區(qū)分點的條件,即函數(shù)的結(jié)果落入?yún)^(qū)間中時,才計算一次完全乘法,并把結(jié)果存入相應(yīng)的索引表中。我們獲得此時對應(yīng)的其中,已預(yù)計算,可通過查表得到。若已進行l(wèi)次迭代還未發(fā)生碰撞,此時,將計算出的gl+1值存入表中,然后將其作為新的起始點再次執(zhí)行算法即可。
定義兩個搜索路徑,分別記為T和W。T和W分支對應(yīng)的指數(shù)分別從區(qū)間[0,N]中點(即g0=gN/2)和g'0=h開始向區(qū)間右側(cè)跳躍,交替執(zhí)行上述過程。分支T和W分別在集合S中隨機選取初始值s0=s(g0)和s'0=s(g'0)并令兩分支初始跳躍點和跳躍步分別為和d0(T)=0,d0(W)=0。用Ti,Wj分別表示兩分支第i(j)次跳躍,i和j分別從0開始。則按T0、W0、T1、W1、T2、W2…Ti-1、Wi-1如此交替執(zhí)行下去,當(dāng)Ti,Wj分支中函數(shù)的結(jié)果落入?yún)^(qū)間即滿足預(yù)定義可區(qū)分點條件時,計算出當(dāng)前分支對應(yīng)的跳躍點值gi或gj,然后以三元組(gi,T/W)的形式記錄,這里用di(T)和dj(W)記錄兩個分支的各自跳躍步長距離的和,然后將三元組各自以gi和gj為索引存入索引表Lt或Lw中。某個gi被不同類型分支(T或者W)kangaroos訪問時即發(fā)生碰撞,算法終止,輸出私鑰n=N/2+di(T)-dj(W)。
以T分支第i次跳躍過程和W分支第j次跳躍為例,本發(fā)明給出算法描述則,初始值給定后,di-1(T),di-1(W),yi-1,yj-1,si-1,sj-1,等已通過前面的i-1和j-1次跳躍過程得到,并作為相應(yīng)分支下一輪的輸入,給出算法1和算法2。
算法過程如下:
算法1.T分支一次跳躍(第i次跳躍)偽代碼描述
輸入:di-1(T)yi-1,si-1;
輸出:n
算法2.W分支一次跳躍(第j次跳躍)偽代碼描述
輸入:dj-1(W),yj-1,sj-1
輸出:n;
算法實例:給定一個32比特的素數(shù)p=2147483659,g0=29參數(shù)取ε=8,N = 50,索引集合S={1,2,3,..,η},同時集合M={g0s|s∈S,g0=29},可區(qū)分點滿足的條件為[η/2,η],即為[6,13]。給定h=44895682,則在區(qū)間[1,N]之內(nèi)找x,使29xmodp=44895682。
預(yù)計算M和Ml=(M∪{1})1是至多l(xiāng)個Ms乘積的集合,而對于兩個kangaroos,本發(fā)明分別記為分支T和分支W,然后把它們依次執(zhí)行,將滿足可區(qū)分點的數(shù)據(jù)存入表中,并在另一只訪問的時候,將結(jié)果進行比較,找到碰撞則算法終止,否則繼續(xù)進行。具體運行過程如下:
對分支W:
W分支初始條件:隨機選取s0=6(si作為索引集合S的元素,則對應(yīng)集合M中元素是),g0=h=44895682。
第一次跳躍:對g1計算:根據(jù)我們的定義則s1=10,滿足給出的可區(qū)分點條件,故進行乘法運算得到g1=hg6=2131527625,將點(2131527625,6,W)記錄入W表中。
第二次跳躍:對g2計算:s2=7滿足可區(qū)分點條件進行乘法運算得到g2=hg6g10=371226886,將點(371226886,16,W)記錄入W表中。
第三次跳躍:對g3計算:s3=11,滿足可區(qū)分點條件,故進行乘法運算得到g3=hg6g10g7=1437182517,記錄該點(1437182517,23,W)加入W表中。
第四次跳躍:對g4計算:則s4=7,滿足可區(qū)分點條件,故進行乘法運算得到g4=hg6g10g7g11=1129469434,記(1129469434,34,W)加入W表中。
對分支T:
T分支初始條件:隨機選取s0=1,g0=gN/2=2925mod p=1252290799。
第一次跳躍:對g1計算:根據(jù)定義則s1=11,滿足本發(fā)明給出的可區(qū)分點條件,故進行乘法運算得到g2=g25g1=1956699847,將該點(1956699847,1,T)記錄入T表中。
第二次跳躍:對g2計算:則可以發(fā)現(xiàn)s2=10滿足可區(qū)分點條件,故進行乘法運算得到g2=g25g1g11=1250046359,將點(1250046359,12,T)記錄入T表中。
第三次跳躍:對g3計算:s3=11,滿足可區(qū)分點條件,故進行乘法運算得到g2=g25g1g11g10=1940414804,本發(fā)明將點(1940414804,22,T)記錄入T表中。
第四次跳躍:對g4計算:則s4=13,可知s4滿足可區(qū)分點條件,故進行乘法運算得g2=g25g1g11g10g11=1437182517,記錄該點(1437182517,33,T)加入T表中。發(fā)現(xiàn)與W中元素找到碰撞。
執(zhí)行上述算法發(fā)現(xiàn),當(dāng)分支T第四次跳躍時與分支W對應(yīng)的表中元素1437182517發(fā)生碰撞。于是,程序返回x=25+33-23=35。驗證得2935modp=44895682=h,從而求解出了該區(qū)間離散對數(shù)問題的值。
實驗數(shù)據(jù):
本發(fā)明中提出的算法和經(jīng)典Pollard’s kangaroos算法分析時間代價對比情況見表1。對于1024比特的素數(shù)的乘法用了171次6比特與6比特乘法共進行了6156次比特運算和經(jīng)典Pollard’s kangaroos算法進行完全乘法所用的1049576次比特運算相比,迭代計算量大大降低相比。從而具有降低算法的每次跳躍的計算代價的作用,使得算法總的運行效率得到提高。
表1時間代價對比
本發(fā)明用實例運行本發(fā)明中提出的算法同時對上面的分析用實例進行驗證,本發(fā)明在微軟的win7 32位系統(tǒng)中基于Microsoft Visual C++6.0的編程環(huán)境執(zhí)行本發(fā)明的算法,相應(yīng)的處理器是Intel(R)Core(TM)2Quad CPU Q8400@2.66GHz 2.67GHz。
表2對素數(shù)p=2147483659,g0=29算法執(zhí)行結(jié)果
以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其進行限制,本領(lǐng)域的普通技術(shù)人員可以對本發(fā)明的技術(shù)方案進行修改或者同等替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護范圍應(yīng)以權(quán)利要求所述為準(zhǔn)。