馮志華,張宇軒,盧文濤,羅 重
(中國航天科工集團第二研究院 七〇六所,北京 100854)
Kerberos協(xié)議是一種能夠在不安全網(wǎng)絡(luò)中實現(xiàn)安全認(rèn)證的協(xié)議,可以對通信實體進行身份認(rèn)證[1],作為一種可信任的第三方認(rèn)證協(xié)議,它通過對稱加密的方式執(zhí)行認(rèn)證服務(wù)。目前,Kerberos協(xié)議被廣泛應(yīng)用于各主流操作系統(tǒng)以及云存儲、無線網(wǎng)絡(luò)等場景[2],但它仍存在一定的缺陷,比如易受口令攻擊、重放攻擊以及存在密鑰管理困難等問題[3]。
國內(nèi)外學(xué)者針對Kerberos協(xié)議出現(xiàn)的安全漏洞,提出了很多改進方案。針對重放攻擊,文獻[3]提出使用隨機數(shù)來代替協(xié)議中使用的時間戳,在達到相同效果的同時,可以解決時鐘不同步導(dǎo)致的重放攻擊問題。針對口令猜測攻擊,文獻[4-6]提出將公鑰體制引入Kerberos協(xié)議中,利用公鑰證書來進行雙向的身份認(rèn)證,文獻[7]提出利用公鑰密碼體制實現(xiàn)的一次性口令(one-time password,OTP)認(rèn)證機制來進行改進。以上方案對Kerberos協(xié)議易遭受口令猜測攻擊的缺陷進行了改進,但是這些方案將公鑰密碼體制引入到協(xié)議中,導(dǎo)致整體系統(tǒng)需要承擔(dān)過多的計算資源和通信代價。文獻[8]提出在客戶端上使用物理不可克隆函數(shù)(physical unclonable function,PUF)來代替協(xié)議中客戶端使用的口令,從而可以抵抗口令猜測攻擊,并且可以減少整體系統(tǒng)的密鑰管理復(fù)雜度,但是沒有解決協(xié)議易受到重放攻擊的問題和缺陷。
針對Kerberos協(xié)議當(dāng)前存在的問題,本文提出一種基于物理不可克隆函數(shù)(PUF)的Kerberos改進協(xié)議,可以減輕密鑰管理的復(fù)雜度,抵抗口令猜測攻擊和重放攻擊問題。
物理不可克隆函數(shù)(physical unclonable function,PUF)的概念最早在2002年提出,它是一種硬件安全技術(shù),是在電子器件生產(chǎn)過程中所自然產(chǎn)生的不能被復(fù)現(xiàn)的物理變化,類似于人類的指紋,PUF可以利用內(nèi)在的物理構(gòu)造來對電子器件進行唯一標(biāo)識。PUF的特點是“唯一性”和“不可預(yù)測性”,在電子器件的制造中,由于隨機因素影響,在相同條件下制作出來的電子器件也不會在物理結(jié)構(gòu)特性上完全一致[8]。
PUF具有運算快、抗克隆和不可預(yù)測的特點,在認(rèn)證領(lǐng)域具有很高的研究價值[9]?;赑UF設(shè)計的身份認(rèn)證協(xié)議通常需要對應(yīng)設(shè)備利用PUF生成多個激勵響應(yīng)對,然后把上述驗證數(shù)據(jù)和該設(shè)備的身份識別標(biāo)識保存在認(rèn)證服務(wù)器的安全數(shù)據(jù)庫中[8],在進行認(rèn)證時,設(shè)備首先將身份標(biāo)識發(fā)送給認(rèn)證服務(wù)器,之后認(rèn)證服務(wù)器從數(shù)據(jù)庫獲取對應(yīng)身份標(biāo)識的激勵并發(fā)送給設(shè)備,設(shè)備利用PUF輸入激勵獲取響應(yīng),并發(fā)送給認(rèn)證服務(wù)器,認(rèn)證服務(wù)器進行比對,若與數(shù)據(jù)庫中的響應(yīng)一致則認(rèn)證成功。
Kerberos協(xié)議模型中設(shè)計了客戶端C、應(yīng)用服務(wù)器S、認(rèn)證服務(wù)器AS、票據(jù)發(fā)放服務(wù)器TGS這4個實體。Kerberos認(rèn)證協(xié)議描述如圖1所示,步驟(1)到步驟(6)皆為網(wǎng)絡(luò)通信,并且消息皆為密文。整體認(rèn)證流程由3個階段構(gòu)成:
第一階段:包括步驟(1)和步驟(2),客戶端C與認(rèn)證服務(wù)器AS進行認(rèn)證,認(rèn)證成功后,認(rèn)證服務(wù)器AS生成訪問票據(jù)授權(quán)服務(wù)器TGS的授權(quán)票據(jù)TGT,并發(fā)放給客戶端C;
圖1 Kerberos協(xié)議流程
第二階段:包括步驟(3)和步驟(4),客戶端C利用第一階段得到的票據(jù)TGT與票據(jù)授權(quán)服務(wù)器TGS進行認(rèn)證,認(rèn)證成功后,票據(jù)授權(quán)服務(wù)器TGS生成訪問應(yīng)用服務(wù)器S的票據(jù)ST,并發(fā)放給客戶端C;
第三階段:包括步驟(5)和步驟(6),客戶端C利用第二階段得到的票據(jù)ST與應(yīng)用服務(wù)器S進行認(rèn)證,認(rèn)證成功后,客戶端C可以獲得整體應(yīng)用系統(tǒng)的訪問權(quán)限。
Kerberos協(xié)議的具體缺陷分析如下:
(1)在客戶端發(fā)出認(rèn)證申請后,認(rèn)證服務(wù)器基于用戶口令生成會話密鑰,對發(fā)送給客戶端的信息進行加密,攻擊方很容易就通過截獲大量的請求信息得到大量的密文材料,進而利用口令猜測攻擊破解密碼的方法口令[11];
(2)Kerberos協(xié)議為了抵抗其它攻擊者的重放攻擊,選擇在協(xié)議中使用時間戳保證消息的唯一性,但是使用時間戳的前提是需要保證參與認(rèn)證的各方的機器時間保持一致,當(dāng)攻擊者將參與認(rèn)證的某一方的機器時間進行更改后,就能實現(xiàn)消息的重放,從而使得非法用戶可以違規(guī)訪問服務(wù)系統(tǒng),導(dǎo)致系統(tǒng)遭到重放攻擊[12];
(3)Kerberos協(xié)議中,所有參與方必須存儲大量的共享密鑰,密鑰使用與分配繁瑣,需要非常詳細(xì)的安全管理技術(shù)方法,需要花費很大的系統(tǒng)代價[8]。
基于以上對Kerberos協(xié)議的缺陷分析,改進方案的設(shè)計思路如下:
(1)針對口令猜測攻擊,利用Hash加鹽的方式進行防御,利用口令中添加隨機數(shù)的形式來抵抗口令猜測攻擊,具體步驟如2.3所述;
(2)針對重放攻擊,利用隨機數(shù)來代替協(xié)議中使用的時間戳,從而可以做到抵抗重放攻擊的作用,具體改進后的步驟如2.3所述;
(3)針對密鑰管理和維護困難的問題,選擇將PUF放置在應(yīng)用服務(wù)器端,從而做到應(yīng)用服務(wù)器不用保存服務(wù)器端的私有密鑰,做到減輕密鑰的維護困難等問題,具體改進如2.3所述。
為了方便描述,本文為描述協(xié)議所使用的符號及描述見表1。
Kerberos 模型包括的實體如下:
(1)客戶端C:發(fā)出認(rèn)證和服務(wù)請求的實體;
(2)應(yīng)用服務(wù)器S:向用戶提供特定應(yīng)用服務(wù)功能的服務(wù)器;
(3)密鑰分發(fā)中心KDC:包括認(rèn)證服務(wù)器AS和票據(jù)授權(quán)服務(wù)器TGS,實現(xiàn)密鑰的生成、存儲和發(fā)放。認(rèn)證服務(wù)器AS與客戶端C進行認(rèn)證,產(chǎn)生并發(fā)放給客戶端訪問票據(jù)授權(quán)服務(wù)器TGS的授權(quán)票據(jù)TGT;票據(jù)授權(quán)服務(wù)器TGS與客戶端傳送過來的認(rèn)證授權(quán)票據(jù)TGT進行認(rèn)證,驗證成功后生成并發(fā)送給客戶端訪問應(yīng)用服務(wù)器S的服務(wù)票據(jù)ST。
表1 符號及其含義
本文提出的改進工作主要集中在標(biāo)準(zhǔn)Kerberos協(xié)議的初始化階段和認(rèn)證階段,使用隨機數(shù)和基于物理不可克隆函數(shù)生成的激勵響應(yīng)對來對標(biāo)準(zhǔn)協(xié)議進行改進。
首先是初始化階段,應(yīng)用服務(wù)器S利用PUF產(chǎn)生多個激勵認(rèn)證信息對 {IDS,rS,hash(pufS⊕rS)}。 其中pufS值是PUF產(chǎn)生的激勵響應(yīng),只有PUF才能計算出來,rS為隨機產(chǎn)生的隨機數(shù)。之后將PUF產(chǎn)生的認(rèn)證信息對安全存儲在認(rèn)證服務(wù)器AS和票據(jù)授權(quán)服務(wù)器TGS共同信任的數(shù)據(jù)庫中。
其次是注冊階段,此階段與Kerberos原有協(xié)議一致,密鑰分發(fā)中心KDC在數(shù)據(jù)庫中保存進行注冊的客戶端C的用戶名IDC及用戶口令KeyC。
之后是認(rèn)證階段,認(rèn)證階段與Kerberos原有協(xié)議的步驟個數(shù)一致,包括6個步驟,具體流程如下:
(1)C→AS
EncKeyC,AS{IDC‖IPC‖IDTGS}, Enchsah(KeyC){r1}
(KeyC,AS=hash(KeyC⊕r1))
(1)
客戶端C生成隨機數(shù)r1,并且與用戶的口令KeyC進行異或運算后,并對結(jié)果進行哈希摘要運算得到與認(rèn)證服務(wù)器AS之間進行通信的會話密鑰KeyC,AS, 如式(1)所示,利用會話密鑰KeyC,AS加密用戶的用戶名IDC、IP地址IPC以及票據(jù)授權(quán)服務(wù)器TGS的標(biāo)識IDTGS,并對口令KeyC進行哈希運算后作為加密密鑰加密隨機數(shù)r1,將以上密文一同發(fā)送給AS。
(2)AS→C
EncKeyC,AS{IDC‖IPC‖KeyC,TGS},TGT
(TGT=EncKeyTGS{IDC‖IPC‖ETT‖KeyC,TGS})
(2)
認(rèn)證服務(wù)器AS接收到客戶端C傳送的認(rèn)證信息后,查詢客戶端C對應(yīng)的口令KeyC,解密認(rèn)證信息得到隨機數(shù)r1,判斷隨機數(shù)是否與之前接受過的信息有重復(fù),若重復(fù)則舍棄,若不重復(fù)則根據(jù)步驟(1)的操作得到會話密鑰KeyC,AS, 解密接收到的認(rèn)證信息,并對比IDC、IPC等信息是否正確。假如正確,則AS認(rèn)證服務(wù)器需要返回給客戶端C如式(2)所示的信息,第一個數(shù)據(jù)包中包括客戶端的用戶名IDC、IP地址IPC以及客戶端C與TGS進行通信的會話密鑰KeyC,TGS, 并使用上述生成的會話密鑰KeyC,AS進行加密;而數(shù)據(jù)包TGT則是包括客戶端的用戶名IDC、IP地址IPC、票據(jù)有效期ETT以及下一步中客戶端與票據(jù)分發(fā)服務(wù)器TGS的會話密鑰KeyC,TGS, 并且使用的密鑰KeyTGS進行加密。
(3)C→TGS
TGT,IDS,Authenticator1
(Authenticator1=EncKeyC,TGS{IDC‖IPC‖r2})
(3)
客戶端接收到AS發(fā)送的認(rèn)證信息后,首先解密得到密鑰KeyC,TGS, 并用此密鑰加密自己的用戶名IDC、IP地址IPC以及隨機生成的隨機數(shù)r2,該密文被稱為Authenticator1。如式(3)所示,客戶端C將得到的票據(jù)TGT、需要訪問的應(yīng)用服務(wù)器標(biāo)識IDS,以及密文Authenticator1一起發(fā)送給票據(jù)授權(quán)服務(wù)器TGS。
(4)TGS→C
EncKeyC,TGS{KeyC,S‖IDS‖IPS‖rS‖r3},ST
(ST=EncKeypuf{IDC‖IPC‖ETST‖KeyC,S},
Keypuf=hash(hash(pufS⊕rS)))
(4)
當(dāng)票據(jù)授權(quán)服務(wù)器TGS接收到客戶端C傳遞過來的認(rèn)證數(shù)據(jù)后,解析數(shù)據(jù)包,查看身份標(biāo)識IDS是否存在于數(shù)據(jù)庫中,若存在,則使用TGS的密鑰KeyTGS解密票據(jù)TGT,得到TGS與客戶端C的臨時會話密鑰KeyC,TGS, 并檢查ETT是否在有效期內(nèi),然后使用密鑰KeyC,TGS解密Authenticator1,判斷隨機數(shù)r2是否重復(fù)以防止重放攻擊,并校對TGT和Authenticator1中的客戶端名稱IDC是否符合。符合要求后,TGS會生成一個用于客戶端C與應(yīng)用服務(wù)器進行通信的會話密鑰KeyC,S, 并且TGS會從數(shù)據(jù)庫中尋找IDS對應(yīng)的激勵響應(yīng)對 {IDS,rS,hash(pufS⊕rS)}, 利用這些值得到加密密鑰Keypuf,按照式(4)對客戶端IDC、IP地址IPC、票據(jù)存活時間ETST加密后得到訪問應(yīng)用服務(wù)器S的服務(wù)票據(jù)ST并發(fā)送給客戶端C。
(5)C→S
ST,Authenticator2,rS
(Authenticator2=EncKeyC,S{IDC‖r4})
(5)
當(dāng)客戶端C收到TGS傳遞的信息后,利用密鑰KeyC,TGS解密得到服務(wù)器名IDS、服務(wù)器地址IPS、與服務(wù)器通信的臨時密鑰KeyC,S、 隨機數(shù)rS以及隨機數(shù)r3,判斷符合要求之后生成隨機數(shù)r4,用臨時密鑰KeyC,S加密IDC以及隨機數(shù)r4得到密文Authenticator2,然后將上述得到的密文Authenticator2、訪問應(yīng)用服務(wù)器S的服務(wù)票據(jù)ST以及隨機數(shù)rS發(fā)送給服務(wù)器S,進行認(rèn)證。
(6)S→C
EncKeyC,S{r4}
(6)
應(yīng)用服務(wù)器端S收到客戶端發(fā)送的認(rèn)證信息后,利用服務(wù)器自帶的PUF計算得到密鑰Keypuf,解密ST得到用戶名、票據(jù)有效期以及后續(xù)的臨時會話密鑰KeyC,S, 首先查看票據(jù)是否在有效期內(nèi),然后解密得到隨機數(shù)r4、用戶名IDC,判斷隨機數(shù)是否重復(fù),并與ST解密得到的數(shù)據(jù)進行比較,判斷用戶名是否一致,若以上均符合,則說明認(rèn)證客戶端成功,應(yīng)用服務(wù)器使用密鑰KeyC,S加密隨機數(shù)r4并發(fā)送給客戶端C,表明服務(wù)器對客戶端認(rèn)證成功。
3.1.1 抵抗口令猜測攻擊
在Kerberos協(xié)議中,客戶端C和認(rèn)證服務(wù)器AS之間的通信報文都是采用對稱算法加密后的密文,其中加密數(shù)據(jù)所使用的密鑰則是對用戶的口令采用摘要函數(shù)計算得到的。但是假如用戶使用的口令強度不高,則對于整體系統(tǒng)網(wǎng)絡(luò)進行監(jiān)聽的攻擊者可以通過采集大量的數(shù)據(jù)包來對口令進行猜測攻擊,從而威脅到整體系統(tǒng)的安全性。
本改進協(xié)議中使用隨機數(shù)參與到生成客戶端密鑰的過程中,利用哈希加鹽的方式來抵抗口令猜測攻擊,每一次客戶端C與認(rèn)證服務(wù)器AS之間進行通信時,客戶端都生成一個隨機數(shù),利用哈希加鹽的方式得到客戶端密鑰。并且利用用戶口令的哈希值作為密鑰加密此隨機數(shù),并發(fā)送給認(rèn)證服務(wù)器AS,AS解密得到對應(yīng)隨機數(shù),之后可以自己生成與客戶端進行交互的會話密鑰,做到與客戶端之間的加密通信。此方式可以做到用戶口令強度不夠的情況下有效阻止攻擊者通過收集大量票據(jù)對密鑰進行猜測攻擊。
3.1.2 抵抗重放攻擊
為了防止重放攻擊,Kerberos協(xié)議中引入了時間戳機制,在每個票據(jù)中都包含有時間戳,可以在各個參與認(rèn)證的通信方時鐘同步的基礎(chǔ)上做到對重放攻擊的抵抗。但在實際環(huán)境中,不同的參與通信方之間可能會存在不可預(yù)見的網(wǎng)絡(luò)延遲,導(dǎo)致各方的時鐘做不到精準(zhǔn)地同步,從而存在重放攻擊的隱患[6]。在客戶端C向應(yīng)用服務(wù)器S發(fā)送請求服務(wù)時,攻擊方可以竊聽并復(fù)制該消息,重放給應(yīng)用服務(wù)器S,在時間差允許的范圍內(nèi),應(yīng)用服務(wù)器S不會丟棄此信息數(shù)據(jù)包,而是再次處理該消息。
本改進協(xié)議中使用隨機數(shù)來代替時間戳,在客戶端C與服務(wù)器S進行通信時,不使用時間戳作為防重放攻擊的手段,而是采用隨機數(shù)來代替時間戳,利用隨機數(shù)每一次的不同做到接收到重復(fù)的認(rèn)證信息時,判斷隨機數(shù)是否相同,從而防止外部攻擊者進行重放攻擊,并且消除了使用時間戳帶來的各種缺點和隱患。
Scyther由牛津大學(xué)的Cremers教授及其團隊所開發(fā)[13],它是一款對安全協(xié)議進行形式化分析的軟件。Scyther工具具有可視化應(yīng)用界面以及協(xié)議分析結(jié)果,可以簡單直觀地展示出安全協(xié)議的漏洞和缺陷。此外,Scyther工具使用的協(xié)議形式化語言 SPDL簡潔易懂,可以對整體協(xié)議的具體細(xì)節(jié)和攻擊場景進行較為精確地定義[14]。以上特點及優(yōu)點使得Scyther工具被廣泛用于對協(xié)議的形式化分析與研究。
實驗中所使用的Scyther形式化分析工具版本為Scyther v1.1.3,選擇的系統(tǒng)環(huán)境為AMD R7 5800 H的處理器、Windows 11操作系統(tǒng)、16 G內(nèi)存的筆記本電腦,安裝python 2.7以及Scyther v1.1.3后即可對協(xié)議進行形式化分析。
本文在使用Scyther工具對Kerberos改進協(xié)議的建模中,定義了4個角色,分別為:C、AS、T與S,表示參與協(xié)議的通信方:客戶端、認(rèn)證服務(wù)器、票據(jù)授權(quán)服務(wù)器以及應(yīng)用服務(wù)器。并且在形式化驗證中,對每個通信方發(fā)送和接收的每條消息都做了相應(yīng)的秘密聲明,其中客戶端C通信的形式化協(xié)議描述如圖2所示。
圖2 客戶端C的形式化語義描述
第1行為對客戶端C的角色定義,角色定義完成后,首先需要聲明和定義本角色中傳遞的消息所使用到的數(shù)據(jù)變量或者常量(圖中略去),之后需要對協(xié)議流程進行描述,第2行到第7行表示本角色在協(xié)議中參與的行為事件,第2行和第3行為客戶端C向認(rèn)證服務(wù)器AS發(fā)送和接收認(rèn)證信息,第4行和第5行為客戶端C向票據(jù)授權(quán)服務(wù)器TGS發(fā)送和接受認(rèn)證信息,第6行和第7行為客戶端C向應(yīng)用服務(wù)器S發(fā)送和接收認(rèn)證信息。
認(rèn)證服務(wù)器AS、票據(jù)授權(quán)服務(wù)器TGS以及應(yīng)用服務(wù)器S的形式化語義描述與客戶端C類似,因此不贅述過程,它們的形式化語義描述如圖3所示。
圖3 其它角色的形式化語義描述
在對改進協(xié)議的形式化語義描述定義完成后,使用Scyther工具進行運行驗證。驗證結(jié)果見表2,認(rèn)證聲明:Alive、Weakagree、Niagree和Nisynch分別用于檢測重放攻擊、反射攻擊、中間人攻擊以及前后向安全性等惡意攻擊[15]。結(jié)果表明Scyther工具在以上惡意攻擊的檢測中無法有效攻破基于PUF的Kerberos改進協(xié)議,本改進協(xié)議可以抵抗重放攻擊、反射攻擊和中間人攻擊等威脅。
表2 形式化驗證結(jié)果
本文在分析Kerberos認(rèn)證協(xié)議安全缺陷的基礎(chǔ)上,提出一種基于物理不可克隆函數(shù)(PUF)的Kerberos改進協(xié)議。利用PUF產(chǎn)生的激勵響應(yīng)對代替Kerberos標(biāo)準(zhǔn)協(xié)議中的密鑰,同時利用隨機數(shù)與用戶口令結(jié)合運算生成會話密鑰,并且采用隨機數(shù)來代替時間戳。使用Scyther形式化分析工具分析表明,該擴展協(xié)議可以做到抵抗口令猜測攻擊以及重放攻擊,并且可以降低系統(tǒng)中的密鑰存儲開銷和密鑰泄露風(fēng)險。在日益嚴(yán)峻的信息安全大環(huán)境下,該認(rèn)證協(xié)議可以提高系統(tǒng)的安全性,抵御惡意攻擊。