專利名稱:一種在線/離線高效的數(shù)字簽名方法
技術(shù)領(lǐng)域:
本發(fā)明涉及密碼技術(shù),尤其涉及數(shù)字簽名方法。
背景技術(shù):
預備知識和符號標示記G為一個有限群G'中的一個循環(huán)子群,其中記G'的階為N,G的階為q,g是G 的生成元,記Ie為G'的單位元,記G/le為G中除了 Ie之外的所有元素構(gòu)成的集合。一般而 言,q為一個大的素數(shù)(典型地,|q| = 160,其中|q|表示的是以2進制表示的q的長度)。 記Ztl為數(shù)字集合{0,1夂,(1-1},記<為數(shù)字集合{Ρ··4-1}。在下面的背景技術(shù)描述中,采 用乘法表示(multiplicative representation)群上的操作,即G'和G為乘法群。這只 是為了表述上的方便,所有有關(guān)背景技術(shù)的敘述均可等價地應(yīng)用到加法群上,比如,橢圓曲 線,或者其他的代數(shù)群或具體的群,有限域,復數(shù)或復合模(composite moduli)等。一般而 言,對于乘法群上的操作,指數(shù)上的操作是對q求模,而群上元素的操作是對N或N+1求模 或其它操作以保證操作的結(jié)果是G'或G中的元素;比如gx通常指的是g °d<1,gxgy通常表 示的是gxgy e G',x+y e Zq和xy e Zq表示的是x+ymodq和xymodq。為了表述的方便起 見,假定參數(shù)G,q,g是固定的并被所有的用戶事先獲知(這是一種實用中的普遍情況);或 者,將這些參數(shù)包含在證書中或者在協(xié)議運行之前交換和協(xié)商這些參數(shù)并達成一致。假定 離散對數(shù)假設(shè)在G上成立,即給定X = gx e G (其中χ從Ztl中隨機選取),沒有概率多項式 時間的算法能夠以不可忽略的概率由X求出X。在下面的敘述中使用符號(比如,2) 來標示一個用戶或設(shè)備的邏輯或“區(qū)別性”的身份(identity),比如一個名字,一個設(shè)備序 列號,一個email或IP地址,甚至是方法運行中的一個角色等。在某些情況下,這些身份可 能伴隨或包含或包含于一個數(shù)字證書。記{···}為一個信息或數(shù)值的集合。哈希函數(shù)用來將一個字符串轉(zhuǎn)換成一個數(shù)值或者一個固定長度的串等。典型地, 哈希函數(shù)的輸入,即任意一個字符串(或若干個字符串的聯(lián)結(jié)),首先被編碼為一個{0,1}* 中的0-1串,然后將哈希函數(shù)作用在該轉(zhuǎn)化后的0-1串輸入上從而得到一個固定長度的0-1 串輸出。這兒{0,1}*表示的是所有0-1串的集合。哈希函數(shù)在密碼學中的一個基本功能 是提供一個“單向”和“抗碰撞”的轉(zhuǎn)換,這兒“單向”指的是給定一個函數(shù)的輸出求出其輸 入或前像是困難的,“抗碰撞(collision-resistant) ”指的是給定一個輸入難以找到另外 一個不同的輸入使得哈希函數(shù)在這兩個不同輸入上的輸出相同。哈希函數(shù)范圍可以非常廣 泛從一個簡單的混合(mixing)函數(shù)到一個具有偽隨機輸出性質(zhì)的函數(shù)。具有偽隨機輸 出性質(zhì)的哈希函數(shù)在密碼學分析中常被理想化為一個“隨機圣諭(random oracle) 有幾 個哈希函數(shù)在密碼學中被廣泛使用比如MD5將任意長度的數(shù)據(jù)轉(zhuǎn)換為一個128-位的0-1 串,而另一個常用的哈希函數(shù)SHA的輸出是160位的0-1串。記f,h:{0,i;r —Ztl為兩個轉(zhuǎn)換函數(shù)。典型地,f,h的輸入,即任意一個字符串 (或若干個字符串的聯(lián)結(jié)),首先被編碼為一個{0,1}*中的0-1串,然后將f,h作用在該轉(zhuǎn) 化后的0-1串輸入上從而得到一個Ztl中的數(shù)值(典型地,Ztl中的數(shù)值亦用2進制表示)。特別地,f,h可以是哈希函數(shù)。在應(yīng)用中,轉(zhuǎn)換函數(shù)的所有輸入首先轉(zhuǎn)換為0-1串,然后將 轉(zhuǎn)換后的0-1串連接成一個0-1串(聯(lián)結(jié)的順序可以變化),最后在將轉(zhuǎn)換函數(shù)作用到該聯(lián) 結(jié)后的0-1串從而得到輸出。在大多數(shù)情況下,轉(zhuǎn)換函數(shù)的輸入的順序不重要(順序可以 被變化)。比如,以轉(zhuǎn)換函數(shù)f為例,設(shè)X為一個字符串,記X(2)為X的2進制0-1串編碼表 示;設(shè) S= Is1, ...,st},t 彡 0,為 t 個字符串的集合,記 乂 2),#,..,#)為 si,s2,s3,…, st的2進制0-1串編碼表示,則/(x,s) = /V2) ih(2) 丨2) ||-||^(2)),其中“ 11 ”表示的是字符 串聯(lián)結(jié)操作符。注意X(2),42W丨2),···,\(2)聯(lián)結(jié)的順序可以變化,但聯(lián)結(jié)的順序需固定且所 有的用戶知曉且使用相同的順序進行聯(lián)結(jié)操作。對于/(義(2)丨|彳)|丨彳)丨丨…Ik)2)),若其中Si, ι 彡 i 彡 t,是空串,則/“(2)lh(2)lM2)丨卜.丨 k(2)) = /(x2 Ih2MA Il^11 卜.Ik2)。上述關(guān)于 轉(zhuǎn)換函數(shù)f的描述同樣適用轉(zhuǎn)換函數(shù)h。假定簽名者,記為i,有一個簽名公鑰U,簽名公鑰υ與簽名者身份A的綁定由一個 可信的第三方機構(gòu)來執(zhí)行。通常,可信的第三方機構(gòu)會檢查i的身份的有效性以及U的有效 性,然后對(i,t/)做一個數(shù)字簽名,并將(Λ /)以及可信第三方的簽名形成一個針對(Λ /)公 鑰證書,記為CMl。數(shù)字簽名方法是密碼技術(shù)的主要應(yīng)用之一?;陔x散對數(shù)的數(shù)字簽名方案主要有 khnorr簽名方案和國際數(shù)字簽名標準(Digital SignatureStandard(DSS))方案。Schnorr簽名方案運作如下簽名公鑰U = g_w e G,其中weZ;。其中,G是有限群G'中的一個循環(huán)子群,g是 G的生成元;記Ztl為數(shù)字集合{0,L···,q-l},A'為數(shù)字集合{1···,q-1},q為一個大的素數(shù) (典型地,|q| = 160,其中|q|表示的是以2進制表示的q的長度)。簽名私鑰w。簽名的生成記me {0,1}*為需要簽名的信息,{0,1}*表示的是所有0-1串的集 合。令h:{o,i;r —Ztl為一個抗碰撞的哈希函數(shù)。從Ztl中隨機選取r,計算a = gr G G ;計算d = h (a, m);計算ζ = r+dw e Zq ;將(d,ζ)作為對m的簽名。簽名的驗證得到{m,(d,z)}以及簽名公鑰U后,簽名驗證者驗證是否h(gzUd,m) =d。若h(gzUd,m) =d則接受簽名,否則拒絕。數(shù)字簽名標準(DSS)方案運作如下簽名公鑰U = gw e G,其中we<。簽名私鑰W。簽名的生成記me {0,1}*為需要簽名的信息。令h:{0,i;r —Ztl為一個抗碰撞 的哈希函數(shù)。令f:G' — Ztl是一個轉(zhuǎn)換函數(shù)。一般而言,若G'= Z; (ρ是個素數(shù)),f直接可 以是“mod q”操作;若G'是定義在有限域上的一個橢圓曲線群(即a e G表示橢圓曲線 上的一個點(X,y)),f(a) = χ。簽名者做如下計算從Ztl中隨機選取r,計算a = gr G G,f = , e A ;計算d = f(a) ;e = h(m); 計算ζ = er + dwr e Zq ;將(d, ζ)作為對m的簽名。
簽名的驗證得到{m,(d,ζ)}以及簽名公鑰U后,簽名驗證者如下驗證簽名的有 效性計算i= ζ'' e Zq ;驗證/XgeWfi) = d,若JXgeiU, = ¢/則接受簽名,否則拒絕。Schnorr簽名方案和數(shù)字簽名標準(DSQ方案比較可證明安全性=Schnorr簽名方案在假設(shè)哈希函數(shù)h是隨機圣諭(random oracle) 的假設(shè)和離散對數(shù)假設(shè)下被證明是安全的。但是,對于數(shù)字簽名標準(DSQ方案,迄今為 止,其可證明安全性仍未知(即便轉(zhuǎn)換函數(shù)f,h均假設(shè)為隨機圣諭)。在線/離線效率在很多應(yīng)用中為了提高簽名方案的效率,通常將簽名的生成分 為兩個階段來完成離線階段和在線階段。在線/離線簽名的用途廣泛。在很多的實際應(yīng) 用中,簽名者(比如智能卡)在信息提交后,只有很有限的反應(yīng)時間(但是在兩個連續(xù)的簽 名請求之間,它可以完成很復雜的計算)。在線階段的特點就是非常快,因此即使是一個很 弱的處理器也可以完成執(zhí)行。在線/離線簽名在基于智能卡的應(yīng)用中特別關(guān)鍵離線階段 既可以在卡片的制造過程中實施,也可以在卡片通電以后作為背景計算實施。對于^^1101·!·簽名方案,簽名者可以預先離線計算并存儲(r,a = gr);接下來,在 為信息m簽名的時候,它僅僅需要在線計算e = h(a,m)和ζ = r+ew0對于數(shù)字簽名標準(DSS)方案,簽名者亦可以預先計算出很多的a的值。但是,與 khnorr簽名方案不同的是,DSS的簽名者不用將這些預計算的a值存儲下來。具體來說,每 一次離線預先算好a = f后,DSS的簽名者可以離線地計算c/ = f(a),r - r"1 ,dwr,并且只需要 存儲⑷&― )。在需要對信息m進行簽名時候,簽名者只需在線計算e = h (m),z 二 & +加戶 (其中,/WW是事先離線計算并存儲的)。在實際的應(yīng)用中,對于基于智能卡的應(yīng)用,智能卡 制造商可以在卡片制造過程中存儲許多(義/1,— )的值。注意a = f e G'而《^—/^、, 一般而言a的長度可能設(shè)為IOM位,而q得長度是160位。因此,Schnorr簽名方案對于 每一次簽名需要離線存儲10M+160 = 1184位的信息,而DSS簽名方案對于每一次簽名只 需存儲160X3 = 480位的信息。這對于基于智能卡的數(shù)字簽名實現(xiàn)是非常重要的。雖然 DSS簽名方案沒有一個嚴格的安全性證明,但是它更優(yōu)的在線/離線效率使得它在實際應(yīng) 用中被更廣泛地使用。
發(fā)明內(nèi)容
本發(fā)明給出一個新的數(shù)字簽名方法,與Schnorr簽名方案和數(shù)字簽名標準(DSS) 方案相比,我們提出的新的數(shù)字簽名方法既具有嚴格的可證明安全同時具有比DSS方案更 優(yōu)的在線/離線效率。所發(fā)明的新的數(shù)字簽名方法可在各種需要數(shù)字簽名的應(yīng)用中應(yīng)用, 特別地,所發(fā)明的新的數(shù)字簽名方法特別有利于在基于智能卡的數(shù)字簽名及相關(guān)電子商 務(wù)、政務(wù)中應(yīng)用。本發(fā)明的數(shù)字簽名方法的目標是在保證安全性的基礎(chǔ)上獲得更好的在線 /離線計算效率。本發(fā)明提供一種在線/離線數(shù)字簽名方法,其中,^表示簽名者,^的公鑰為U = giGG,J々&_*weZ(1={0,l,2,…,q_l},其中g(shù)是一個階為N的有限群G'中的一 個階為素數(shù)q的循環(huán)子群G的生成元,』的公鑰證書為為待簽名的信息,左表示簽 名驗證者,所述方法包括由所述簽名者得到e = h(m,aiD0,其中h {0,1}* — Zq是一個從{0,1}*到Ztl的抗碰撞的轉(zhuǎn)換函數(shù)且m是h的輸入之一,auxffl是一個包含{C/,么叻的集合的 能夠為空的子集合,其中,{0,1}*表示的是任意0-1串的集合;由所述簽名者得到r e Zq, 得到a = f和/或d = f (a,auxd),其中f是一個從{0,1}*到\的轉(zhuǎn)換函數(shù)且a是f的 輸入之一,aiDcd是一個包含{C/j,m}的集合的能夠為空的子集合;由所述簽名者或設(shè)備計 算z,其中ζ的計算基于er+dw或dr+ew;由所述簽名者或設(shè)備將s = {d,ζ, auxj或s = {a, ζ, 或s = {a,d,ζ, au%}作為對信息m的數(shù)字簽名,其中,auxi; 1 ( i ( 3,是一 個包含^的集合的能夠為空的子集合,“J e Z9,i = ^ eZ"其中auxd,auxm, Bux1, aux2, aux3以及函數(shù)h,f或者是固定的并被所有的用戶事先獲知,或者被包含在證書中,或 者在協(xié)議運行之前被交換和協(xié)商;簽名驗證者得到所述簽名者的公鑰U、公鑰證書C^l、 {m, s}之后,首先驗證所述公鑰證書CmL的有效性,若驗證通過,則驗證者得到e = h(m, auxj并按照如下情況之一驗證簽名的有效性若ζ的計算基于er+dw且d e s,則驗證者 得到 = e-1 e Zq,計算并驗證J\gf ,am》=c/或者"=f{a,auxd) Agz'Udi = α,若驗證成功, 則接受簽名,否則拒絕;若ζ的計算基于er+dw且a e s但Jg Λ,則驗證者得到 = e Z 和d = f(a, auxd),并驗證一“滋二^/或卯若驗證成功,則接受簽名,否則拒 絕;若ζ的計算基于dr+ew且d e s,則驗證者得到J = Γ1 e Z^,并驗證二 i/ 或者J = /(0,《%;^一C/一 ,若驗證成功,則接受簽名,否則拒絕;若ζ的計算基于 dr+ew且ae id^/u,則驗證者得到d = f(a,auxd)禾口 J 二 c^eZ,,并驗證g」[/一二 “或 f(g^U^,auxd) = d,若驗證成功,則接受簽名,否則拒絕。如上所述的方法,其中,若簽名驗證者力在得到簽名之前事先知道m(xù),或簽名者j在 產(chǎn)生簽名之前事先知道m(xù),則簽名驗證者和/或簽名者能事先計算并存儲e = h(m,auxffl)和 /或 = —;若z的計算基于er+dw,事先計算并在J中存儲{Ω” Ω2,…,Ωη},η彡1, 其中對于任意的i,1彡i彡η,Ω, G {η, ^ Μ,ri e Zq, Cii=Agr^auxd);若ζ的計算基于 dr+ew,事先計算并在j中存儲{ Σ Σ 2,…,Σ J , η ^ 1,其中對任意的i,l彡i彡η, Σ,, c W,r, e Zq,《=/(g\ %);簽名者在線數(shù)字簽名時候,在這些事先離線存儲的 值中找出之前簽名尚未使用的 1或[,,并將Ω i或[,中的值直接用于在線的簽名生成; 若ζ的計算基于dr+ew且力預先知道待簽名的信息m,^還能預先計算e = h (m,auxj以及 ew 或 ew (modq)。如上所述的方法,其中,對任意的i,l彡i彡11,令Qi = {ri; Cli, CliWj5E j = Idi, ClirJ,其中α是一個從Ztl或{0,1}1中隨機選取的值,CliW e Zq, ^ri e Zq, 1 ^ | q |是一個正 整數(shù),|q|表示以2進制表示的q的長度,{0,1}1表示的是所有長度為1的0_1串的集合。如上所述的方法,其中,i通過在{0,1}1或Ztl中隨機選取r得到r e Zq或者利用 一個從{0,1}*到{0,1}1或Ztl的偽隨機函數(shù)產(chǎn)生,其中|q|是一個正整數(shù),{0,1}1表示 的是所有長度為1的0-1串的集合;令h為一個從{0,1}*到{0,1}1或Ztl的抗碰撞的哈希 函數(shù);令f為一個從{0,1}*到Ztl或{0,1}1抗碰撞的哈希函數(shù),或者f(a,aUXd) =amodq或 (am0dN)modq或(am0d(N+l))m0dq,或者若a= (x,y) e G表示的是橢圓曲線上的一個點,其 中 χ e Ztl, y e Ztl 為坐標值,定義 f(a,auxd) = χ 或 f(a,auxd) = y ;令 aiDcd 為空集或 aiDcd ={U}或賺d = {V, Α],并且/或者令aui為空集或aui = {U}或cmxm = {U Jj。
如上所述的方法,其中,基于er+dw的ζ的計算方式有z = er+dw、z = er+dw e Zq、 ζ = (er+dw) modq> ζ = (er modq) + (dwmodq)、ζ = ((er modq) + (dwmodq))modq> ζ = er+dw+α q其中α是一個整數(shù);基于dr+ew的ζ的計算方式有ζ = dr+ew、z = dr+ew e \、ζ =(dr+ew)modq、z = (dr modq) + (ewmodq)、ζ = ((drmodq) + (ewmodq))modq>ζ = dr+ew+ β q 其中β是一個整數(shù)。如上所述的方法中,其中,驗證者在驗證簽名時檢查d e Ztl或d e {0,1}1, 檢查失敗則拒絕接受簽名;和/或,若簽名者計算得到ζ e Ztl,驗證者在驗證簽名時驗 證z e Ztl,若zg^則拒絕接受簽名;若簽名者計算得到的z不能保證屬于Z,,驗證者 計算f(gW,awcd)的其它方式有/(g(_d i^, maj,計算/(ff/。其它方式有 Agizmodq^Ue",auxd)a如上所述的方法,其中,若ζ = er+dw,力如下得到“一若紅si驗證“《且 ei = 1,若驗證通過則直接得到 ;若s j計算一得到 ;若ζ = dr+ew, i如下得到j(luò) = d'x 若 d e s后驗證^ e Ζ;且』=ι,若驗證通過則直接得到J ;若2 g 5 j計算Cf1得到J。如上所述的方法,其中,令a = f e G ;若a e s,驗證者檢查a e G,若α ¢¢7驗證 者拒絕接受簽名。如上所述的方法,其中,令W = ,其中W' ez,,即U = gw' e G。本發(fā)明的方法與Schnorr簽名方案及DSS簽名方案的比較與khnorr簽名方案 相比,本發(fā)明的簽名方法需要更少的離線存儲空間。與DSS簽名方案相比,本發(fā)明的簽名方 法具有如下優(yōu)點同樣或者更好的空間復雜度。假設(shè)預計算了 k個a = f的值,如果是Z = er+dwOiiodq),發(fā)明方法的離線空間復雜度為;3k|q|,這和DSS相同;但是如果ζ = dr+ew (modq),發(fā)明方法的在線空間復雜度只有,這就大大減少了離線空間復雜度。簽名生成的總體效率更高。在計算DSS的簽名z = er + Λ—的時候,總共需要進行1 次模求逆運算f = r'' 6、和2次模乘運算咖卩。相比之下,發(fā)明方法在計算ζ = er+dw e &或 ζ = dr+ew e Zq的時候,簽名者總共只需要進行2次模乘運算(不需要進行模求逆運算)。 注意模求逆運算是相當費時的操作,因此最好可以把它省略掉(尤其是對于基于智能卡 的應(yīng)用)。更有效的離線預計算。除了其他相同的預計算以外,DSS的簽名者需要計算1次模 求逆運算eZ,和兩次模乘運算來計算 Λν/^么;而發(fā)明方法的簽名者只需要離線1次 模乘運算得到dw e Ztl或dr e \。更有效的在線簽名驗證(在ζ = er+dw (modq)情況下)。驗證DSS的簽名(d,ζ) 的時候,驗證者要在線計算2 = ζ"1 e &,因為ζ的值只有在收到簽名后驗證者才知道,因此 驗證者無法事先計算i。因為模求逆運算是代價相對昂貴的,最好可以省略掉。相比之下, 在ζ = er+dw (modq)情況下,在發(fā)明方法的簽名驗證時,驗證者只需要計算 = Z,其中e = h(m)。如果像實際應(yīng)用中經(jīng)常出現(xiàn)的那樣,驗證者在接收到簽名之前就知道待簽名的信息 m(甚至m就是由驗證者準備的),那么ej可以離線預計算。對于ζ = dr+ew e Zq的情形, 發(fā)明方法的簽名驗證的計算復雜度與DSS相同。在隨機圣諭模式下的可證明其安全性。發(fā)明人證明,假設(shè)h,f都是隨機圣諭(比如h,f均為哈希函數(shù),并將哈希函數(shù)理想化為隨機圣諭),在隨機圣諭模式和DLP假設(shè)下, 發(fā)明的數(shù)字簽名方法在自適應(yīng)選擇消息攻擊下是簽名不可偽造的。注意,DSS目前還沒有 安全性證明。
圖1和圖2是示例性地示出了本發(fā)明的數(shù)字簽名方法。
具體實施例方式預備知識和符號標示本發(fā)明所描述的方法和操作基于一個有限群G'中的一個循環(huán)子群G,其中記G' 的階為N,G的階為q,g是G的生成元,記Ie為G'的單位元,記G/le為G中除了 Ie之外的 所有元素構(gòu)成的集合。一般而言,q為一個大的素數(shù)(典型地,|q| = 160,其中|q|表示的 是以2進制表示的q的長度)。記Ztl為數(shù)字集合{0,1···,q-Ι},記<為數(shù)字集合{L···,q_l}。 發(fā)明人在下面發(fā)明方法的描述中,采用乘法表示(multiplicative representation)群上 的操作。即,G'和G為乘法群。這只是為了表述上的方便,所有發(fā)明方法的敘述均可等價 地應(yīng)用到加法群上,比如,橢圓曲線,或者其他的代數(shù)群或具體的群,有限域,復數(shù)或復合模 (composite moduli)等。一般而言,當用乘法群上的操作描述發(fā)明方法時,指數(shù)上的操作 是對q求模,而群上元素的操作是對N或N+1求?;蚱渌僮饕员WC操作的結(jié)果是G'或G 中的元素;比如gx通常指的是gxm°d% gxgy通常表示的是gY e G',x+y e Ztl和xy e Ztl表 示的是x+ymodq和xymodq。為了表述的方便起見,假定參數(shù)G,q, g是固定的并被所有的用 戶事先獲知(這是一種實用中的普遍情況);或者,我們將這些參數(shù)包含在證書中或者在協(xié) 議運行之前交換和協(xié)商這些參數(shù)并達成一致。我們假定離散對數(shù)假設(shè)在G上成立,即給定X = gxe G(其中χ從Ztl中隨機選取),沒有概率多項式時間的算法能夠以不可忽略的概率由 X求出χ。發(fā)明人使用符號(比如,i)來標示一個用戶或設(shè)備的邏輯或“區(qū)別性”的身 份(identity),比如一個名字,一個設(shè)備序列號,一個emial或IP地址,甚至是方法運行中 的一個角色等。在某些情況下,這些身份可能伴隨或包含或包含于一個數(shù)字證書。記{···} 為一個信息或數(shù)值的集合。哈希函數(shù)用來將一個字符串轉(zhuǎn)換成一個數(shù)值或者一個固定長度的串等。典型地, 哈希函數(shù)的輸入,即任意一個字符串(或若干個字符串的聯(lián)結(jié)),首先被編碼為一個{0,1}* 中的0-1串,然后將哈希函數(shù)作用在該轉(zhuǎn)化后的0-1串輸入上從而得到一個固定長度的0-1 串輸出。這兒{0,1}*表示的是所有0-1串的集合。哈希函數(shù)在密碼學中的一個基本功能 是提供一個“單向”和“抗碰撞”的轉(zhuǎn)換,這兒“單向”指的是給定一個函數(shù)的輸出求出其輸 入或前像是困難的,“抗碰撞(collision-resistant) ”指的是給定一個輸入難以找到另外 一個不同的輸入使得哈希函數(shù)在這兩個不同輸入上的輸出相同。哈希函數(shù)范圍可以非常廣 泛從一個簡單的混合(mixing)函數(shù)到一個具有偽隨機輸出性質(zhì)的函數(shù)。具有偽隨機輸 出性質(zhì)的哈希函數(shù)在密碼學分析中常被理想化為一個“隨機圣諭(random oracle) 有幾 個哈希函數(shù)在密碼學中被廣泛使用比如MD5將任意長度的數(shù)據(jù)轉(zhuǎn)換為一個128-位的0-1 串,而另一個常用的哈希函數(shù)SHA的輸出是160位的0-1串。本發(fā)明使用兩個轉(zhuǎn)換函數(shù)f,h:{0,l}*- \。典型地,f,h的輸入,即任意一個字符串(或若干個字符串的聯(lián)結(jié)),首先被編碼為一個{0,1}*中的0-1串,然后將f,h作用 在該轉(zhuǎn)化后的0-1串輸入上從而得到一個\中的數(shù)值(典型地,Ztl中的數(shù)值亦用2進制表 示)。特別地,f,h可以是哈希函數(shù)。其它常用的轉(zhuǎn)換函數(shù)為f(X,aux) =X modq或者(X modN+1)modq,其中X e G,N為G‘的階(比如,若對于一個大素數(shù)P G' = Z;,則N+1 = ρ),aux 是任意字符串或字符串的集合;若X= (x,y)曰6是橢圓曲線上的一個點,其中1,7£2(1, 則可令f(X,aux) = χ或y ;其它可以使用的專函函數(shù)還有/(Ζ,Γ) = (Ζιη0(^)十(Fmod幻 或,其中H {0,1}* — Zq是一個哈希函數(shù)。為了描述的方便起見,發(fā)明人 使用同一個函數(shù)符號來表示具有不同輸入個數(shù)的轉(zhuǎn)換函數(shù)。在應(yīng)用中,轉(zhuǎn)換函數(shù)的所有輸 入首先轉(zhuǎn)換為0-1串,然后將轉(zhuǎn)換后的0-1串連接成一個0-1串(聯(lián)結(jié)的順序可以變化), 最后在將轉(zhuǎn)換函數(shù)作用到該聯(lián)結(jié)后的0-1串從而得到輸出。在某些應(yīng)用中,轉(zhuǎn)換函數(shù)的輸 出只有部分被使用。在大多數(shù)情況下,轉(zhuǎn)換函數(shù)的輸入的順序不重要(順序可以被變化)。 比如,以轉(zhuǎn)換函數(shù)f為例,設(shè)χ為一個字符串,記x(2)為χ的2進制0-1串編碼表示;設(shè)S = Is1,…,sj,t彡0,為t個字符串的集合,記彳),42),斤),...,#)為S1, &,s3,…,St的2進制 0-1串編碼表示,則/(X,》=/(Xw lh(2) Il丨)丨卜·丨k(2)),其中“ 11 ”表示的是字符串聯(lián)結(jié)操作 符。注意χ(2),0丨Vf,···乂2)聯(lián)結(jié)的順序可以變化,但聯(lián)結(jié)的順序需固定且所有的用戶知 曉且使用相同的順序進行聯(lián)結(jié)操作。對于/(X(2) lk,(2) Il42) Il--Ik,(2)),若其中Si, ι彡i彡t, 是空串,則/(x(2) IlW2) IlIl--Iki2') = /^2 IU12II-IK1 IUm 丨卜.Ik2)。上述關(guān)于轉(zhuǎn)換函數(shù) f 的描述同樣適用轉(zhuǎn)換函數(shù)h。參考圖ι和圖2,示例性地示出了本發(fā)明的數(shù)字簽名方法。我們假定簽名者,記為i,有一個簽名公鑰U,簽名公鑰U與簽名者身份A的綁定由 一個可信的第三方機構(gòu)來執(zhí)行。通常,可信的第三方機構(gòu)會檢查i的身份的有效性以及U的 有效性(即U e G),然后對U,C7)做一個數(shù)字簽名,并將U,t/)以及可信第三方的簽名形成 一個針對 , /)公鑰證書,記為。記簽名者或設(shè)備的身份為i,發(fā)明的數(shù)字簽名方法運作如下簽名公鑰U = g_w e G,其中we Ζ〗,(g,q,h,f)。記力的公鑰證書為。簽名私鑰w。簽名的生成與驗證記me {0,1}*為需要簽名的信息。令h:{0,i;r —Ztl為一個 抗碰撞的哈希函數(shù)(在應(yīng)用中可令11:{0,1}*—⑷,”^其中^ q|是個正整數(shù),比如1 =
q卜1,{0,I}1表示的是所有長度為1的0-1串的集合)。令f:G' —Ztl是一個轉(zhuǎn)換函數(shù)。 一般而言,若= (ρ是個素數(shù)),f直接可以是“modq”操作;若G'是定義在有限域上的 一個橢圓曲線群(即a e G表示橢圓曲線上的一個點(X,y)),f(a) = χ。簽名者做如下 計算計算e = h(m),從Ztl中隨機選取r (在應(yīng)用中,可在{0,1}1中隨機選取r),計算a = greG,d = f(a)(在應(yīng)用中,可直接計算d = f (gr));注意,對于這種具體實施方式
,auxm 和aiDcd被設(shè)為空集。以如下方式之一計算ζ并驗證簽名(具體選用哪種方式可由用戶協(xié)商或簽名者指 定,但是一旦確定就應(yīng)固定,并且所有的簽名驗證者知曉ζ的計算方式)計算z = (er+dW)modq,并將s = {d,ζ}作為對m的簽名。收到{m,s}以及簽名公鑰U以及公鑰證書后,簽名驗證者通過驗證可信第三方的簽名來驗證公鑰證書的有效性 (一旦一個簽名者的公鑰證書被確認為有效,簽名驗證者可以存儲該有效的數(shù)字簽名,這樣 對該簽名者之后的簽名驗證過程可省略對可信第三方簽名的驗證)以及ζ e Ztl(對于這種 簽名方式,d e Ztl的驗證可進行或不進行)。若檢查失敗,則終止執(zhí)行;若檢查成功,驗證者 進一步計算e = h(m),e = e"1,計算并驗證/(g匆勹=d。若/(g卞勺=“則接受簽名,否則拒 絕?;蛘?,計算z = (dr+ew)modq,并將s = {d,ζ}作為對m的簽名。收到{m,s}以及簽 名公鑰U以及公鑰證書后,驗證者驗證公鑰證書的有效性以及ζ e \及(1 e Ztl。若檢查失敗, 則終止執(zhí)行;若檢查成功,驗證者進一步計算e 二樹m) J = ^r1,計算并驗證= d。若 KgziUei) 二 C/則接受簽名,否則拒絕。發(fā)明人強調(diào),在簽名的的產(chǎn)生和驗證過程中,某些操作或計算(比如簽名產(chǎn)生過 程中e,d的計算順序等,簽名驗證過程中的公鑰證書有效性的驗證,zeZq,deZq,aeG', Jje&等的驗證)的順序可以變化和組合,其順序?qū)灻纳珊万炞C的正確性不關(guān)鍵。 但是,合適的驗證操作順序可以盡早發(fā)現(xiàn)簽名的錯誤,從而節(jié)省驗證時間。另外若f的值域 不包含在\中,則驗證者不需檢查d e Ztl ;若ζ的值域不包含在\中,則驗證者亦不需檢查 ζ e Ztl,但為了提高計算效率,驗證者可以計算ζ := zmodq。為了在簽名中證明簽名者知道其簽名私鑰w,在上述所發(fā)明的數(shù)字簽名方案中,可 令 d = f(a, U)(即,令 auxd = {U}) ^f {a,U,A)(即,令=),和 / 或令 e = h(m, U)(即,令 auxm = {U})或 h(m,U, A) ( BP,今 auxm = {U, A})。為了提高發(fā)明的數(shù)字簽名方法的在線/離線效率,簽名者和驗證者可做如下在線 /離線操作驗證者離線預計算若簽名驗證者在接收到簽名之前就知道要簽名的信息m, 可以預先計算并存儲e = h(m);若ζ = er+dw e Zq,驗證者可進一步預先計算并存儲 e = e_l e Z9 ο簽名者離線預計算若ζ = (er+dw)modq』可事先計算并存儲P1J2,…,Ωη}, η彡1,其中對于任意的i,l彡i彡n,Qi = Iri, φ, diW},巧是一個從Zq或{0,1}1中隨機 選取的值,<=/(g"),CliWeztl^z= (dr+ew)m0dq,j 可事先計算并存儲{ Σ 2,…, Σ η},η彡1,其中對任意的i,l彡i彡η,Σ i = {屯,c^},巧是一個從Zq或{0,1}1中隨機 選取的值,式二/(f),diri e Zq0在線簽名生成在接收到要求簽名的信息m后,簽名者^計算e = h(m)。若ζ = (er+dW)modqj拿到一個預先存儲的尚未在之前的簽名中使用的Qi= {ivc^diW},計算ζ =(eri+d^modq,并將(屯,ζ)作為對m的簽名。注意,因為diW已經(jīng)事先計算好,i不需計 算diW。為了找到預先存儲的尚未在之前的簽名中使用的Qi = Iri, φ, diW},一般而言,i 可以運行一個計數(shù)器i,i的初始值設(shè)為l,i每簽一次名令i := i+1 ;或者,對于每一個Qi =Iri, Cli, CliWj, 1 ^ i彡n,一旦Qi在簽名中被使用,將Qi刪除(這樣,留下來的都是尚 未在簽名中使用的Ω》。同樣的方法可用在下述當ζ = (dr+ew)modq時尋找存儲的尚未使 用的Σ i = Wi,屯巧}。若ζ = (dr+eW)modq,^拿到一個預先存儲的尚未在之前的簽名中使用的Σ i ={屯,屯巧},計算ζ = diri+ew(m0dq),并將(φ, ζ)作為對m的簽名。注意,對于這種方式,若 i預先知道待簽名的信息m,i還可預先計算e = h(m)和ew,以進一步提高在線效率。
本發(fā)明給出一個新的數(shù)字簽名方法,與Schnorr簽名方案和數(shù)字簽名標準(DSS) 方案相比,我們提出的新的數(shù)字簽名方法既具有嚴格的可證明安全同時具有比DSS方案更 優(yōu)的在線/離線效率。所發(fā)明的新的數(shù)字簽名方法可在各種需要數(shù)字簽名的應(yīng)用中應(yīng)用, 特別地,所發(fā)明的新的數(shù)字簽名方法特別有利于在基于智能卡的數(shù)字簽名及相關(guān)電子商 務(wù)、政務(wù)中應(yīng)用。本發(fā)明的數(shù)字簽名方法的目標是在保證安全性的基礎(chǔ)上獲得更好的在線 /離線計算效率。
權(quán)利要求
1.一種在線/離線數(shù)字簽名方法,其中,i表示簽名者,j的公鑰為U = gi e G,i的私 鑰為we Ztl= {0,1,2,…,q_l},其中g(shù)是一個階為N的有限群G'中的一個階為素數(shù)q 的循環(huán)子群G的生成元,i的公鑰證書為CMr5,m為待簽名的信息,左表示簽名驗證者,所述 方法包括由所述簽名者得到e = h(m,aUXm),其中h {0,1}* — Zq是一個從{0,1}*到\的 抗碰撞的轉(zhuǎn)換函數(shù)且m是h的輸入之一,aiDcm是一個包含{i/j,m}的集合的能夠為空的子集 合,其中,{0,1}*表示的是任意0-1串的集合;由所述簽名者得到r e Zq,a = f和/或d = f(a,aiDcd),其中f是一個從{0,1}*到\ 的轉(zhuǎn)換函數(shù)且a是f的輸入之一,auxd是一個包含{ /,么樹的集合的能夠為空的子集合;由所述簽名者計算ζ,其中ζ的計算基于er+dw或dr+ew ;由所述簽名者將s = {d,z,auxj或s = {a,z,au&}或s = {a,d,z,au%}作為對信息 m的數(shù)字簽名,其中,{···}表示一個信息或數(shù)值的集合,aUXi,l < i ( 3,是一個包含0,6, } 的集合的能夠為空的子集合,“e—1 ,力二丄1€217,£0^,£0^,£1皿1,£1皿2,£1皿3以及函數(shù) h,f或者是固定的并被所有的用戶事先獲知,或者被包含在證書中,或者在協(xié)議運行之前被 交換和協(xié)商;由所述簽名驗證者得到所述簽名者的公鑰U、公鑰證書CMl、{m,s}之后,首先驗證所 述公鑰證書的有效性,若驗證通過,則所述簽名驗證者得到e = h(m,auxffl)并按照如 下情況之一驗證簽名的有效性若ζ的計算基于er+dw且d e s,則所述簽名驗證者得到“一 eZ,,計算并驗證 /( ",《 &)="或者=一“⑷,若驗證成功,則接受簽名,否則拒絕;若ζ的計算基于er+dw且a e s但^/ g $,則所述簽名驗證者得到 = e"' e Ζ,和d = f (a, auxd),并驗證二 α或/(一= d,若驗證成功,則接受簽名,否則拒絕;若ζ的計算基于dr+ew且d e s,則所述簽名驗證者得到J = W1SZ^并驗證 /($2 <卯;0 = ^/或者^/ = f(a,auxd)^gziU^ ^a,若驗證成功,則接受簽名,否則拒絕;若ζ的計算基于dr+ew且a e s但Jg $,則所述簽名驗證者得到d = f (a,auxd)和 2 二 cT、Zq,并驗證= α或JXg。Uei,awcd) = d,若驗證成功,則接受簽名,否則拒絕。
2.如權(quán)利要求1所述的方法,其中,若所述簽名驗證者在得到簽名之前事先知道m(xù),或 所述簽名者i在產(chǎn)生簽名之前事先知道m(xù),則所述簽名驗證者和/或所述簽名者能事先計算 并存儲 e = h (m,auxffl)和 / 或 = β"' e Z9 ;若ζ的計算基于er+dw,則事先計算并在i中存儲Ω2,…,Ω J, η ^ 1,其中對于 任意的 i,1 彡 i 彡 η,Ω; G {η, w},Γ e Z^di = f(gr',auxd);若ζ的計算基于dr+ew,則事先計算并在i中存儲{ Σ Σ 2,…,Σ J , η ^ 1,其中對 任意的 i,1 彡 i 彡 η,Σ,· G {diyd^} , Γ e Zq,^ ^f(g\auxd);當所述簽名者在線數(shù)字簽名的時候,在這些事先離線存儲的值中找出之前簽名尚未使 用的Qi或[i,并將Qi或[的值直接用于在線的簽名生成,若ζ的計算基于dr+ew且 i預先知道待簽名的信息m,i還能預先計算e = h (m,auxffl)以及ew或ew (modq)。
3.如權(quán)利要求2所述的方法,其中,對任意的i,l彡i彡n,令Qi={ri; Cli, CliWj, Σ i =Idi, (1Λ},其中 α 是一個從 Ztl 或{0,1}1 中隨機選取的值,CliW e Zq, Cliri e Zq, 1 ^ q是一個正整數(shù),I q|表示以2進制表示的q的長度,{0,I}1表示的是所有長度為1的0_1串 的集合。
4.如權(quán)利要求1至3任一項所述的方法,其中,i通過在{0,1}1或Ztl中隨機選取r得 到r e Ztl或者利用一個從{0,1}*到{0,1}1或Ztl的偽隨機函數(shù)產(chǎn)生,其中1彡q|是一個 正整數(shù),{0,I}1表示的是所有長度為1的0-1串的集合;令h為一個從{0,1}*到{0,I}1或 Zq的抗碰撞的哈希函數(shù);令f為一個從{0,1}*到Ztl或{0,1}1抗碰撞的哈希函數(shù),或者f (a, auxd) = amodq 或(amodN)modq 或(amod(N+l))modq,或者若 a = (χ, y) e G 表示的是橢 圓曲線上的一個點,其中χ e Zq,y e 2,為坐標值,定義f(a,auxd) 二乂或^…肌。=y ; 令aiDcd為空集或aiDcd = {U}或= {U, Α),并且/或者令aiDcm為空集或aiDcm = {U}或 auxm = {U, Α} ο
5.如權(quán)利要求4所述的方法,其中,基于er+dw的ζ的計算方式有z= er+dw, ζ = er+dw ^ Zq、ζ = (er+dw)modq、ζ = (er modq) + (dw modq)、ζ = ((er modq) + (dwmodq)) modq、ζ = er+dw+ α q,其中 α 是一個整數(shù);基于 dr+ew 的 ζ 的計算方式有:z = dr+ew、ζ = dr+ew e Zq、ζ = (dr+ew)modq、ζ = (dr modq) + (ewmodq) Λ ζ = ((dr modq) + (ewmodq))modq、ζ = dr+ew+β q,其中 β 是一個整 數(shù)。
6.如權(quán)利要求5所述的方法中,其中,所述簽名驗證者在驗證簽名時檢查de Ztl或 de {0,1} S若檢查失敗則拒絕接受簽名;和/或,若所述簽名者計算得到ζ e Z,,所述簽名驗證者在驗證簽名時驗證ζ e Ztl,若 zg A則拒絕接受簽名;若所述簽名者計算得到的ζ不能保證屬于Ztl,所述簽名驗證者 計算/(一"乂《巧)的其它方式有f y鄉(xiāng)U^auxJ,計算y(一其它方式有 Agizmoi^Uei,auxd)。
7.如權(quán)利要求6所述的方法,其中,若ζ= er+dw,啟如下得到 = ^ e s鄉(xiāng)驗證 6 z^ 且& = 1,若驗證通過則直接得到 ;若 電s,i計算一得到 ;若ζ = dr+ew,力如下得到J = d~] 若J e S 驗證^ e Z且d = 1,若驗證通過則直接得到J ;若^ 5 j計算cT1得到J。
8.如權(quán)利要求7所述的方法,其中,令a= ^eG;若a e s,所述簽名驗證者檢查a eG, 若“G,則所述簽名驗證者拒絕接受簽名。
9.如權(quán)利要求8所述的方法,其中,令w=-W',其中W' GZt^hU = Sw' eG。
全文摘要
提供了一種在線/離線高效的數(shù)字簽名方法。記簽名公鑰為U=g-w,私鑰為w∈Zq,f,h{0,1}*→Zq為兩個轉(zhuǎn)換函數(shù),m為待簽名的信息。簽名者得到e=h(m)、r∈Zq、d=f(gr),計算z=er+dw或z=dr+ew,并將(d,z)作為m的簽名。簽名的有效性通過計算或驗證,其中若z=er+dw,簽名者可離線預計算{r,d,dw};若z=dr+ew,簽名者可離線預計算{d,dr}。
文檔編號H04L9/32GK102064940SQ20091019873
公開日2011年5月18日 申請日期2009年11月13日 優(yōu)先權(quán)日2009年11月13日
發(fā)明者丁素芬, 姚期智, 趙運磊 申請人:丁素芬, 姚期智, 趙運磊