劉衛(wèi)紅,何麗
(廣東農(nóng)工商職業(yè)技術(shù)學(xué)院,廣州510507)
跨域口令認(rèn)證密鑰交換協(xié)議(簡稱C2C-PAKE協(xié)議)主要用于不同域間用戶協(xié)商和共享會話密鑰,以確??缬蛴脩敉ㄐ诺谋C苄耘c完整性。2002年Byun等人首次提出了一種C2C-PAKE協(xié)議[1],隨后Wang、Kim和Yoon依次指出前者協(xié)議存在的安全漏洞并給出了改進(jìn)協(xié)議。隨后Byun重新提出新的改進(jìn)協(xié)議[2],然而不久后被Yoneyama等人[3]指出仍然存在不可檢測在線字典攻擊。究其原因,還是口令熵值較小,重復(fù)利用且易被遺忘,這些缺點(diǎn)都將成為攻擊者的攻擊方向,于是許多雙因子或多因子認(rèn)證協(xié)議被提出。目前使用較多的是基于口令、智能卡和生物特征的雙因子或多因子協(xié)議(文獻(xiàn)[5-9])。在這些多因子協(xié)議中,攻擊者不能僅靠口令來破解協(xié)議,還需要獲得智能卡信息或生物特征。智能卡由于不易攜帶和易丟失性,給用戶帶來不便甚至存在一定的安全隱患。生物特征包括面孔、指紋、虹膜等,它具有不易遺忘、不易丟失,不易偽造且隨身攜帶等優(yōu)點(diǎn),因此基于生物特征和口令的雙因子認(rèn)證相對更安全和可行,目前有很多研究將其應(yīng)用在用戶與服務(wù)器間密鑰協(xié)商協(xié)議中[9]。
本文將在文獻(xiàn)[2,9]的基礎(chǔ)上將生物特征因子應(yīng)用于跨域口令認(rèn)證密鑰交換協(xié)議中。鑒于人們對智能手機(jī)的高依賴性,以及智能手機(jī)普遍支持采集指紋信息,所以本文基于指紋和智能手機(jī)協(xié)助改進(jìn)跨域口令認(rèn)證密鑰交換協(xié)議。
盲簽名是一種數(shù)字簽名的方式,它除了滿足一般的數(shù)字簽名條件外,還必須滿足兩個(gè)條件:
(1)簽名者不知道他所簽署消息的具體內(nèi)容;
(2)簽名消息不可追蹤。
盲簽名的過程為:請求簽名者先將消息加密(稱為盲化),再把加密后的消息發(fā)送給簽名者簽名。簽名者簽名后將簽名發(fā)送回請求簽名者,請求簽名者先將簽名解密(稱為脫盲),然后再把消息明文和解密的簽名發(fā)送給驗(yàn)證者驗(yàn)證。
HKDF是一種可通過弱口令生成強(qiáng)安全密鑰的協(xié)議,包括HKDF.prepare和HKDF.extract兩種算法:
HKDF.prepare(pw,t,r)→ak,ac
HKDF.extract(pw,ac)→ak
其中,pw表示用戶口令,t表示循環(huán)運(yùn)算次數(shù),r是一個(gè)隨機(jī)字符串,HKDF.prepare算法以pw、t和r為輸入,輸出一個(gè)認(rèn)證密鑰ak和它的密文ac。HKDF.extract算法則使用pw對密文ac解密后重新得到密鑰ak,如果口令不正確,此算法將一直循環(huán)運(yùn)算沒有輸出。
本文用到的所有符號說明如下:
MPA、MPB分別表示用戶A和用戶B的智能手機(jī);PCA、PCB分別表示用戶A和用戶B的電腦;SA、SB分別表示用戶A和用戶B所在域的服務(wù)器;A→B:M表示A給B發(fā)送消息M;IDi表示用戶i的身份標(biāo)識;pwi表示用戶i的口令;ei表示用戶i的指紋參數(shù);pki表示用戶i的私鑰;aki表示用戶i的認(rèn)證密鑰;aci表示用戶i的認(rèn)證密文;di為系統(tǒng)隨機(jī)選取的隨機(jī)數(shù),ri為系統(tǒng)生成的隨機(jī)字符串,ti為系統(tǒng)設(shè)置的運(yùn)算次數(shù),⊕表示異或操作;p,q表示大素?cái)?shù),且p=2q+1;g表示q階群GF(p)的生成元;Zq是一個(gè)模q的整數(shù)環(huán);是Zq的乘法群;表示在中隨機(jī)選取元素x;gx表示gx=gx(modp);H1和H2表示安全的單向Hash函數(shù);Ek(M)表示用密鑰k加密消息M;Ticketi表示另一服務(wù)器傳遞給用戶i所在域中服務(wù)器的密文。
一個(gè)跨域基于指紋和口令密鑰交換協(xié)議被稱為是安全的,如果它滿足下列5個(gè)條件:
(1)語義安全性:對外部惡意攻擊者來說,會話密鑰和隨機(jī)數(shù)不可分;
(2)密鑰保密性:密鑰具有前向安全性,且能抗重放攻擊,惡意服務(wù)器攻擊;
(3)用戶口令、指紋信息和私鑰安全;
(4)對抗不可檢測在線字典攻擊、離線字典攻擊;
(5)服務(wù)器與用戶以及用戶與用戶之間都能進(jìn)行身份認(rèn)證。
本文包括用戶A的手機(jī)端MPA、電腦端PCA以及所在域的服務(wù)器SA和用戶B的手機(jī)端MPB、電腦端PCB以及所在域的服務(wù)器SB六個(gè)參與方。協(xié)議包括注冊和密鑰協(xié)商兩個(gè)階段。
注:Step1與Step1'代表兩個(gè)步驟無先后關(guān)系,其余類似。
注冊階段:用戶在手機(jī)端輸入自己的口令和指紋進(jìn)行注冊,注冊完成后,將用戶ID和認(rèn)證密鑰以及認(rèn)證密鑰的密文保存在服務(wù)器端,但手機(jī)端、電腦端和服務(wù)器端都不保存用戶口令、指紋和私鑰信息。
說明:用戶A在手機(jī)端輸入口令pwA和指紋參數(shù)eA進(jìn)行計(jì)算,生成用戶的私鑰pkA
然后選定一個(gè)循環(huán)運(yùn)算次數(shù)tA,使用私鑰pkA和系統(tǒng)生成的隨機(jī)字符串rA生成用戶的認(rèn)證密鑰akA和認(rèn)證密文acA最后用SA的公鑰PSA加密akA,將IDA,EPSA
(akA),acA發(fā)送給SA,SA收到后使用自己的私鑰解密EPSA(akA)得到akA,將IDA,akA和acA都保存起來。用戶只需記住用戶名和口令,手機(jī)端、電腦端和服務(wù)器都不存儲用戶的口令、指紋和私鑰信息。
說明:生成過程與A同理,略。
密鑰協(xié)商階段:注冊后,當(dāng)用戶有跨域用戶密鑰交換需求時(shí),用戶雙方分別錄入自己的口令和指紋數(shù)據(jù),生成私鑰從而解密服務(wù)器發(fā)送給用戶的密文得到認(rèn)證密鑰,并將其用服務(wù)器公鑰加密后發(fā)送給服務(wù)器。服務(wù)器解密后進(jìn)行運(yùn)算和對比,如果相符,則協(xié)助用戶完成跨域密鑰交換。
說明:用戶A在電腦端PCA輸入口令pwA,系統(tǒng)自動生成一個(gè)盲化因子dA,并計(jì)算盲化后的口令αA,然后將αA發(fā)送給手機(jī)端MPA。
說明:生成過程與A同理,略。
用戶A在手機(jī)端MPA按下指紋生成指紋參數(shù)eA,對盲化口令αA進(jìn)行簽名,然后將βA發(fā)送給電腦端PCA。
說明:生成過程與A同理,略。
電腦端PCA對簽名后的盲化口令進(jìn)行去盲化,得到用戶私鑰pkA,然后給服務(wù)器SA發(fā)送IDA,IDB。
說明:生成過程與A同理,略。
服務(wù)器SA根據(jù)IDA查找到對應(yīng)的認(rèn)證密鑰密文acA,并選取一個(gè)隨機(jī)數(shù)NSA發(fā)送給電腦端PCA。
說明:生成過程與A同理,略。
電腦端PCA使用私鑰pkA和HKDF函數(shù)算法對認(rèn)證密鑰密文acA進(jìn)行解密,得到認(rèn)證密鑰akA
HKDF.extract(pkA,acA→akA)
然后PCA選取一個(gè)隨機(jī)數(shù)NA,并隨機(jī)選取,最后用服務(wù)器S的公鑰P加密ak,N,N,gx,ID,IDASAASAAAB并將其發(fā)送給SA。
說明:生成過程與A同理,略。
服務(wù)器端SA用自己的私鑰解密從PCA收到的消息后驗(yàn)證akA,NSA,如果不正確則拒絕。否則隨機(jī)選取,用服務(wù)器SB的公鑰PSB
加密計(jì)算TicketB并將其發(fā)送給SB。
服務(wù)器端SB用自己的私鑰解密從PCB收到的消息后驗(yàn)證akB,NSB,如果不正確則拒絕。否則隨機(jī)選取,用服務(wù)器SA的公鑰PSA加密計(jì)算TicketA并將其發(fā)送給SA。
服務(wù)器端SA用自己的私鑰解密TicketA后得到,計(jì)算gyr'r和RA=H2(NA+1)⊕H2(akA),然后用RA加密gyr'r和NA+1發(fā)送給PCA。
PCA收到后用自己的認(rèn)證密鑰akA和NA計(jì)算RA,然后解密ERA(gyrr',NA+1)得到gyrr',并驗(yàn)證NA是否正確,如果不正確則拒絕,否則計(jì)算sk=gyrr'x=gxyrr'作為用戶A和用戶B的會話密鑰進(jìn)行安全通信。
服務(wù)器端SB用自己的私鑰解密TicketB后得到gxr,計(jì)算gxrr'和RB=H2(NB+1)⊕H2(akB),然后用RB加密gxrr'
和NB+1發(fā)送給PCB。
PCB收到后用自己的認(rèn)證密鑰akB和NB計(jì)算RB,然后解密ERB(gxrr',NB+1)得到gxrr',并驗(yàn)證NB是否正確,如果不正確則拒絕,否則計(jì)算sk=gxrr'y=gxyrr'作為用戶B和用戶A的會話密鑰進(jìn)行安全通信。
(1)語義安全性
因?yàn)楦鲄⑴c方在傳遞敏感信息時(shí)都用服務(wù)器公鑰或用戶認(rèn)證密鑰的轉(zhuǎn)換密鑰對消息進(jìn)行了加密,因此,改進(jìn)協(xié)議相對于外部敵手來說是語義安全的。
(2)密鑰保密性
前向安全性:若E竊取了pwA和pwB并獲取了用戶的指紋信息eA和eB,由于他沒有SA和SB的私鑰,因而無法解密所截獲的消息得到gx或gy,更無法計(jì)算出之前的會話密鑰sk=gxyrr',從而保證了協(xié)議的前向安全性。
重放攻擊:因?yàn)閰f(xié)議中的 x,y,r,r',dA,dB,NSA,NSB,NA,NB都是臨時(shí)隨機(jī)變量,所以E不能假冒任何一方發(fā)動重放攻擊。
惡意服務(wù)器攻擊:假定服務(wù)器不會偽冒自己域中用戶進(jìn)行主動攻擊。假設(shè)SA是惡意服務(wù)器,由于他無法得到其他域中用戶的認(rèn)證密鑰或其他服務(wù)器的私鑰,因此無法解密Step7'中的ERB(gxrr',NB+1)或計(jì)算Step6中的TicketB,也就無法獲取sk=gxyrr';同時(shí)服務(wù)器雖然保存了域內(nèi)用戶的認(rèn)證密鑰akA和密文acA,但由于服務(wù)器不保存任何用戶的口令或指紋信息,也就無法計(jì)算用戶在其他域中的認(rèn)證密鑰和密文,因此無法偽裝用戶在其他服務(wù)中進(jìn)行跨域密鑰交換,故不存在惡意服務(wù)器攻擊。
(3)用戶口令、指紋信息和私鑰的安全性。
用戶口令、指紋信息和私鑰都不保存在手機(jī)端、電腦端和服務(wù)器端,所以不存在泄漏可能。假設(shè)在通信過程中,攻擊者竊取用戶A移動端與電腦端或電腦端與服務(wù)器端的任何一次會話消息,因?yàn)樯婕暗娇诹?、指紋和私鑰的消息都被Hash函數(shù)、離散對數(shù)或HKDF方法處理過,由于Hash函數(shù)的不可逆性和離散對數(shù)問題的困難性以及HKDF算法的安全性可知,攻擊者不可能獲取用戶口令、指紋信息和私鑰信息。
(4)抗不可檢測在線字典攻擊、抗離線字典攻擊。
不可檢測在線字典攻擊:敵手選擇一個(gè)作為A的候選口令,然后在電腦端隨機(jī)選取dA計(jì)算將發(fā)送給手機(jī)端,接著在手機(jī)端輸入一個(gè)指紋信息,并計(jì)算,并將其發(fā)送回手機(jī)端以計(jì)算,接著用這個(gè)和服務(wù)器發(fā)送的用戶密文acA計(jì)算,最后用服務(wù)器SA的公鑰加密并發(fā)送給服務(wù)器驗(yàn)證。顯然和SA存儲的認(rèn)證密鑰akA相符的概率幾乎為零。因?yàn)橹讣y信息相同的概率幾乎為零,再加上pkA=H1(pwA)eA與,由此通過HKDF.extract計(jì)算出來的與HHKDF.extract計(jì)算出來的akA顯然不相等,SA馬上能檢測到敵手對A的攻擊。
離線字典攻擊:如果攻擊者選擇離線字典攻擊,攻擊者同樣從口令空間中選取一個(gè)候選口令pw'A作為A的真實(shí)口令。此時(shí)攻擊者不是在線與服務(wù)器之間進(jìn)行交互驗(yàn)證口令的正確性,而是通過截獲的真實(shí)會話中的任意一個(gè)消息來進(jìn)行驗(yàn)證。因?yàn)樯婕暗娇诹睢⒅讣y和私鑰的消息都被Hash函數(shù)、離散對數(shù)或HKDF方法處理過,由于Hash函數(shù)的不可逆性和離散對數(shù)問題的困難性以及HKDF算法的安全性可知攻擊者從真實(shí)消息中驗(yàn)證口令正確的概率幾乎為零。
(5)服務(wù)器與用戶以及用戶與用戶間的身份認(rèn)證。
用戶注冊階段將自己的認(rèn)證密鑰ak和密文ac發(fā)送給服務(wù)器。密鑰交換階段,服務(wù)器使用ak、ac和隨機(jī)選取的隨機(jī)數(shù)NS驗(yàn)證用戶身份,因?yàn)橹挥姓_的用戶才能通過HKDF.extract算法使用自己的私鑰sk將認(rèn)證密文ac轉(zhuǎn)換為認(rèn)證密鑰ak。
然后服務(wù)器使用用戶選取的隨機(jī)數(shù)N和認(rèn)證密鑰ak計(jì)算H2(N+1)⊕H2(ak)加密隨機(jī)數(shù)N并發(fā)送給用戶,用戶收到并解密后比對隨機(jī)數(shù)N,從而實(shí)現(xiàn)用戶對服務(wù)器的認(rèn)證。服務(wù)器間的信息是用對方公鑰加密而成,因此保證了只有對方才能解密信息,以此實(shí)現(xiàn)服務(wù)器間的身份認(rèn)證。
本文的改進(jìn)跨域基于指紋和口令密鑰交換協(xié)議結(jié)合了口令認(rèn)證的簡單、指紋認(rèn)證的安全便攜,以及離散對數(shù)和公鑰加密的高可靠等特點(diǎn),具有語義安全性,密鑰保密性、前向安全性,且能對抗重放攻擊、惡意服務(wù)器攻擊、離線字典攻擊、不可檢測在線字典攻擊等常見攻擊。即實(shí)現(xiàn)了服務(wù)器與用戶的雙向認(rèn)證,又保證了傳輸數(shù)據(jù)的完整性和真實(shí)性,安全可靠地實(shí)現(xiàn)了跨域用戶間的密鑰協(xié)商與共享,為以后的跨域基于指紋和口令的密鑰交換協(xié)議設(shè)計(jì)提供了參考。