本文在研究一次性口令認(rèn)證機(jī)制的基礎(chǔ)上,將一次性口令認(rèn)證應(yīng)用到 Kerberos協(xié)議的初始認(rèn)證階段,在沒有增加 Kerberos認(rèn)證會話次數(shù)的前提下,有效解決了Kerberos協(xié)議存在的易于遭受口令猜測攻擊和重放攻擊的問題。實(shí)驗(yàn)結(jié)果顯示,該方案不僅增強(qiáng)了Kerberos的安全性,而且效率相比PKINIT有了較大的提升,初始認(rèn)證服務(wù)交互時(shí)間減少了32.3%。
S/Key一次性口令認(rèn)證方案是由Bellcore基于單向散列函數(shù)MD4和MD5實(shí)現(xiàn)的。該方案基于挑戰(zhàn)-應(yīng)答機(jī)制,可以有效抵抗口令猜測攻擊和重放攻擊,并且簡單、易于實(shí)施。但是,它不能實(shí)現(xiàn)雙向認(rèn)證,存在服務(wù)器冒充攻擊和小數(shù)攻擊的缺陷。通過監(jiān)聽網(wǎng)絡(luò)通信,截獲用戶的ID和Password來冒充合法用戶是一種常見的網(wǎng)絡(luò)攻擊。一次性口令機(jī)制的設(shè)計(jì)目的就是用戶在每次登錄過程中,使用不同的Password,使得黑客即使截獲,也無法應(yīng)用到下次認(rèn)證過程中。
一次性口令實(shí)現(xiàn)的主要機(jī)制有兩種:
(1)挑戰(zhàn)-應(yīng)答機(jī)制:用戶登錄時(shí),認(rèn)證服務(wù)器產(chǎn)生一條挑戰(zhàn)信息,發(fā)給用戶,用戶根據(jù)挑戰(zhàn)信息和自身的通行密語產(chǎn)生一次性口令,返回給認(rèn)證服務(wù)器,完成認(rèn)證過程。
(2)時(shí)間同步機(jī)制:用戶將登錄時(shí)間作為不確定因素,連同自己的通行密語一起產(chǎn)生一次性口令。
目前使用最多的就是基于挑戰(zhàn)應(yīng)答機(jī)制的一次性口令機(jī)制,S/KEY一次性口令認(rèn)證系統(tǒng)就是其中的典型代表。然而S/Key系統(tǒng)不能抵抗小數(shù)攻擊和冒充攻擊。為了改進(jìn)它的缺陷,提出使用基于公鑰加密的數(shù)字簽名鏈(Signature Chain)的方法來代替S/Key系統(tǒng)的hash函數(shù)鏈,實(shí)現(xiàn)一次性口令機(jī)制。
所謂數(shù)字簽名鏈就是對一條初始消息進(jìn)行重復(fù)簽名,其過程類似于S/Key系統(tǒng)的hash函數(shù)鏈。但是,數(shù)字簽名鏈的長度可以無限擴(kuò)展,而且即使認(rèn)證服務(wù)器重啟后,也不需要重新設(shè)置。其具體定義如下:S是一種公鑰簽名算法(例如,RSA,ECDSA等),PRC是用戶C的私鑰,V是S對應(yīng)的公鑰簽名驗(yàn)證算法PUC是用戶C的公鑰。那么,可以構(gòu)造一對簽名和驗(yàn)證函數(shù):
Kerberos協(xié)議是基于可信第三方的身份認(rèn)證協(xié)議,用于實(shí)現(xiàn)用戶(Client)和應(yīng)用程序服務(wù)器(Application Server)之間的相互認(rèn)證。Kerberos密鑰分配中心(Key Distribute Center,KDC)由認(rèn)證服務(wù)器(Authentication Server,AS)和票據(jù)授權(quán)服務(wù)器(Ticket Granting Server,TGS)組成。Kerberos協(xié)議的認(rèn)證過程中,最為重要的就是第一步:認(rèn)證服務(wù)交互,只有在驗(yàn)證了用戶的合法身份以后,對其頒發(fā)票據(jù)授權(quán)票據(jù)(Tickettgs)和服務(wù)授權(quán)票據(jù)(Ticketv)才有意義。
為了抵抗口令猜測攻擊,Kerberos協(xié)議在V5版本中引入預(yù)認(rèn)證機(jī)制,在KRB_AS_REQ消息中增加預(yù)認(rèn)證塊Pre-authentica tor。改進(jìn)后的Kerberos V5認(rèn)證服務(wù)交換如下:KRB_AS_REQ:
我們分兩個(gè)階段來解釋OTP-Kerberos方案:注冊階段和認(rèn)證階段。
認(rèn)證開始前,我們選取橢圓曲線,產(chǎn)生一對公私鑰,將用戶的公鑰注冊到Kerberos認(rèn)證服務(wù)器,此處,我們采取ECC數(shù)字簽名算法,因此公鑰長度可選取160bits。同時(shí),用戶注冊自己ID和Password到認(rèn)證服務(wù)器。用戶本身并不需要記住自己的password,只需要保存好自己的私鑰 PRC就可以了,同時(shí),用戶端需要保存KDC的公鑰PUc。認(rèn)證服務(wù)器上保存一張表,用以記錄用戶ID,公鑰,本次驗(yàn)證使用的一次性口令以及一次性口令的序號。
認(rèn)證服務(wù)器收到請求后,首先使用自己的私鑰PRas對加密的一次性口令進(jìn)行解密,獲得P1,然后根據(jù)用戶ID,查找用戶公鑰PUc,使用PUc對P1做驗(yàn)證。如果H(P0,P1)=1,那么,該用戶是合法用戶,一次性口令序號加1,保存P1作為新的一次性口令并使用P1作為密鑰,加密Kc,tgs和時(shí)間戳隨機(jī)數(shù)等加密后,形成KRB_AS_REP消息,返回給用戶。否則,拒絕該用戶,返回KRB_ERROR消息。第i次登錄過程與第一次登錄處理過程類似。證明過程如下:因?yàn)?,所以只有產(chǎn)生正確的一次性口令Pi,才能使得公式(2)H(Pi-1,Pi)=1。OTP-Kerberos方案在保持 Kerberos協(xié)議會話次數(shù)不增加的基礎(chǔ)上,對初始認(rèn)證服務(wù)進(jìn)行改進(jìn),解決Kerberos協(xié)議原有的易于遭受口令猜測攻擊和重放攻擊的缺陷,剩余的Kerberos服務(wù)交互會話與原版本一致。
本文提出一種基于一次性口令增強(qiáng) Kerberos的方案OTP-Kerberos,將基于 ECC數(shù)字簽名鏈的一次性口令機(jī)制應(yīng)用于 Kerberos協(xié)議的初始認(rèn)證服務(wù)交互。經(jīng)過安全性分析,OTP-Kerberos協(xié)議可以有效抵抗口令猜測攻擊、重放攻擊等原Kerberos協(xié)議的缺陷。實(shí)驗(yàn)結(jié)果顯示,我們提出的OTP-Kerberos協(xié)議完成認(rèn)證交互服務(wù)的時(shí)間相比PKINIT減少32.3%。
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2015年11期