郭煒杰,包曉安
(浙江理工大學(xué),浙江 杭州 310018)
口令認(rèn)證作為身份認(rèn)證的一種常用技術(shù),用于識別終端用戶身份,防止非法用戶侵入系統(tǒng),確保用戶的合法性,保護(hù)用戶信息以及隱私安全??诹钫J(rèn)證方法簡單便捷,其安全性主要依賴于口令,但目前大部分口令認(rèn)證都比較容易破解,在驗(yàn)證傳輸?shù)倪^程中很容易被黑客截取或竊聽,不法用戶就可以偽裝成合法用戶,從而獲得賬號和密碼,得到和用戶相關(guān)的一切敏感數(shù)據(jù)。
針對身份認(rèn)證口令法,徐淵[1]等人研究的單一口令認(rèn)證法,允許智能終端用戶利用多個(gè)在線服務(wù)和單一口令進(jìn)行遠(yuǎn)程安全認(rèn)證,能夠有效地減少重放攻擊,但并不能夠完全避免驗(yàn)證過程中的網(wǎng)絡(luò)異常,在認(rèn)證時(shí)依舊容易被攻擊;杜夢瑤[2]等人研究了動態(tài)口令認(rèn)證法,利用非對稱加密機(jī)制對認(rèn)證口令進(jìn)行加密處理,同時(shí)以雙向認(rèn)證的方式來保護(hù)用戶信息,克服了傳統(tǒng)挑戰(zhàn)應(yīng)答方式的弱點(diǎn),但動態(tài)口令加密耗時(shí)長,具有一定的局限性。
本文經(jīng)過研究提出一種基于Ajax的智能終端一次性口令身份認(rèn)證方法,Ajax能夠在服務(wù)器與終端瀏覽器間建立中間層,加快服務(wù)器處理速度,減少處理延遲,再根據(jù)歷史用戶流量特征確定安全評估區(qū)間,監(jiān)測網(wǎng)絡(luò)是否存在異常情況,率先一步保證口令認(rèn)證時(shí)網(wǎng)絡(luò)環(huán)境的安全性,在確保認(rèn)證環(huán)境無異常的前提下,對傳統(tǒng)一次口令的不足進(jìn)行改進(jìn)處理,來抵御可能出現(xiàn)的網(wǎng)絡(luò)攻擊和信息泄露,加密通關(guān)密語和加入時(shí)間戳操作,防止口令被外部截取和篡改,在注冊階段和認(rèn)證階段進(jìn)行口令雙向認(rèn)證,確認(rèn)用戶身份,使信息和網(wǎng)絡(luò)安全性得到保障。
為了增強(qiáng)一次性口令驗(yàn)證時(shí)的安全性,需要先對驗(yàn)證過程中的網(wǎng)絡(luò)環(huán)境進(jìn)行檢測,判斷環(huán)境是否安全,使口令驗(yàn)證時(shí)能夠更加有效地躲避異常攻擊。根據(jù)歷史記錄總結(jié)出用戶流量的分布情況,通過評估分析,得出流量分布均值的總體估計(jì)區(qū)間,作為判斷當(dāng)前網(wǎng)絡(luò)環(huán)境是否存在異常的指標(biāo)[3],在同一窗口內(nèi)比較實(shí)際流量數(shù)據(jù)和評估值,若得出的差值在估計(jì)區(qū)間內(nèi),屬于正常情況;反之如果超過估計(jì)區(qū)間,則判定其為異常情況,并發(fā)出預(yù)警,提示一次性口令躲避異常。具體過程如下:
1)根據(jù)用戶流量的歷史記錄,擇選出最近時(shí)間段的n個(gè)流量值作為參考值,規(guī)定窗口大小和參考值大小范圍。
2)設(shè)置流量估計(jì)區(qū)間1-α,α為小于1的常數(shù),當(dāng)給定α值時(shí),通過對流量分布表t的查詢,能夠算出tα/2(n-1)。
3)根據(jù)所選的參考值,可以算出參考流量的均值和估計(jì)區(qū)間,流量參考均值為
(1)
其中,Xi表示網(wǎng)絡(luò)節(jié)點(diǎn)i的流量情況,參考流量標(biāo)準(zhǔn)差值為
(2)
(3)
4)將實(shí)際的流量值數(shù)據(jù)與流量估計(jì)區(qū)間進(jìn)行比較,若實(shí)際值在估計(jì)區(qū)間之內(nèi),代表流量情況正常;若高于估計(jì)區(qū)間最大值,代表流量異常,須做異常預(yù)警[4]處理;若低于估計(jì)區(qū)間的最小值,則服務(wù)器可能存在其它故障。
5)將參考流量中距離最遠(yuǎn)的參考值去除,其它的參考值按序向前位移,用最新采集的流量值填補(bǔ)空出來的最后一位,組成新的參考流量。
6)對第3)到第5)步進(jìn)行迭代,形成下一次的流量異常檢測流程。
通過對一次性口令認(rèn)證時(shí)網(wǎng)絡(luò)異常情況的檢測,初步確定了網(wǎng)絡(luò)環(huán)境安全性,但一次性動態(tài)口令認(rèn)證屬于網(wǎng)絡(luò)服務(wù)器對操作用戶的單方面鑒別,能在一定程度上防止外部攻擊,卻不能完全防止內(nèi)部截取。當(dāng)操作用戶向網(wǎng)絡(luò)服務(wù)器發(fā)出的認(rèn)證請求遭遇黑客截取時(shí),通過修改截取口令與迭代值,冒充服務(wù)器重新發(fā)送給用戶。這時(shí)用戶誤以為是服務(wù)器發(fā)來的驗(yàn)證信息,發(fā)送的口令驗(yàn)證信息,會再次被黑客截取,利用已知函數(shù)反向推導(dǎo)獲得操作用戶其它的認(rèn)證口令,可冒充該用戶而不被察覺,因此本文方法對一次性口令做出調(diào)整,防止冒充服務(wù)器截取用戶信息或是冒充合法用戶進(jìn)行操作這一類的小數(shù)攻擊。具體調(diào)整如下:
1)由保存上一次的動態(tài)口令[5],調(diào)整為由服務(wù)器公鑰經(jīng)過算法將通關(guān)密語加密后再保存,這樣一來智能終端和服務(wù)器可以同時(shí)進(jìn)行計(jì)算,迭代次數(shù)可以隨機(jī)變換,不僅省略了一次口令的初始化時(shí)間、減少用戶等待序列,也在很大程度上避免了迭代次數(shù)被非法分子修改的可能。
2)智能終端和服務(wù)器端口,分別將通關(guān)密語進(jìn)行迭代變換,生成各自不同的一次性口令,再將這兩個(gè)一次性口令加密成一次性會話密鑰[6],智能終端和服務(wù)器端就可以利用這兩個(gè)同時(shí)生成的密鑰,在相互傳送數(shù)據(jù)或操作指令時(shí),通過對雙方密鑰的加密識別和解密讀取,來完成互相鑒別的目的。
3)在1)、2)調(diào)整的基礎(chǔ)上,本文又在服務(wù)器端加入了時(shí)間戳,標(biāo)注該口令產(chǎn)生的時(shí)間,從而能夠判斷認(rèn)證口令是否被篡改,避免了一次口令重復(fù)以及口令被攻擊的可能。
認(rèn)證方案分為兩個(gè)階段,分別為終端用戶注冊階段和認(rèn)證階段,注冊階段只需要執(zhí)行一次即可,認(rèn)證階段是在終端客戶每次登錄系統(tǒng)時(shí),均需要進(jìn)行的實(shí)時(shí)認(rèn)證。
首先終端用戶需要先進(jìn)行真實(shí)身份注冊,完成初始身份信息填寫,注冊流程的詳細(xì)步驟如下:
步驟1:當(dāng)終端用戶向服務(wù)器提出身份注冊請求時(shí),基于真實(shí)身份的基礎(chǔ)上,要求終端用戶輸入用戶身份證明編號[7,8]uid,以及登錄密碼pwd,由終端用戶隨機(jī)生成一個(gè)數(shù)Ri,并計(jì)算校驗(yàn)碼A=H(uid,pwd⊕Ri),H是一個(gè)散列函數(shù)且是安全單向的。
步驟2:終端用戶將校驗(yàn)碼A、隨機(jī)數(shù)Ri和服務(wù)器共享的密鑰K,通過網(wǎng)絡(luò)信道傳送給服務(wù)器。
步驟3:服務(wù)器接收到終端用戶傳送過來的注冊數(shù)據(jù),將其存儲到網(wǎng)絡(luò)數(shù)據(jù)庫內(nèi)[9],為后續(xù)的身份認(rèn)證提供信息基礎(chǔ)。
服務(wù)器在注冊階段收集用戶信息,進(jìn)行初始認(rèn)證和存儲密鑰,使智能終端在每次登錄系統(tǒng)時(shí),都需要通過挑戰(zhàn)應(yīng)答方式[10]認(rèn)證口令,明確身份信息。
步驟1:終端用戶在登錄時(shí),首先輸入身份證明編號uid,使用與服務(wù)器共享的加密算法和密鑰K對編號uid進(jìn)行加密處理[11,12],得出身份賬號ID=EK(uid),向服務(wù)器提交身份認(rèn)證請求。
步驟2:服務(wù)器對接收到的ID解密,求得uid=DK(ID),判斷uid是否存在于服務(wù)器存儲的身份證明編號列表中(List),如果uid在身份證明編號列表中,那么證明這個(gè)uid是合法的,計(jì)算M=H(uid,K),將存放的隨機(jī)數(shù)Ri,從存儲庫中取出與M一并傳送給用戶;反之若uid不屬于列表中,說明uid不合法,即刻終止與該用戶的對話。
步驟3:終端用戶接受到數(shù)據(jù)后,利用自身存儲的uid以及密鑰K,計(jì)算出H(uid,K),將結(jié)果與接收到的M比對,若二者數(shù)值相等,則證明服務(wù)器方是合法的,可以繼續(xù)執(zhí)行下一步驟;否則即刻終止與服務(wù)器的連接對話,重新進(jìn)行系統(tǒng)登錄,再次發(fā)送身份認(rèn)證請求。
步驟4:終端用戶依據(jù)服務(wù)器傳送過來的Ri進(jìn)行以下操作:
1)計(jì)算A=H(uid,pwd⊕Ri);
2)生成隨機(jī)數(shù)Ri+1,計(jì)算出B=H(uid,pwd⊕Ri+1),這里的B是進(jìn)行下一次身份驗(yàn)證的校驗(yàn)碼;
3)對H(B),X,Y分別計(jì)算出數(shù)值,且使H(B)=H(uid,K,B),X=A⊕(B+uid),Y=H(B)⊕B;
4)將求得的X,Y以及Ri+1結(jié)果傳送給服務(wù)器;
步驟5:服務(wù)器接收到X,Y和Ri+1后,結(jié)合自身已存儲的校驗(yàn)碼A,驗(yàn)證終端用戶身份。具體步驟如下:
1)服務(wù)器利用已存儲的校驗(yàn)碼A和uid,計(jì)算X⊕A得出檢驗(yàn)碼B;
2)根據(jù)得出的B值,計(jì)算H(B)=Y⊕B;
3)計(jì)算H(uid,K,B),驗(yàn)證得出的結(jié)果是否與步驟5中2)中得出的H(B)相同,若兩個(gè)結(jié)果不同,向終端用戶發(fā)送“認(rèn)證失敗”的消息,斷開會話連接;若結(jié)果相同,則發(fā)送“認(rèn)證成功”的消息。為了方便下一次的身份認(rèn)證,服務(wù)器對存儲的校驗(yàn)碼A和隨機(jī)數(shù)Ri進(jìn)行更新處理,(使A←B,Ri←Ri+1)。
為驗(yàn)證所提智能終端一次性動態(tài)口令身份認(rèn)證方案的有效性,進(jìn)行仿真。
首先分析一次性口令單次運(yùn)行時(shí)間仿真結(jié)果,描述操作用戶與服務(wù)器連接和進(jìn)行口令認(rèn)證所需要的時(shí)間,運(yùn)行時(shí)間越短,代表連接和認(rèn)證的速度越快。運(yùn)行時(shí)間不僅會影響用戶體驗(yàn)和滿意程度,更重要的是在時(shí)間角度上盡量減少被攻擊的可能。本文通過與單一口令認(rèn)證、動態(tài)口令認(rèn)證兩種方法進(jìn)行對比實(shí)驗(yàn),將得出結(jié)果繪制成圖1所示。
圖1 服務(wù)器運(yùn)行時(shí)間對比
從圖1中可以看出,當(dāng)用戶端提出請求后,所有方法都在12s時(shí)作出認(rèn)證回應(yīng),三種認(rèn)證方法都能在仿真過程中順利完成認(rèn)證工作;
但各方法服務(wù)器與操作用戶連接,并進(jìn)行認(rèn)證的耗時(shí)具有較大差距,單一口令認(rèn)證法在進(jìn)行多次認(rèn)證仿真中,耗費(fèi)時(shí)間處于1.0-1.2s之間,動態(tài)認(rèn)證方法在1.3-1.7s間,是因?yàn)槠湫枰獮樗惴ㄖ械姆菍ΨQ加密預(yù)留出時(shí)間,雖均屬于可接受范圍,但相比本文方法,運(yùn)行時(shí)間較長且波動較大,反觀本文所提方法認(rèn)證時(shí)間在0.8-1.0s間,波動變化極小,相較于前面兩種方法的認(rèn)證穩(wěn)定性更強(qiáng),在時(shí)間角度上具備更低的被攻擊概率。
口令認(rèn)證時(shí)延是指方法在網(wǎng)絡(luò)中經(jīng)歷一次所消耗的時(shí)間,耗時(shí)越短,則表明方法認(rèn)證性能越高,服務(wù)器針對用戶請求的響應(yīng)越迅速,效率更高,能夠更好地給用戶提供服務(wù),減少攔截的可能性。這里對三種方法的時(shí)延進(jìn)行仿真,結(jié)果如圖2所示。
從圖中可以看出,認(rèn)證時(shí)延最高的是動態(tài)口令方法,在前5次認(rèn)證延時(shí)高達(dá)72ms,這是因?yàn)樵撜J(rèn)證方法是動態(tài)變化的,需要通過非對稱加密多次更改認(rèn)證口令,浪費(fèi)大量時(shí)間;單一口令認(rèn)證方法的延時(shí)較短,但相比本文方法還有不足,所提方法的45次認(rèn)證延時(shí)僅為80ms,更加穩(wěn)定,可以判斷本文方法在響應(yīng)用戶的請求速度更快。
需要具體分析隨著認(rèn)證用戶量增加,網(wǎng)路能承載的最大認(rèn)證請求,當(dāng)很多移動智能終端用戶同時(shí)接入服務(wù)器進(jìn)行口令認(rèn)證時(shí),勢必會造成網(wǎng)絡(luò)擁堵,這時(shí)需要判斷方法對網(wǎng)絡(luò)資源的利用程度,當(dāng)網(wǎng)絡(luò)利用率高說明,在相同資源環(huán)境中,方法具有更高的認(rèn)證效率,反之,則說明口令認(rèn)證方案在服務(wù)器中運(yùn)行時(shí)所占用的通信資源較少,對網(wǎng)絡(luò)要求比較高,還容易被異常攻擊竊取信息。
為此,仿真在吞吐量為500MB/s的網(wǎng)絡(luò)下,同時(shí)接入50名用戶進(jìn)行認(rèn)證操作,記錄三種方法的認(rèn)證吞吐量結(jié)果,如圖3所示。
圖3 網(wǎng)絡(luò)利用率對比曲線圖
從圖3中可以看出,在最開始認(rèn)證次數(shù)較少時(shí),單一口令認(rèn)證方法和本文方法的網(wǎng)絡(luò)資源吞吐量差距不大,這是因?yàn)槎叨紝儆诤唵慰诹钫J(rèn)證方式,不需要對口令進(jìn)行復(fù)雜的加密處理,相比動態(tài)口令認(rèn)證,占用的網(wǎng)絡(luò)資源量更多;但隨著身份請求次數(shù)增加,單一口令認(rèn)證資源吞吐量大幅度降低,這是因?yàn)槠錈o法在短時(shí)間內(nèi)利用單個(gè)在線服務(wù)器進(jìn)行多次的認(rèn)證請求,反觀本文方法,資源吞吐量沒有受到較大影響,意味著能夠容納的智能終端用戶數(shù)量也更多。
本文研究一次性口令身份認(rèn)證的最終目的,是為了提高移動智能終端用戶在操作時(shí)的安全性,因此對安全性的仿真是最重要的一步。在相同的網(wǎng)絡(luò)環(huán)境中,設(shè)置12種黑客手段進(jìn)行隨機(jī)攻擊,三種方法的口令認(rèn)證過程安全性仿真,結(jié)果如圖4所示。
圖4 口令認(rèn)證過程安全性對比
從圖中分析可知,本文一次口令認(rèn)證方法的安全系數(shù)相對更高,單一口令認(rèn)證法和動態(tài)口令認(rèn)證法在驗(yàn)證過程中安全系數(shù)的曲線波動相對都比較大,表示認(rèn)證過程安全性并不穩(wěn)定;本文所提方法在經(jīng)過網(wǎng)絡(luò)環(huán)境異常監(jiān)測后,已經(jīng)初步確定公開的網(wǎng)絡(luò)環(huán)境是否安全,在驗(yàn)證前期就能夠有效避開異常,再對網(wǎng)絡(luò)外部攻擊截取進(jìn)行防范,能夠在很大程度上防止黑客攻擊,安全系數(shù)曲線整體來講曲線更加平穩(wěn),波動較小穩(wěn)定性強(qiáng),口令認(rèn)證安全性更高。
經(jīng)過仿真對比證明,本文所提方法能夠在較短時(shí)間內(nèi)完成身份認(rèn)證且延時(shí)更短,避免長時(shí)間情況下遭受小數(shù)攻擊和外部攔截的可能性,網(wǎng)絡(luò)利用率整體較低,占用的通信資源較少,有效地提高了服務(wù)器的處理效率,且安全性更高更穩(wěn)定,魯棒性較好。