王耀民+熊剛強(qiáng)+曾永健+丘文峰+何文廣
摘要:口令認(rèn)證是身份驗(yàn)證領(lǐng)域的研究熱點(diǎn),最近幾年很多基于口令的認(rèn)證協(xié)議被提出來(lái)。該文對(duì)一種遠(yuǎn)程動(dòng)態(tài)口令認(rèn)證協(xié)議進(jìn)行了安全分析,指出了這種認(rèn)證協(xié)議存在無(wú)法抵抗冒充攻擊和中間人攻擊的安全漏洞。對(duì)其進(jìn)行了改進(jìn),提出一種命名為SH-Key的遠(yuǎn)程動(dòng)態(tài)口令認(rèn)證協(xié)議。通過(guò)安全分析證明這種協(xié)議能夠?yàn)橛脩籼峁┌踩?,高效的遠(yuǎn)程動(dòng)態(tài)口令認(rèn)證。
關(guān)鍵詞:口令認(rèn)證; 動(dòng)態(tài); 遠(yuǎn)程; 信息安全
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)10-0049-03
隨著計(jì)算機(jī)網(wǎng)絡(luò)和信息技術(shù)的發(fā)展,越來(lái)越多的人通過(guò)網(wǎng)絡(luò)來(lái)訪問(wèn)遠(yuǎn)程服務(wù)器進(jìn)行工作和學(xué)習(xí)。隨之而來(lái)的網(wǎng)絡(luò)安全問(wèn)題也就變得越來(lái)越重要,其中身份認(rèn)證問(wèn)題是遠(yuǎn)程服務(wù)當(dāng)中需要首先解決的問(wèn)題。口令認(rèn)證作為一種簡(jiǎn)單實(shí)用的認(rèn)證方式被廣泛應(yīng)用于很多的認(rèn)證領(lǐng)域。傳統(tǒng)的口令認(rèn)證方式分為兩個(gè)階段:第一注冊(cè)階段,用戶向服務(wù)器提出注冊(cè)申請(qǐng),服務(wù)器接到用戶的注冊(cè)申請(qǐng)后要求用戶輸入其用戶名和密碼。用戶輸入用戶名、密碼后,服務(wù)器存儲(chǔ)用戶的用戶名密碼。第二認(rèn)證階段,用戶在需要登錄服務(wù)器時(shí),將自己的用戶名,密碼傳遞給服務(wù)器。服務(wù)器在收到用戶的用戶名密碼后,在存儲(chǔ)的用戶名表里面查找用戶的注冊(cè)信息。找到用戶的注冊(cè)信息后,將用戶傳遞過(guò)來(lái)的密碼與存儲(chǔ)的密碼對(duì)照。如果一致,則認(rèn)證通過(guò),反之則認(rèn)證不通過(guò)。在當(dāng)前的網(wǎng)絡(luò)環(huán)境下,這種傳統(tǒng)的口令認(rèn)證方式極易遭受竊聽(tīng)、重放、冒充、離線字典等攻擊[1-2]。因而提高口令認(rèn)證方式的安全性,在近幾年成為信息安全領(lǐng)域的研究熱點(diǎn)。目前較為安全的作法是使用動(dòng)態(tài)口令認(rèn)證。在這種認(rèn)證系統(tǒng)下用戶通過(guò)使用hash數(shù)等手段使自己每次登錄的口令不同。可以有效的抵抗重放,離線字典等攻擊。1991年,貝爾通信研究中心(Bellcore)首次研制出了基于一次口令思想的身份認(rèn)證系統(tǒng)S/KEY。它于1995年為IETF所接受,成為RFC1760。這是一種基于Hash函數(shù)的一次性口令生成方案[3-4]。但是這種方案存在以下缺點(diǎn)[4-5]:1)用戶只能認(rèn)證N次,使用完后必須重新注冊(cè)。2) 用戶認(rèn)證過(guò)程要經(jīng)過(guò)多次hash,降低了認(rèn)證效率。3)認(rèn)證過(guò)程中用戶的種子和認(rèn)證次數(shù)均采用明文傳輸,攻擊者可以采用小數(shù)攻擊來(lái)獲取一系列口令來(lái)冒充用戶。文章[4]對(duì)文章[3]提出的方案進(jìn)行了完善,試圖得到一種安全的動(dòng)態(tài)口令認(rèn)證方案。本文對(duì)文章[4]提出的口令認(rèn)證方案進(jìn)行了分析(我們稱之為MYH協(xié)議),指出其中存在的安全漏洞。并對(duì)其進(jìn)行了完善,使其成為一種安全有效的口令認(rèn)證協(xié)議。
本文剩下的部分按照如下組織,首先在第一章分析文章[4]提出的協(xié)議,指出其存在的安全隱患。隨后在第二章提出一種新的協(xié)議,以修補(bǔ)文章[4]提出的協(xié)議存在的缺點(diǎn)。最后對(duì)我們提出的協(xié)議進(jìn)行安全分析。
1 MYH協(xié)議介紹
1.1 術(shù)語(yǔ)介紹
本文中使用Ser代表誰(shuí)服務(wù)器,U代表用戶。本文中使用的一些其他字母的含義如下:
U錯(cuò)誤!未找到引用源。S: U向S發(fā)送信息。
h(.): 一個(gè)安全的單向哈希函數(shù)。
⊕:異或操作。
pk: 服務(wù)器公鑰。
sk:服務(wù)器私鑰。
E{m} pk:使用服務(wù)器公鑰對(duì)信息m進(jìn)行加密。
D{m}sk:使用服務(wù)器私鑰對(duì)信息m進(jìn)行解密。
//:級(jí)聯(lián)操作。
1.2 MYH協(xié)議
MYH認(rèn)證協(xié)議的安全性主要是基于Hash函數(shù)(SHA函數(shù))產(chǎn)生摘要的單一性和唯一性[6][7]。該協(xié)議主要分為兩個(gè)階段[4]:
1)口令注冊(cè)階段
用戶A輸入身份證IDA及登錄口令S,并產(chǎn)生隨機(jī)數(shù)N0,計(jì)算出驗(yàn)證因子Ver=H(S//N0),然后將IDA、N0、Ver這三部分傳送給服務(wù)器,用戶保留S。服務(wù)器收到以上三部分?jǐn)?shù)據(jù),先檢查服務(wù)器的數(shù)據(jù)庫(kù)中有無(wú)此用戶,如果有,則發(fā)出錯(cuò)誤信息;否則,添加此用戶到數(shù)據(jù)庫(kù)中,寫(xiě)入格式為:IDA、N0、Ver[4]。
2)遠(yuǎn)程口令認(rèn)證過(guò)程
當(dāng)用戶A想要登錄時(shí),先產(chǎn)生一個(gè)隨機(jī)函數(shù)N1,然后按如下步驟實(shí)現(xiàn)認(rèn)證:用戶A將用戶身份證IDA傳給遠(yuǎn)程服務(wù)器,請(qǐng)求登錄;服務(wù)器先驗(yàn)證此用戶是否注冊(cè)過(guò),如果沒(méi)有,則發(fā)出錯(cuò)誤信息,提示用戶注冊(cè)并拒絕登錄,如果用戶已經(jīng)注冊(cè),則在數(shù)據(jù)庫(kù)中找到此用戶的N和H(S//N0),并將其傳給用戶A;用戶A計(jì)算下面的值,并將其發(fā)送到主機(jī),計(jì)算H(S//N0),H(S//N1)———>主機(jī),N1———>主機(jī)。其中H(S//N0)是驗(yàn)證本次口令的計(jì)算參數(shù),H(S//N1)是驗(yàn)證下次口令時(shí)的計(jì)算參數(shù);主機(jī)用保留的驗(yàn)證因子Ver=H(S//N0)與接收來(lái)的驗(yàn)證因子Ver是否相等。若相等,則接受用戶登錄請(qǐng)求,且修改Ver= H(S//N1),并將隨機(jī)數(shù)N1和驗(yàn)證因子Ver寫(xiě)入用戶數(shù)據(jù)庫(kù)中,以備下次用戶登錄時(shí)使用;如果不相等,則發(fā)出登錄口令錯(cuò)誤信息并拒絕用戶登錄[4]。其流程圖如圖1所示:
1.3 對(duì)MYH協(xié)議的攻擊
通過(guò)該協(xié)議的執(zhí)行過(guò)程,可以得出MYH協(xié)議通過(guò)兩次握手來(lái)實(shí)現(xiàn)用戶對(duì)服務(wù)器的驗(yàn)證和服務(wù)器對(duì)用戶的驗(yàn)證。作者認(rèn)為由于攻擊者無(wú)法得到用戶的口令S,也就無(wú)法生成用戶的驗(yàn)證數(shù)據(jù)H(S//N0)和生成用戶的下一次的驗(yàn)證數(shù)據(jù)H(S//N1)。其安全性主要建立在哈希函數(shù)的單向性上。但是由于在認(rèn)證過(guò)程中,用戶和服務(wù)器之間兩次傳送的H(S//N0)都是一樣的。攻擊者可以截取這個(gè)信息對(duì)協(xié)議進(jìn)行攻擊。
在這里我們假設(shè)攻擊者擁有文章0規(guī)定的攻擊者所有的能力,對(duì)MYH協(xié)議攻擊者可以采取以下手段進(jìn)行攻擊:
1) 冒充攻擊:由于用戶注冊(cè)階段的IDA是明文傳送的,所以攻擊者可以通過(guò)簡(jiǎn)單的竊聽(tīng)就得到用戶的IDA。攻擊者在得到用戶的IDA后,可以冒充用戶向服務(wù)器發(fā)起登錄請(qǐng)求。服務(wù)器在收到用戶的登錄請(qǐng)求后。開(kāi)始按照協(xié)議開(kāi)始執(zhí)行,將存儲(chǔ)的Ver和N0發(fā)送給攻擊者。攻擊者在收到服務(wù)器發(fā)來(lái)的Ver之后,只要再隨機(jī)選取一個(gè)N1與收到的Ver一起發(fā)送給服務(wù)器。就可以冒充用戶登錄服務(wù)器,進(jìn)行任何操作。
2) 中間人攻擊:在協(xié)議認(rèn)證的開(kāi)始用戶向服務(wù)器提出登錄請(qǐng)求,服務(wù)器找到用戶的注冊(cè)信息,將用戶的Ver和N0發(fā)送給用戶。在這個(gè)過(guò)程中,攻擊者可以截取服務(wù)器發(fā)送給用戶的信息,并將其轉(zhuǎn)發(fā)給用戶。由于用戶是通過(guò)驗(yàn)證信息Ver來(lái)驗(yàn)證服務(wù)器的,所以在這里攻擊者可以完全冒充服務(wù)器與用戶進(jìn)行通信。同時(shí)攻擊者截取用戶發(fā)送給服務(wù)器的新認(rèn)證信息,并將其轉(zhuǎn)發(fā)給服務(wù)器,冒充用戶與服務(wù)器進(jìn)行通信。
這樣攻擊者就可以同時(shí)冒充用戶與服務(wù)器,將任何對(duì)自己有利的信息傳送給用戶或者上傳到服務(wù)器。而在這個(gè)過(guò)程中用戶和服務(wù)器都無(wú)法察覺(jué)自己正在跟攻擊者進(jìn)行通信。
2 對(duì)MYH協(xié)議人改進(jìn)
通過(guò)上述攻擊,我們發(fā)現(xiàn)攻擊主要是利用MYH協(xié)議中服務(wù)器與用戶兩次傳送的驗(yàn)證信息H(S//N0)都是一樣的這一點(diǎn)對(duì)協(xié)議進(jìn)行攻擊的。本文對(duì)MYH協(xié)議中的這一漏洞進(jìn)行修補(bǔ),提出一個(gè)新的協(xié)議。我們稱為SH-Key口令認(rèn)證協(xié)議。
2.1 SH-Key協(xié)議執(zhí)行
協(xié)議準(zhǔn)備階段,服務(wù)器選取一個(gè)安全的哈希函數(shù)和公鑰算法。將哈希函數(shù)和服務(wù)器公鑰公布在自己站上。
1)注冊(cè)階段
用戶A向服務(wù)器提出注冊(cè)請(qǐng)求,并從服務(wù)器網(wǎng)站得哈希函數(shù)H()和服務(wù)器公鑰pks。用戶A輸入身份證IDA及登錄口令S,并產(chǎn)生隨機(jī)數(shù)N0,計(jì)算出驗(yàn)證因子Ver=H(S//N0)。然后計(jì)算RA=E{IDA,N0 ,Ver} pks,并將RA傳送給服務(wù)器,用戶保留S。服務(wù)器收到RA后,先計(jì)算{IDA,N0 ,Ver}=D{RA}sk,然后檢查服務(wù)器的數(shù)據(jù)庫(kù)中有無(wú)此用戶,如果有,則發(fā)出錯(cuò)誤信息;否則,添加此用戶到數(shù)據(jù)庫(kù)中,寫(xiě)入格式為:IDA、N0、Ver
2)認(rèn)證階段
① [U→idSer]
用戶向服務(wù)器發(fā)送登錄請(qǐng)求,并將自己的用戶名id傳送給服務(wù)器。
② [Ser→N0 ,Vs,N*0U]
服務(wù)器在收到用戶的登錄請(qǐng)求后查找有無(wú)用戶的注冊(cè)信息。沒(méi)有找到,返回錯(cuò)誤信息。如果找到用戶的注冊(cè)信息,選取隨機(jī)數(shù)N0并計(jì)算Vs=Ver⊕N0,N0*=H(N0)。并將Vs ,N0,N0*發(fā)送給用戶。
③ [U→Ver′,N*1,Ver1Ser]
用戶在收到服務(wù)器傳過(guò)來(lái)的數(shù)據(jù)后,首先計(jì)算H(S//N0),然后計(jì)算N0=H(S//N0)⊕Vs.,驗(yàn)證N0*?=H(N0)。如果不相等,則丟棄,重新發(fā)送登錄請(qǐng)求。如果相等說(shuō)明所接收的數(shù)據(jù)是從服務(wù)器傳送過(guò)來(lái)的。選取隨機(jī)數(shù)N1,計(jì)算Ver=H(S//N0)⊕N1,N1*=H(N1),Ver1=H(S//N1)⊕N1*并將其發(fā)送給服務(wù)器。
④ 驗(yàn)證通過(guò),服務(wù)器重新寫(xiě)入注冊(cè)數(shù)據(jù)。
服務(wù)器在收到用戶驗(yàn)證數(shù)據(jù)后。首先計(jì)算N1=Ver⊕Ver,驗(yàn)證N1*?=H(N1)。如果不相等,則驗(yàn)證不通過(guò),不允許用戶登錄。相等,則驗(yàn)證通過(guò),允許用戶登錄。計(jì)算Ver=Ver1⊕H(N1)。用Ver,N1更新用戶的注冊(cè)數(shù)據(jù)。
3 安全分析
本文提出的SH-Key協(xié)議有效的改進(jìn)MYH協(xié)議不能夠抵抗冒充攻擊和中間人攻擊的缺點(diǎn)。同時(shí)保留了MYH協(xié)議的高效性。本節(jié)主要針對(duì)本文的改進(jìn)進(jìn)行安全分析。
1)冒充攻擊:本文提出的協(xié)議在用戶注冊(cè)階段使用公鑰加密算法將用戶的注冊(cè)信息進(jìn)行加密,傳送給服務(wù)器。這樣攻擊者即使能夠截取用戶的注冊(cè)信息,因?yàn)闊o(wú)法對(duì)用戶的注冊(cè)信息進(jìn)行解密,也就無(wú)法無(wú)法得用戶的驗(yàn)證信息Ver。無(wú)法冒充合法用戶進(jìn)行登錄。
2)中間人攻擊:本文所提出的協(xié)議,用戶在收到服務(wù)器返回的認(rèn)證信息后,通過(guò)驗(yàn)證N1*?=H(N1)驗(yàn)證服務(wù)器器的合法性。服務(wù)器發(fā)送的隨機(jī)數(shù)N0經(jīng)過(guò)Ver進(jìn)行加密。而攻擊者在無(wú)法得到驗(yàn)證數(shù)據(jù)Ver的情況下是無(wú)法偽造服務(wù)器的驗(yàn)證數(shù)據(jù)Vs,也就無(wú)法冒充服務(wù)器向用戶發(fā)送數(shù)據(jù)。服務(wù)器在收到用戶的驗(yàn)證數(shù)據(jù)后,通過(guò)驗(yàn)證N1*?=H(N1)來(lái)確認(rèn)用戶的合法性。用戶發(fā)送的隨機(jī)數(shù)N1同樣經(jīng)過(guò)驗(yàn)證數(shù)據(jù)Ver進(jìn)行了加密,因而攻擊者也無(wú)法偽造用戶的驗(yàn)證數(shù)據(jù)。通過(guò)用戶與服務(wù)器的兩次握手,使攻擊者無(wú)法發(fā)起中間人攻擊。
4 結(jié)束語(yǔ)
本文是對(duì)MYH協(xié)議的有效改進(jìn),彌補(bǔ)MYH協(xié)議無(wú)法抵抗冒充攻擊和中間人攻擊的安全漏洞。同時(shí)保留了MYH協(xié)議的認(rèn)證的高效性和動(dòng)態(tài)性。是一種高效安全的身份認(rèn)證協(xié)議。
參考文獻(xiàn):
[1] 毛文波.現(xiàn)代密碼學(xué)理論與實(shí)踐[M].北京:電子工業(yè)出版社,2004
[2] 袁丁,范平志.遠(yuǎn)程動(dòng)態(tài)口令鑒別方案[J].計(jì)算機(jī)應(yīng)用研究,2001(7):64-65.
[3] Neil M,Haller.The S/KEY one-time password system.RCF1760[M].Network Working Group,1994.
[4] 孟艷紅,李雅紅,黃靜.一種簡(jiǎn)單的遠(yuǎn)程動(dòng)態(tài)口令認(rèn)證方案[J].沈陽(yáng)工業(yè)大學(xué)學(xué)報(bào),2005(1):74-76.
[5] 王耀民,王立斌.一種基于口令的防竊取私鑰保護(hù)協(xié)議[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010.19(4),65-68.
[6] Schneier B.The secure Hash algorithm directory MD5,SHA-1 and HMAC resources [EB/OL].http://www.secure-hash-algorithm-md5sha-1.co.uk/.2003-11-9.
[7] Benhamouda F, Blazy O, Chevalier C.New smooth projec-tive hash functions and one-round authenticated key exchange[EB/OL]. Cryptology ePrint Archive, Report 2013/034, 2013. http://eprint.iacr.org/2013/034.