唐文龍
(百色學(xué)院,廣西 百色 533000)
在分布式的網(wǎng)絡(luò)環(huán)境中,各節(jié)點(diǎn)希望能夠充分利用互聯(lián)網(wǎng)中所蘊(yùn)含的潛在計(jì)算資源,因?yàn)檫@些節(jié)點(diǎn)在地理位置是處于不同位置,而且還具有匿名性、身份隨意性和可用性動態(tài)變化等特點(diǎn)。節(jié)點(diǎn)提供資源共享服務(wù)只是一種自愿且不可靠的行為,不用承擔(dān)任何法律責(zé)任。如何建立適應(yīng)網(wǎng)絡(luò)動態(tài)復(fù)雜性及惡意節(jié)點(diǎn)行為的節(jié)點(diǎn)間身份快速認(rèn)證,使信任機(jī)制更加客觀合理,是當(dāng)前亟待解決的問題。針對這種情況,結(jié)合零知識證明并結(jié)合加密算法,建立節(jié)點(diǎn)間的快速身份認(rèn)證方案。
(1)零知識證明的概念
1985年,Shafi Goldwasser,Silvio Micali和Charles Rackoff提出了零知識交互式證明的概念?!傲阒R證明”說的是示證者向驗(yàn)證者表明他知道某種秘密,不僅能使驗(yàn)證者完全確信他的確知道這個秘密,同時還保證一丁點(diǎn)秘密也不泄露給驗(yàn)證者?!爸R”,可以是口令,公鑰系統(tǒng)中的私鑰,某個數(shù)學(xué)難題的一種解決方法,一系列的證書等等。因此,零知識證明就是證明方擁有某些知識,在不將該知識的內(nèi)容泄露給驗(yàn)證方的前提下,向驗(yàn)證方證明自己擁有該知識。在這個過程中,一方面,驗(yàn)證方不可能向任何第三方假冒證明方,因?yàn)樗麤]有得到關(guān)于這個秘密的任何一點(diǎn)信息。[1]另一方面,證明方不可能欺騙驗(yàn)證方,因?yàn)檫@個過程重復(fù)了很多次,證明方欺騙成功的概率很小。
(2)零知識身份認(rèn)證
如果我們把合法用戶的個人信息看作是證明方的知識,證明方通過零知識證明向驗(yàn)證方證實(shí)自己的身份就是零知識身份認(rèn)證。零知識身份認(rèn)證是零知識證明在身份認(rèn)證方面的應(yīng)用。目前的零知識身份認(rèn)證方案主要有四種: Fiat-Shamir身份認(rèn)證、Feige-Fiat-Shamir身份認(rèn)證、Guillo-Quisquater身份認(rèn)證和Schnorr身份認(rèn)證。其中Fiat-Shamir身份認(rèn)證是最早提出的,也是最基礎(chǔ)的零知識身份認(rèn)證方案,其他三種方案是對Fiat-Shamir的改進(jìn)[2]。
RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導(dǎo)出解密密鑰在計(jì)算上是不可行的”密碼體制。
(1)隨機(jī)選取2 個大素?cái)?shù)p、q,計(jì)算n = p · q
(2)計(jì)算 fx = ( p -1) · (q -1),然后隨機(jī)選取e,滿足 1 < e <fx,且 gcd(e,fx) = 1
(3)計(jì)算 d,使之滿足 1 < d < fx 且 e ·d ≡1(mod fx) ,B 的公鑰是(n,e),私鑰是(d, p,q)
(4)H( n,e)是單向無碰撞的散列函數(shù)。第三方公布(n,e)和H。
RSA認(rèn)證方案雖然可以解決通信雙方之間的認(rèn)證問題,但在分布式環(huán)境里會導(dǎo)致系統(tǒng)負(fù)擔(dān)過重,效率低下。
由于在RSA認(rèn)證方案中,任意選取的整數(shù)e,而e這個數(shù)太小則安全性不高,太大了則系統(tǒng)性能下降,特別在分布式環(huán)境里,節(jié)點(diǎn)間相互認(rèn)證如果花的時間太多,會導(dǎo)致網(wǎng)絡(luò)時延,影響性能。針對這一情況,對RSA認(rèn)證算法的e的取值進(jìn)行變換。
(1)對于e ·d ≡1(mod fx)式中的e是個大整數(shù)。
(2)取e=by,b為質(zhì)數(shù),且gcd(by,fx) = 1
(3)認(rèn)證算法:節(jié)點(diǎn)m計(jì)算出密文,明文及明文的數(shù)字摘要傳至節(jié)點(diǎn)n
C=pe(mod fx), e=by;
p’=IDEA(p,k),IDEA為分組加密算法,k為雙方協(xié)商的密鑰;
p’’=H(p’),H(p’)為用預(yù)定的散列算法對 p’進(jìn)行散列得到摘要信息p’’;
節(jié)點(diǎn)m發(fā)至節(jié)點(diǎn)n實(shí)際是(c,p’,p’’)兩方內(nèi)容。
(4)驗(yàn)證算法:節(jié)點(diǎn) n根據(jù)節(jié)點(diǎn) m所發(fā)的三部分(c,p’,p’’)進(jìn)行驗(yàn)證
P=Ce(mod fx),e=by;
判斷P是否與IDEA(P’)相等,H(p)是否與P’’相等;
認(rèn)證結(jié)束。
在改進(jìn)的認(rèn)證方案中,由于e=by,中的指數(shù)復(fù)雜性,第三方很難知道e,IDEA加密算法和散列函數(shù)的運(yùn)用,增加了認(rèn)證的安全性但效率高。在改進(jìn)的算法中,縮短了認(rèn)證過程時間。
在分布式系統(tǒng)中,利用零知識證明原理構(gòu)建身份認(rèn)證可以使證明過程更安全。零知識證明中節(jié)點(diǎn)間使對方相信自已知道某一知識,但并不向?qū)Ψ叫孤┯嘘P(guān)信息。利用零知識證明進(jìn)行節(jié)點(diǎn)間相互認(rèn)證,需要利用第三方認(rèn)證中心CA來維護(hù)系統(tǒng)的公用參數(shù)和用戶的密鑰。
基于零知識證明的認(rèn)證方案由3 個部分組成:系統(tǒng)初始化,用戶注冊協(xié)議和身份認(rèn)證協(xié)議。
認(rèn)證的前提是認(rèn)證雙方都需要具有第三方所簽發(fā)的證書,這個第三方就是CA認(rèn)證中心,它是采用PKI(Public Key Infrastructure)公開密鑰基礎(chǔ)架構(gòu)技術(shù),專門提供網(wǎng)絡(luò)身份認(rèn)證服務(wù),負(fù)責(zé)簽發(fā)和管理數(shù)字證書,且具有權(quán)威性和公正性的第三方信任機(jī)構(gòu)。在方案中,CA選取以下參數(shù)。
p、q:大素?cái)?shù),用于構(gòu)建fx;
b,y∶相對小的數(shù),構(gòu)建e=by;
k:只對認(rèn)證雙方公開的IDEA加密算法密鑰;
d∶私鑰;
H() :單向哈希函數(shù)。
在初始化過程中,不能暴露用戶的私鑰信息。也不能使CA工作人員泄露信息。
設(shè)定用戶為Jack,CA認(rèn)證中心名為SA和中間機(jī)構(gòu)SB。注冊的要求就是Jack從機(jī)構(gòu)SA獲得公鑰和私鑰,但是不能對SA泄露個人私鑰。這樣對于公鑰、私鑰的產(chǎn)生就遵循一些協(xié)議,如公鑰和私鑰不能簡單由一個部門產(chǎn)生,而是由幾個權(quán)威部門交叉產(chǎn)生。注冊階段主要是做這些工作,其內(nèi)容簡要如下:
(1)Jack用戶選擇自已的ID身份標(biāo)識
(2)Jack用戶選擇隨機(jī)數(shù)b,b∈[2, p*q],由處于異地位置SB產(chǎn)生隨機(jī)數(shù)y,by與互質(zhì),v=idea(p,q,by),發(fā)送v,ID發(fā)送給SA。
(3)SA對Jack的ID進(jìn)行檢查,若通過則進(jìn)行以下運(yùn)算∶選擇隨機(jī)數(shù) p、q并計(jì)算 fx = ( p -1) · (q -1),且gcd(by,fx) = 1。計(jì)算Jack的公鑰和私鑰。所用的公式是為:by·d ≡1(mod fx)。
(4)Jack的計(jì)算機(jī)根據(jù)公鑰和公鑰的證據(jù)計(jì)算其私鑰,私鑰的計(jì)算機(jī)是在Jack的計(jì)算機(jī)上完成的,計(jì)算機(jī)結(jié)果根據(jù)公鑰的證據(jù)動態(tài)變化,所以是安全的。
設(shè)有兩個用戶Jack和Bob,兩個的密鑰對為(PJ,SJ)、(PB,SB),身份標(biāo)識付為IDJ和IDB。假設(shè)Jack和Bob希望通過公開密鑰加密方法進(jìn)行數(shù)據(jù)傳輸,但是只公開加密算法和密鑰而不公開解密算法和密鑰。Jack和Bob加密算法為E1和E2,解密算法分別為D1和D2,E1和D1互逆,E2和d2互逆
兩人的認(rèn)證(假如Jack向Bob認(rèn)證)步驟如下:
(1)Jack通過自已的公鑰PJ對一個隨機(jī)數(shù)e和IDJ進(jìn)行加密:c1=E1(e),c2=E1(PJ),為了方便 c1 和 c2都用 c表示。并將這兩個密文發(fā)給BOB。
(2)Bob隨機(jī)地選取其中一個發(fā)送給Jack,Jack利用自已的私鑰對其解密D1 (c),如果沒有發(fā)生改變則繼續(xù)。
(3)Bob對另一個密文用自已的私鑰 SB進(jìn)行加密得c’=E2(c),再把c’發(fā)送給jack
(4)Jack用Bob的PB對其進(jìn)行解密。由于
E2(E1(m))=E1(E2(m))
E1(D2(c))=E1(D2(E2(D1(m))))=E1(D1(m))
如果 Jack的解密結(jié)果沒有發(fā)生改變,就可以證明其身份。同理可以通過上面算法相互認(rèn)證,該方案可以快速在分布式網(wǎng)絡(luò)進(jìn)身份雙向認(rèn)證。
(1)認(rèn)證雙方的安全性主要依賴于大數(shù)分解,但是否等同于大數(shù)分解一直未能得到理論上的證明,因?yàn)闆]有證明破解RSA密碼就一定需要做大數(shù)分解。但在方案中用by來表示e,對于y這個值有少量變化,e就會有大的改變。從而增強(qiáng)算法的安全性。
(2)網(wǎng)絡(luò)偵聽(Sniff):在網(wǎng)絡(luò)上,任何一臺主機(jī)所發(fā)送的數(shù)據(jù)包,都會通過網(wǎng)絡(luò)線路傳輸?shù)街付ǖ哪繕?biāo)主機(jī)上,所有在這個網(wǎng)絡(luò)線路上的主機(jī)都可以偵聽到這個傳輸?shù)臄?shù)據(jù)包。這種攻擊一般需要進(jìn)入到目標(biāo)主機(jī)所在的網(wǎng)絡(luò)內(nèi)部,選擇一臺主機(jī)實(shí)施網(wǎng)絡(luò)監(jiān)聽[3]。但是在方案中,Jack和Bob所傳輸?shù)男畔⒍歼M(jìn)行特殊處理,所有在不安全信道中傳輸?shù)男畔⒍际遣捎肦SA加密算法的,攻擊者如想要破譯出明文,就是要解決RSA的大數(shù)分解問題。由于在方案中由by代替e,這樣在短時間內(nèi)是不可能破譯出密鑰的,即使通過偵聽將認(rèn)證階段的所有信息都得到了,由于不知道Jack和Bob的私鑰SJ和SB,也就無法解出信息,不能偽裝成其他用戶欺騙Jack和Bob。
(3)選擇明文攻擊:分析者不僅可得到一些消息的密文和相應(yīng)的明文,而且我們也可選擇被加密的明文。這比已知明文攻擊更有效。因?yàn)槲覀冎辉诔跏茧A段隨機(jī)生成了信息C,并且通過安全信道傳輸C,因此除了Jack和Bob外沒有人知道C,而且在認(rèn)證階段時是在逐步中才根據(jù)信息生成C,如果在攻擊時判斷是否為初始階段是不可行的,因此選擇明文攻擊是不可行的。
文章結(jié)合安全性高于其它密碼體制的RSA密碼體制和零知識證明的特點(diǎn),構(gòu)建了網(wǎng)絡(luò)節(jié)點(diǎn)的身份快速認(rèn)證方案.。該方案簡單,不需要可信賴的第三方參與,而且可以抵御重放攻擊、網(wǎng)絡(luò)偵聽、選擇明文攻擊和并行會話攻擊。
[1] William Stallings.Cryptography and Network Security Principles and Practices,FourthEdition(第 4 版)[M].北京:電子工業(yè)出版社,2006:301-313.
[2] 邱成剛,李方偉,譚利平.基于雙線性對和公鑰自證明的認(rèn)證加密方案[J].重慶郵電大學(xué)學(xué)報(bào):自然科學(xué)版,2007,19(5):610-612.
[3] 張虎強(qiáng),洪佩琳,李津生.一種零知識證明協(xié)議的安全分析與改進(jìn)[J].信息安全與通信保密,2006,(11):56-59.