摘要:介紹了數(shù)字簽名背景、簽名體制的形式化描述以及兩個特殊的數(shù)字簽名方案。對如何用RSA實現(xiàn)盲簽名和多重數(shù)字簽名方案進行了研究,分析了兩種具體方案實現(xiàn)的安全性。最后總結了這兩種特殊數(shù)字簽名實現(xiàn)過程中算法設計的優(yōu)劣。
關鍵詞:數(shù)字簽名;RSA;盲簽名;多重簽名
中圖分類號:TP316文獻標識碼:A文章編號:1009-3044(2008)35-2095-02
Two RSA-based Special Digital Signature Schemes
JIANG Jun-feng
(Engineering of Information Hohai University,Changzhou 213022,China)
Abstract: The background, the formal definition and some special form of digital signature are firstly introduced.The research of how to realize the blind signature and the multisignature with RSA signature scheme are carried out secondly. The virtue and shortcoming of the two realized special digital signature schemes and the research to be continued are lastly put forward.
Key words: digital signature;RSA;blind signature;multisignature
1 引言
1.1 背景
簽名一直被作為一種證明簽名者身份的標識,它表明簽名人看過乃至同意文件的內(nèi)容。簽名人作出簽名后將無法否認,并要為自己的簽名負責。隨著密碼學的發(fā)展,數(shù)字簽名(digital signature)克服了手寫簽名的缺點。數(shù)字簽名[1]具有簽名可信性、不可抵賴性、不可復制性、不可偽造性和數(shù)據(jù)完整性的優(yōu)點。2004年8月我國正式頒布了《中華人民共和國電子簽名法》,確立了數(shù)字簽名在我國的法律效力和地位。
1.2 數(shù)字簽名的形式化定義
簽名體制[2]是一個滿足一下兩個條件的概率多項式時間算法的三元組(G,S,V)。
1) 當輸入1n時,算法G(調(diào)用密鑰生成器)輸出一對比特串。
2) 對G(1n)值域中的每一對(s,v),以及每個α∈{0,1}*,算法S(簽名)和V(驗證)滿足:Pr[V(v, α,S(s, α)=1)]=1
這里的概率定義在算法S和V的所有內(nèi)部擲幣值上的。S(s, α)稱為簽名密鑰對文檔α產(chǎn)生的簽名,當V(v, α,β)=1時稱β是α對應與驗證密鑰v的有效簽名。
數(shù)字簽名主要基于公鑰算法。其中RSA基于大整數(shù)難以分解為兩個素數(shù)的乘積。特點是算法簡單和安全。RSA是目前使用比較普遍的數(shù)字簽名算法。ISO/IEC 9796和ANSI X9.30-199X已將RSA作為建議數(shù)字簽字標準算法。在制定的標準中,PKCS#1是一種采用雜湊算法(如MD2或MD5等)和RSA相結合的公鑰密碼標準。
1.3 幾種特殊的數(shù)字簽名
人們根據(jù)不同的應用背景和簽名目的,研究出了幾種特殊的簽名方案:盲簽名方案,多重簽名方案,代理簽名方案,群簽名方案等等。
盲簽名方案(Blind-signature Scheme)是由D.Chaum[3]與1982年最先提出的。某人對一個文件簽字,但又不讓他知道文件內(nèi)容,這點使盲簽名應用在許多領域,比如電子投票系統(tǒng),電子拍賣系統(tǒng)和電子現(xiàn)金系統(tǒng)。
一般的數(shù)字簽名是由單個用戶完成的,而由多人參與對同一文件進行的簽名方案,稱為多重簽名方案(Multisignature Scheme)。多重簽名方案是D. Chaum 和E.van Heyst[4]于1991 年提出的。根據(jù)簽名過程的不同,多重數(shù)字簽名可分為有序多重數(shù)字簽名方案和廣播多重數(shù)字簽名方案。
2 方案實現(xiàn)
2.1 盲簽名方案
下面介紹用RSA實現(xiàn)的盲簽名方案。整個過程分為:密鑰建立與管理、消息盲化、簽名、消息解盲和簽名驗證。
2.1.1 盲簽名過程
1) 密鑰的建立與管理
設有參與盲簽名的人分別是A和B,A知道消息M,讓B進行盲簽名。首先建立RSA密鑰,任意選取兩個大素數(shù)p及q ,計算n = pq。φ(n)為n的歐拉函數(shù)。任意選擇一個整數(shù)e, 使得(e,φ(n))=1,計算d (1 2) 消息盲化 A進行對消息M盲化:選用盲因子k,1 3) 簽名過程:A把盲化過的消息t發(fā)送給B,B對t進行RSA簽名,計算S(t) = td = (Mke)d (mod n) 4) 消息解盲: B將簽名S(t)傳送給A。A通過下面的運算獲得B對消息M的直接RSA簽名。 Sig = S(t)/k≡ td/k≡ Md (mod n) 對上步等式的證明:td≡(Mke)d≡Mdk(mod n)#8658;td/k≡Mdk/k≡Md(mod n)。 5) 簽名驗證:A利用B公布的(e,n)對消息進行驗證。 M'=Sige(mod n) 若M'=M,則驗證通過,否則驗證失敗。 2.1.2 盲簽名方案的安全性分析 匿名性和不可偽造性:B在獲取了t=Mke (mod n),B不知道盲因子k,所以B在多項式時間內(nèi)無法推出M的值。這種盲化方法具有匿名性。B簽名后如果被攻擊者截取,因為攻擊者不知道B的私鑰d,所以也無法偽造簽名Sig。 2.2 多重簽名方案 下面介紹基于RSA的有序多重簽名方案。整個過程分為:密鑰建立與管理、多重簽名、部分簽名多重驗證和簽名驗證。 2.2.1 多重簽名過程 1)用戶密鑰建立和管理 設有參與多重簽名的人分別是U1,U2,…,Un。他們都使用RSA密碼體制進行簽名。首先建立RSA密鑰,任意選取兩個大素數(shù)pi及qi ,計算ni = piqi。任意選擇一個整數(shù)ei ,使得(ei,φ(ni))=1,計算di (1 2) 有序多重簽名 簽名者U1 對M的散列值進行簽名,計算m=H (M), S1≡(m)d1(mod n1)。U1把簽名結果S1傳遞給下一個簽名者U2 , U2首先驗證簽名S1的正確性,驗證如下: 計算m'(S1)e1(mod n1)以及m =H (M),如果m′ =m說明簽名正確,否則,簽名不正確。 當驗證部分簽名通過后, U2 簽名如下:S2≡(S1)d1(mod n2)然后U2把S2傳遞給U3,U3首先驗證簽名S2的正確性。同樣首先計算m'≡[(S2)e2(mod n2)]e1(mod n1), 如果m′ =m說明簽名正確,否則,簽名不正確。 依次類推,當簽名者Ui(1≤i 3) 驗證多重簽名: 計算m'≡(((Sn)en(mod nn))en-1(mod nn-1)…)e1(mod n1)和m=H (M ) 如果m′=m,說明簽名正確,否則簽名不正確。 2.2.2 多重簽名方案的安全性分析 1) 簽名可信性:對于最終的簽名Sn,其他人接收到最終簽名的過程中,攻擊者有可能竊取并對其進行篡改。但是其他人都可以利用公布的(en,nn)來驗證簽名Sn的正確性;對于部分簽名Si(1≤i 2) 不可偽造性:對于最終的簽名Sn,攻擊者截取進行冒充簽名是不可能的,因為攻擊者不知道dn。對于部分簽名Si(1≤i 3) 防止收到已知簽名攻擊(know-signature attack):文獻[1]中提到,克服已知簽名攻擊的有效方法是選擇安全Hash函數(shù)對簽名的消息做Hash變換,然后再對變換后的消息摘要進行簽名。因此在多重簽名方案中,在簽名之前現(xiàn)對消息M做了Hash變換,所以這個方案可以有效防止收到已知簽名攻擊。 3 小結 文章使用RSA分別實現(xiàn)了盲簽名和有序多重簽名。通過安全性分析,盲簽名方案具有匿名性和不可偽造性。在實現(xiàn)盲簽名時沒有使用哈希函數(shù),對于短消息適用并且簽名速度快。但是對于長消息簽名速度比較慢,RSA是冪模運算,當?shù)讛?shù)M很大時,運算量很大。下面要做的工作是考慮如何把簽名和摘要結合起來。 多重簽名具有可信性、不可偽造性和防止收到已知簽名攻擊。由于多重簽名中產(chǎn)生的密鑰對較多,密鑰的產(chǎn)生、發(fā)放和管理等操作比較繁瑣。應該用數(shù)字證書來管理多重簽名每個用戶的公鑰和密鑰。 參考文獻: [1] 徐茂智,游林.信息安全與密碼學[M].北京:清華大學出版社,2007. [2] Goldreich O.密碼學基礎[M].2卷.北京:人民郵電出版社,2005. [3] Chaum D.Blind signature for untraceable payments[A].Proc.Crypto'82[C].New York:Plenum Press,1983:199-203. [4] Harn I,Keisler T.New scheme for Digital Multisignature[J].Electronic Letters,1989,25(15):1002-1003.