殷小虹
(江西傳媒職業(yè)學(xué)院,江西 南昌 330224)
遠(yuǎn)程服務(wù)器需要通過公共信道對(duì)用戶進(jìn)行認(rèn)證。在以前的大多數(shù)雙因素方案中,用戶的身份證明在公共信道上以明文形式傳輸。因此,它們不能提供用戶隱私保護(hù)。由于用戶的身份信息在所有事務(wù)會(huì)話中是靜態(tài)的,攻擊者可以將不同的登錄會(huì)話鏈接在一起跟蹤用戶的活動(dòng),這導(dǎo)致用戶部分信息的泄漏。為了解決這些問題,Das等[1]提出了一種基于動(dòng)態(tài)ID的遠(yuǎn)程用戶認(rèn)證方案,這種基于動(dòng)態(tài)身份的認(rèn)證技術(shù)可以提供用戶匿名性。Kim等[2]的方案容易受到智能卡丟失攻擊、被盜驗(yàn)證者攻擊和特權(quán)內(nèi)部人攻擊。此外,這種方案也不具備完美的前向保密性和用戶匿名性。
筆者簡(jiǎn)要描述Kim等提出的雙因素方案。Kim等的方案由5個(gè)階段組成,即注冊(cè)階段、登錄階段、認(rèn)證和密鑰交換階段、相互認(rèn)證和密鑰確認(rèn)階段以及離線口令修改階段。Kim等的方案使用的符號(hào)和縮寫如表1所示。
表1 NOTATINS
當(dāng)一個(gè)用戶Ui想要向服務(wù)器S注冊(cè)時(shí),Ui執(zhí)行以下操作:第一步。Ui,→S:{IDi,pwi}。用戶Ui選擇一個(gè)身份IDi和密碼pwi,然后Ui通過安全通道將{IDi,pwi}提交給服務(wù)器S。第二步。S→Ui:智能卡。在接收到消息{IDi,pwi},服務(wù)器S計(jì)算ni=h(IDi∣∣pwi),mi=ni⊕x,Ni=h(IDi)⊕h(pwi)⊕h(x)⊕h(mi)。參數(shù)ni由服務(wù)器S.S存儲(chǔ){h(.),Ni,ni},并通過安全通道將智能卡發(fā)送給Ui。
當(dāng)用戶Ui想要訪問服務(wù)器S,Ui將他的智能卡插入讀卡器并輸入他的身份IDi、密碼pwi。將執(zhí)行以下操作。第一步。智能卡計(jì)算動(dòng)態(tài)身份CIDi,Ai=h(IDi)⊕h(pwi),B=Ni⊕h(IDi)⊕h(pwi),CIDi=h(Ai)⊕h(h(ni)⊕Bi⊕h(Ni)⊕T)。第二步。ui→S:{CIDi,T,Ni,ni}。用戶U發(fā)送登錄請(qǐng)求{CIDi,T,Ni,ni}通過公共信道發(fā)送到服務(wù)器S,其中T是時(shí)間戳。
第一步。當(dāng)服務(wù)器S在時(shí)間T′接收到消息{CIDi,T,Ni,Ni}時(shí),S檢查時(shí)間戳T的有效性。如果T′-T≤ΔT,S在注冊(cè)列表中搜索nj。第二步。如果ni在注冊(cè)列表中,服務(wù)器S計(jì)算mi=ni⊕x,Bi=h(x)⊕h(mi),Ai=Bi⊕Ni。然后驗(yàn)證等式S是否成立:CIDi⊕h(Ai)=h(h(ni)⊕Bi⊕h(Ni)⊕T)。如果等式成立,S繼續(xù)下面的步驟。否則,S終止會(huì)話。第三步。S→Ui:{KC′,T′}。S計(jì)算會(huì)話密鑰SK=h(Ai∣∣Ti∣∣Bi∣∣T′)和密鑰確認(rèn)消息KC′=h(Bi∣∣SK∣∣T′)。然后S發(fā)送響應(yīng)消息{KC′,T′}給Ui。
第一步。當(dāng)在時(shí)間T″接收到響應(yīng)消息{KC′,T″)時(shí),用戶首先檢查時(shí)間延遲T″-T′≤ΔT。如果它有效,U將計(jì)算會(huì)話密鑰SK=h(Ai∣∣T∣∣Bi∣∣T′)和密鑰確認(rèn)消息KC=h(Bi∣∣SK∣∣T′)。接下來,用戶U檢查接收到的kc′是否等于KC。如果不相等,則拒絕。否則,Ui繼續(xù)。
第二步。Ui→S:{KC",T"}。用戶計(jì)算密鑰確認(rèn)消息KC″=h(Ai∣∣SK∣∣T′)并且將其發(fā)送到服務(wù)器S。第三步。服務(wù)器S計(jì)算出KC"=h(Ai∣∣SK∣∣T")。然后S檢查接收到的KC是否等于KC"。如果不成立,則拒絕Ui。否則,S接受Ui的請(qǐng)求。
與其他相關(guān)方案相比,Kim等的方案具有計(jì)算效率高、通信成本低等優(yōu)點(diǎn)。假設(shè)身份可以用32位寬度表示,安全單向散列函數(shù)的輸出大小是160位,時(shí)間戳的大小是32位。在該方案的登錄階段,用戶Ui需要發(fā)送消息(CIDi,T,Ni,ni)到服務(wù)器。它包含160×3+32=512位。在認(rèn)證和密鑰交換階段,服務(wù)器將(KC′,T′)發(fā)送回Ui。它的長度是160+32=192位。最后,在相互認(rèn)證和密鑰確認(rèn)階段,Ui向服務(wù)器發(fā)送密鑰確認(rèn)消息。它的長度為192位。因此,此方案通信成本低。此外,Kim等的方案中的登錄階段在智能卡端只需要6次散列運(yùn)算和6次異或運(yùn)算。在身份驗(yàn)證和密鑰交換階段,服務(wù)器需要8次哈希運(yùn)算和6次異或運(yùn)算。在相互認(rèn)證和密鑰確認(rèn)階段,該方案需要在智能卡端進(jìn)行3次哈希運(yùn)算。該方案保持了智能卡的低計(jì)算量特性[3,4]。
Kim的方案支持用戶免密碼更新。在密碼更改階段,用戶僅使用智能卡更改其密碼和設(shè)置任何新密碼,不需要與服務(wù)器通信。因此,Kim等的方案實(shí)現(xiàn)了用戶友好性。但是,由于在更新新密碼之前沒有驗(yàn)證舊密碼的真實(shí)性,所以這是一種固有的安全威脅。在真正的雙因素應(yīng)用中,用戶確實(shí)傾向于讓他們的智能卡無人看管。例如,用戶將他們的智能卡遺忘在讀卡器中幾分鐘或幾天。如果攻擊者設(shè)法獲得合法用戶ui′的智能卡的臨時(shí)訪問權(quán),可以很容易地使用以下步驟更改用戶ui′的密碼:
第一步。對(duì)手首先將智能卡插入終端設(shè)備,并選擇兩個(gè)不同的密碼pw′和pw″分別作為舊密碼和新密碼。然后,對(duì)手用pw′和pw″鍵入ID,并向智能卡發(fā)出更改密碼的請(qǐng)求。
第二步。智能卡將計(jì)算Ni*=Ni⊕h(pw′)⊕h(pw″),然后用Ni*替換Ni。當(dāng)用戶Ui在隨后的認(rèn)證中使用智能卡訪問服務(wù)器時(shí),登錄請(qǐng)求永遠(yuǎn)不能通過服務(wù)器S的驗(yàn)證。因此,合法用戶Ui即使在取回他的智能卡之后也不能成功登錄。可以將攻擊描述如下。
因?yàn)閁i不知道存儲(chǔ)在卡中的信息的變化,Ui仍然使用pwi作為IDi的密碼。
智能卡計(jì)算A=h(IDi)+h(pwi),Bi*=Ni⊕h(IDi)i⊕h(pwi),CIDi=h(Ai)⊕h(h(ni)⊕Bi*⊕h(Ni*)⊕T)。
第三步。在接收到登錄請(qǐng)求{CIDi,T,Ni*,ni},S計(jì)算m=ni+x,Bi=h(x)⊕h(mi)。由于Bi*=Ni*⊕Ai和Bi=Ni+A,驗(yàn)證方程CIDi⊕h(Ai)=h(h(mi)⊕Bi⊕h(Ni⊕T)不成立。S將拒絕登錄請(qǐng)求。上面的描述證實(shí)了,一旦智能卡丟失,很容易發(fā)起Dos攻擊。
如果驗(yàn)證表存儲(chǔ)在服務(wù)器中,認(rèn)證方案將遭受驗(yàn)證信息的泄漏,這可能導(dǎo)致嚴(yán)重的安全缺陷。在Kim等的方案中,n是由服務(wù)器S保密。服務(wù)器維護(hù)所有唯一消息ni的驗(yàn)證者表,其使得協(xié)議容易受到竊取驗(yàn)證者攻擊[5]。
如果用戶的密碼可以在注冊(cè)階段由服務(wù)器導(dǎo)出,這樣的方案會(huì)遭受內(nèi)部攻擊。在Kim等的方案的注冊(cè)階段,用戶以明文的形式向服務(wù)器發(fā)送密碼pw。S直接獲取用戶的密碼pw。在實(shí)際應(yīng)用環(huán)境中,用戶可能使用同一個(gè)密碼登錄不同的服務(wù)器。惡意的特權(quán)內(nèi)部人員會(huì)使用該用戶的密碼登錄到其他服務(wù)器。因此,Kim等的方案不能抵抗內(nèi)部攻擊。
完美的前向保密意味著即使服務(wù)器的主密鑰x或用戶的密碼和身份被泄露,從協(xié)議的先前執(zhí)行中產(chǎn)生的任何會(huì)話密鑰也不會(huì)被泄露。Kim等的方案不能提供完美的前向保密性。假設(shè)對(duì)手截獲了某個(gè)登錄消息{CIDi,T,Ni,Ni}。利用泄露的密鑰x,計(jì)算出m=ni⊕xiB=h(x)⊕h(mi),A=Ni⊕B,因此,通過使用來自登錄請(qǐng)求和登錄響應(yīng)的兩個(gè)時(shí)間戳(T,T′),對(duì)手計(jì)算出會(huì)話密鑰SK=h(Ai∣∣T∣∣Bi∣∣T′)。
假設(shè)一個(gè)敵手已經(jīng)獲得了U的長期秘鑰A=h(IDi)⊕h(pwi)。密碼和身份都不會(huì)受到影響,但會(huì)出現(xiàn)兩種情況。
(1)會(huì)話密鑰將被泄露。進(jìn)一步假設(shè)對(duì)手已經(jīng)記錄了在服務(wù)器和用戶之間傳輸?shù)南?。?duì)手只需要第一次記錄整個(gè)登錄消息{CIDi,Ti,Ni,ni}和整個(gè)響應(yīng)消息{KC′,T′}。對(duì)于其他會(huì)話,對(duì)手只需要記錄兩個(gè)時(shí)間戳{T,T′}。知道了長期秘鑰A和先前會(huì)話的截獲消息,對(duì)手計(jì)算會(huì)話密鑰如下。對(duì)手計(jì)算Bi=Ai⊕Ni。對(duì)手檢索會(huì)話密鑰SK=h(Ai∣∣T∣∣Bi∣∣T′)通過使用截取的兩個(gè)時(shí)間戳{T,T′}。
(2)會(huì)導(dǎo)致冒充攻擊。有了秘鑰的Ai,對(duì)手可以冒充U來訪問S。第一步:對(duì)手計(jì)算出Bi=Ai⊕Ni,CIDi=h(Ai)⊕h(h(ni)⊕Bi⊕h(Ni)⊕T)。第二步:對(duì)手發(fā)送登錄請(qǐng)求消息{CIDi,T,Ni,ni}到服務(wù)器S。由于Bi=A⊕Ni=h(x)⊕h(mi),服務(wù)器S認(rèn)為消息是合法用戶發(fā)送的。同樣,有了長期秘鑰Ai,對(duì)手也可以冒充S來欺騙Ui[6]。
在開放的網(wǎng)絡(luò)環(huán)境中,假設(shè)用戶Ui將登錄請(qǐng)求消息{CIDi,T,Ni,ni}發(fā)送到服務(wù)器S。消息{Ni,ni}供用戶Ui專用,如果密碼沒有被更新,那么對(duì)服務(wù)器S的任何訪問都不會(huì)改變。此外,即使在密碼被改變之后,n對(duì)于用戶和服務(wù)器來說是相同的。也就是說n將注冊(cè)用戶與服務(wù)器綁定。因此,任何對(duì)手都可以通過檢查不同協(xié)議的{Ni,ni}或{ni}執(zhí)行是否相同來容易地跟蹤用戶。因此,即使用戶的身份沒有暴露,用戶的匿名性也沒有得到很好的保護(hù)。
先構(gòu)造整個(gè)屬性集自下而上的中心屬性樹,再構(gòu)造針對(duì)屬性子集的屬性子樹。后者由用戶和驗(yàn)證權(quán)威執(zhí)行,通過簡(jiǎn)化中心屬性樹生成得到,然后再由屬性權(quán)威和數(shù)據(jù)擁有者控制用戶屬性集的變化,在屬性權(quán)威設(shè)置新的屬性密鑰后,通過代理重加密技術(shù)讓云服務(wù)提供方升級(jí)屬性密鑰,并使用代理重加密技術(shù)處理密文,減輕云用戶計(jì)算負(fù)擔(dān)。使用代理重加密方法完成了云端取消用戶屬性的任務(wù)[7]。
本文提出的密鑰交換模式形式化定義屬性基認(rèn)證密鑰交換中用戶隱私性,將敵手模型化為具有適應(yīng)性選擇安全設(shè)定能力的圖靈機(jī),構(gòu)造了屬性基認(rèn)證密鑰交換適應(yīng)性選擇安全設(shè)置eCK模型(Attribute-Based eCK,ABeCK)。使用屬性基加密CP-ABE建立認(rèn)證密鑰交換的一般性構(gòu)造框架,根據(jù)具體CP-ABE方案的安全性,給出框架在ABeCK模型中的嚴(yán)格安全性證明。分別設(shè)計(jì)了無雙線性映射的如RSA、離散對(duì)數(shù)和高效雙線映射的輕量級(jí)屬性基認(rèn)證密鑰交換協(xié)議,建立保持隱私性的屬性基認(rèn)證密鑰交換可證安全理論。
本文首先分析了多位研究者提出的認(rèn)證協(xié)議存在一些關(guān)鍵信息泄漏給對(duì)手和中間人攻擊的問題,為研究屬性基認(rèn)證密鑰交換機(jī)制提供了安全性方面的有效依據(jù),基于此提出了構(gòu)建云環(huán)境下的屬性基認(rèn)證密鑰交換機(jī)制的整體框架,給出了動(dòng)態(tài)屬性樹的構(gòu)造思路,并對(duì)屬性基認(rèn)證密鑰交換可證安全理論進(jìn)行研究和分析,最后給出了一種構(gòu)建分布式環(huán)境下屬性基認(rèn)證形式化安全模型的思路。