徐 軍
( 山東理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 山東 淄博 255049)
身份認(rèn)證處于訪問(wèn)控制的最前端,是網(wǎng)絡(luò)應(yīng)用系統(tǒng)的首道鑒別防御線。身份認(rèn)證的主要方法有兩種:一是利用認(rèn)證依據(jù),主要指主體掌握的秘密,如口令、密鑰等;主體攜帶的物品,如智能卡等;或者是主體獨(dú)有的生物特征等。二是基于對(duì)稱密碼、公鑰密碼體制的身份認(rèn)證協(xié)議,如Needham-Schroeder 協(xié)議等,在這類協(xié)議中,示證者能夠向驗(yàn)證者證明其身份,驗(yàn)證者并沒(méi)有從中獲得任何有用的信息。其中,采用口令作為依據(jù)是最經(jīng)典常用的認(rèn)證方式[1],也最容易受到破解、攻擊。由于口令注冊(cè)、口令存儲(chǔ)、口令更新的成本較高,口令認(rèn)證并不是一種廉價(jià)的方式,研究口令認(rèn)證仍然很有必要。目前常用的口令認(rèn)證方案有Lamport 方案、Bellcore方案、時(shí)鐘同步方案(Time Synchronized) 、質(zhì)詢-響應(yīng)方案(Challenge-Response)、S /KEY 認(rèn)證方案等,文獻(xiàn)[2-12]都對(duì)目前常規(guī)口令認(rèn)證方式進(jìn)行了分析和一定的改進(jìn)。其中, 文獻(xiàn)[2]在S/KEY一次性口令認(rèn)證技術(shù)的基礎(chǔ)上,使用隨機(jī)串實(shí)現(xiàn)服務(wù)端和客戶端的雙向認(rèn)證,同時(shí)結(jié)合使用AES和RSA加密技術(shù),對(duì)注冊(cè)數(shù)據(jù)和認(rèn)證數(shù)據(jù)進(jìn)行加密;文獻(xiàn)[3] 基于單鑰體制使用質(zhì)詢?cè)O(shè)計(jì)了一個(gè)有效的適用于網(wǎng)絡(luò)通信系統(tǒng)的身份認(rèn)證方案,克服了通常的質(zhì)詢響應(yīng)認(rèn)證方案的弱點(diǎn),能夠防止重放攻擊和冒充攻擊;文獻(xiàn)[4-12]則對(duì)S/Key方案進(jìn)行了不同形式的改進(jìn),解決了用戶端與服務(wù)器端的雙向認(rèn)證。目前口令加鹽技術(shù)一般在編程中有所應(yīng)用,但鮮有論述,考慮到對(duì)并發(fā)、效率要求較高的應(yīng)用場(chǎng)合,需要設(shè)計(jì)滿足一定安全等級(jí)要求的口令認(rèn)證系統(tǒng)。
口令身份認(rèn)證由兩方組成,一方為出示口令者,即web客戶端,提交口令以證明自己與主體相附;另一方為驗(yàn)證者,即服務(wù)器端,負(fù)責(zé)檢驗(yàn)口令的正確性和合法性,驗(yàn)證其是否是其聲稱的主體,然后決定其是否滿足訪問(wèn)控制的要求。對(duì)口令身份認(rèn)證過(guò)程中的可能攻擊有如下3種形式:
1)Sniffer方式,即網(wǎng)絡(luò)數(shù)據(jù)流竊聽。若網(wǎng)絡(luò)傳遞的口令信息是未經(jīng)加密的明文,攻擊者通過(guò)竊聽網(wǎng)絡(luò)數(shù)據(jù),就很容易識(shí)別出某種特定系統(tǒng)的數(shù)據(jù)包,并提取出用戶名和口令。
2)拷貝/重傳,非法用戶截獲口令信息,然后再傳送給接收者,也就是重放攻擊。
3)離線或在線字典攻擊 ,即暴力攻擊。
為抵抗上述3種攻擊形式,口令認(rèn)證一般不直接傳輸明文口令,而是利用哈希函數(shù)的特殊性質(zhì)來(lái)設(shè)計(jì)方案[3],基本思想是利用散列函數(shù)產(chǎn)生口令, 網(wǎng)絡(luò)信道傳輸口令的哈希值, 而且口令具有一次性。
早期常規(guī)的口令認(rèn)證方案模型如圖1所示。此方案在編程實(shí)踐中經(jīng)常采用,服務(wù)器端不存儲(chǔ)口令明文,明文不會(huì)在網(wǎng)上傳輸,并且根據(jù)口令摘要也無(wú)法推導(dǎo)出口令。認(rèn)證協(xié)議容易設(shè)計(jì),口令的修改、更新協(xié)議也容易實(shí)現(xiàn)。方案的主要缺點(diǎn)為不能抵抗重放攻擊,也不能抵抗窮舉方法的攻擊,比如,查表法(Lookup Tables)。查表法沒(méi)有采取字典破解和暴力破解直接方式,而是首先將一些比較常用的密碼的哈希值算好,然后建立一張表,當(dāng)然密碼越多,這張表就越大。如果獲取某個(gè)密碼的哈希值后,只需在建立好的表中查找該哈希值,若匹配,則破解相應(yīng)密碼。

圖1 常規(guī)口令身份認(rèn)證方案Fig.1 The conventional identity authentication schere
用戶密碼經(jīng)加密后的哈希值存儲(chǔ)在數(shù)據(jù)庫(kù)中仍然是不夠安全的,為增強(qiáng)安全性,可采取口令加鹽的措施。鹽值(Salt)實(shí)質(zhì)就是一個(gè)隨機(jī)生成的任意字母、數(shù)字或是字母和數(shù)字的組合。則認(rèn)證方案描述為:
第一階段:密碼加鹽
①口令字符串的生成:s=salt+password;
②用哈希函數(shù)給口令s加鹽:sk=hash(s);
③服務(wù)器端儲(chǔ)存鹽值結(jié)果。
第二階段:驗(yàn)證口令
① 接收用戶提供的帳戶名userid和口令password;
② 在帳戶口令數(shù)據(jù)庫(kù)中檢查userid的合法性,如果合法,則找出其對(duì)應(yīng)的salt,帳戶口令數(shù)據(jù)庫(kù)的基本結(jié)構(gòu)見表1;
表1 帳戶口令數(shù)據(jù)庫(kù)的結(jié)構(gòu)
Tab.1 The structure of account password database

用戶標(biāo)識(shí)加鹽口令鹽 值useridhash(salt,password)salt
③計(jì)算加鹽口令信息:s=hash(password,salt);
④ 如果帳戶信息數(shù)據(jù)庫(kù)中存儲(chǔ)的加鹽哈希口令與s相等,則認(rèn)證成功,否則,認(rèn)證失敗。
如果口令庫(kù)中只存儲(chǔ)hash值,通過(guò)查表法(如彩虹表)可以將口令反推出;而通過(guò)加鹽技術(shù),由于鹽值是隨機(jī)生成的,再采用哈希運(yùn)算,哈希函數(shù)的單向性,能夠有效抵抗查表法攻擊。同時(shí), 加鹽處理使字典攻擊也變得更為困難。
為了實(shí)現(xiàn)一次一密,一般采用哈希鏈算法,使每次登錄過(guò)程生成的密碼都各不相同,并且在每次登錄過(guò)程中加入隨機(jī)選定的、采用哈希函數(shù)的不確定因子,以提高登錄過(guò)程的安全性。系統(tǒng)接收到登錄口令以后, 以同樣的算法做一個(gè)驗(yàn)算即可驗(yàn)證用戶的合法性。
方案參數(shù)設(shè)定:初始化口令password和整數(shù)n,及一個(gè)單向散列函數(shù)H,H符合鏈?zhǔn)教卣?,即?duì)于任意整數(shù)r,p1=H(r),p2=H(p1),…,pn+1=H(pn)。
驗(yàn)證端在登錄口令數(shù)據(jù)庫(kù)中存儲(chǔ)userid、n和pn+1的值;用戶端存儲(chǔ)p1,p2,…,pn序列。
實(shí)現(xiàn)過(guò)程:
用戶端計(jì)算pn=H(password)的值,將userid和pn傳送給服務(wù)器,服務(wù)器端計(jì)算pn+1=H(pn)的值,同服務(wù)器上相應(yīng)的值pn+1進(jìn)行比較。
若相等,則驗(yàn)證成功,然后用pn的值取代服務(wù)器上pn+1的值,同時(shí),n的值減1。
用戶每次登錄時(shí),都輸入其列表中未取消的最后的數(shù),這樣實(shí)現(xiàn)了每次登錄到服務(wù)器的口令均不相同,能夠抵抗重放攻擊,也比較容易編程實(shí)現(xiàn)。系統(tǒng)需要進(jìn)行多次Hash運(yùn)算,方案安全性主要依賴于單向散列函數(shù)H的強(qiáng)度,而且用完列表中的數(shù)后,需要重新初始化,服務(wù)器的額外開銷比較大。
但S/KEY系統(tǒng)無(wú)法抵御冒充服務(wù)器的攻擊。也就是說(shuō),傳統(tǒng)S/KEY系統(tǒng)是只支持服務(wù)器對(duì)用戶單方面鑒別的認(rèn)證協(xié)議,認(rèn)證過(guò)程中只對(duì)用戶進(jìn)行認(rèn)證而沒(méi)有對(duì)服務(wù)器進(jìn)行鑒別,并且 S/KEY 方案并沒(méi)有提供對(duì)數(shù)據(jù)的加密,初始化參數(shù)及序列都是以明文形式在網(wǎng)絡(luò)連接中傳輸。
針對(duì)S/KEY方案的小數(shù)攻擊的形式[5-8,11],當(dāng)客戶端向服務(wù)器請(qǐng)求認(rèn)證時(shí),攻擊者截取服務(wù)器傳來(lái)的種子和迭代值,并修改迭代值為較小值,然后假冒服務(wù)器,將得到的種子和較小的迭代值發(fā)給用戶。當(dāng)客戶端利用種子和迭代值計(jì)算一次性口令,攻擊者再次中間截取客戶端傳來(lái)的一次性口令,并利用已知的單向散列函數(shù),計(jì)算較大迭代值的一次性口令, 即可獲得該客戶端后繼的一系列口令,進(jìn)而完成合法用戶冒充。
文獻(xiàn)[11]通過(guò)引入存儲(chǔ)卡、智能卡或者增加時(shí)間戳作為驗(yàn)證因子,對(duì)常規(guī)S/KEY方案進(jìn)行改進(jìn),基本實(shí)現(xiàn)了用戶端與服務(wù)器端之間的雙向認(rèn)證,并實(shí)現(xiàn)了對(duì)協(xié)議關(guān)鍵參數(shù)和序列數(shù)的完整性保護(hù),能夠抵御冒充服務(wù)器的小數(shù)攻擊,但增加了服務(wù)器的運(yùn)算成本,且關(guān)鍵參數(shù)需要保存在服務(wù)器中。
基于上述分析,若提高認(rèn)證安全強(qiáng)度,須引入隨機(jī)因子,或增加交互次數(shù),本文考慮在身份認(rèn)證方案中引入質(zhì)詢—應(yīng)答技術(shù),并且在口令存儲(chǔ)中采用加鹽技術(shù),以提高系統(tǒng)整體的安全性;同時(shí)增加時(shí)間戳作為質(zhì)詢—挑戰(zhàn)驗(yàn)證因子,通信雙方通過(guò)檢驗(yàn)對(duì)方對(duì)非重復(fù)質(zhì)詢作出的響應(yīng)是否正確來(lái)實(shí)現(xiàn)相互認(rèn)證,能夠抵御重放攻擊,同時(shí)具備對(duì)小數(shù)攻擊的防范能力,方案未采用 S/KEY 方案中的Hash 鏈方式,以減少服務(wù)器端的計(jì)算量,提高效率。
質(zhì)詢—應(yīng)答方式一般應(yīng)用于對(duì)密鑰、公鑰的身份認(rèn)證技術(shù),協(xié)議相對(duì)比較復(fù)雜,運(yùn)算量也較大。本文方案是在一般的口令認(rèn)證方案中,通過(guò)增加質(zhì)詢環(huán)節(jié),采用哈希方法,避免數(shù)字簽名、公鑰密碼等運(yùn)算量較大的算法,盡量減少客戶端、服務(wù)端的計(jì)算量,也可達(dá)到提高安全性的效果,如圖2所示。

圖2 強(qiáng)化安全質(zhì)詢—挑戰(zhàn)口令認(rèn)證方案Fig.2 Reinforcing security inquiry-challenge certification Scheme
用戶的主要參數(shù)為userid與password,雙方選定共同的哈希函數(shù)H,約定使用共同的加密解密算法如DES或AES,加密簡(jiǎn)寫為E,解密簡(jiǎn)寫為D。
這種模式的主要特點(diǎn):1)政府主導(dǎo),整合社會(huì)資源,充當(dāng)引領(lǐng)者、推動(dòng)者、服務(wù)者、監(jiān)管者等第三方角色,促進(jìn)鄉(xiāng)村閑置宅的旅游發(fā)展;2)經(jīng)營(yíng)主體依然是個(gè)體農(nóng)戶;3)農(nóng)戶收入主要為租金收入、服務(wù)收入;4)農(nóng)戶與農(nóng)戶之間、農(nóng)戶與村集體之間關(guān)系比較松散。
初始化工作,服務(wù)器端的口令數(shù)據(jù)庫(kù)仍采用類似表1 的結(jié)構(gòu),網(wǎng)上口令注冊(cè)時(shí),生成鹽值密碼儲(chǔ)存。
1)用戶端經(jīng)過(guò)哈希運(yùn)算,形成口令摘要H(password),與userid一起,發(fā)送至服務(wù)器認(rèn)證端。
2)服務(wù)器端根據(jù)userid從口令庫(kù)中取出存儲(chǔ)的、匹配的鹽值salt,計(jì)算H(salt,password),與存儲(chǔ)值進(jìn)行比較,若不相等,則認(rèn)證失敗,否則,轉(zhuǎn)下一步。
3)服務(wù)器端生成時(shí)間戳,將其代替質(zhì)詢隨機(jī)數(shù)r,將此質(zhì)詢暫存,然后將此質(zhì)詢發(fā)送給用戶端。
4)用戶端使用第一步的口令散列值H(password)作為密鑰,用約定的加密算法對(duì)r進(jìn)行加密,即t=E(r),E(r)即用戶端對(duì)認(rèn)證端質(zhì)詢的一個(gè)響應(yīng),將此響應(yīng)發(fā)送回服務(wù)器端。
5)服務(wù)器端使用已收到的口令哈希值作為密鑰,對(duì)收到的響應(yīng)t使用D過(guò)程進(jìn)行解密,并與自己選定的隨機(jī)數(shù)r進(jìn)行比較,若r=t,則認(rèn)證通過(guò)。
顯然,本方案繼承了常規(guī)認(rèn)證方案的優(yōu)點(diǎn),使用了加鹽技術(shù),并引入了時(shí)間戳作為質(zhì)詢,實(shí)現(xiàn)了雙向認(rèn)證,因而能夠抵御字典攻擊、重放攻擊、假冒攻擊和小數(shù)攻擊。
時(shí)間戳技術(shù)的應(yīng)用,起到兩個(gè)作用,一是記錄交互的時(shí)間點(diǎn);二是作為交互的質(zhì)詢因子,即使非法用戶截獲哈??诹钚畔?,然后再傳送給認(rèn)證端,入侵者也很難回答認(rèn)證端的質(zhì)詢,即使隨機(jī)數(shù)r被截獲,也難以破譯哈希口令的時(shí)間戳,這對(duì)攻擊來(lái)說(shuō)是困難的,因而能夠抵御中間重放攻擊。
與前面所述的加鹽方法相比,保留了加鹽技術(shù)能夠抵抗字典分析的優(yōu)點(diǎn),并且挑戰(zhàn)參數(shù)是即時(shí)隨機(jī)生成的,用完后即可丟掉,不同輪次的質(zhì)詢之間不存在相關(guān)性,因而具有更高的靈活性和安全性。
與其他一次一密技術(shù)以及基于公鑰的身份認(rèn)證協(xié)議相比[13-14],本方案服務(wù)器端的運(yùn)算量較小,登錄一次雙方只用到一次加解密運(yùn)算,主要工作為一次基于哈希運(yùn)算的交互和兩次基于對(duì)稱密碼的交互,簡(jiǎn)單易于實(shí)現(xiàn);同時(shí),與文獻(xiàn)[6]中口令認(rèn)證方案相比,運(yùn)算量沒(méi)有增加,安全性有一定提高。
身份認(rèn)證方案的安全強(qiáng)度,需要綜合衡量計(jì)算成本、存儲(chǔ)成本、操作等因素,比如單純?yōu)榱说挚乖诰€字典攻擊,防止機(jī)器惡意注冊(cè),可采用圖形碼驗(yàn)證機(jī)制,這方面的做法有很多。本方案只是提供一種綜合安全強(qiáng)度相對(duì)較高、編程容易實(shí)現(xiàn)、認(rèn)證效率相對(duì)較高的算法,主要不足是依據(jù)本方案的口令注冊(cè)算法、口令更新算法,交互過(guò)程會(huì)比較復(fù)雜,但難度不大,運(yùn)算成本也不會(huì)很高。