趙 梁,李 磊,李向麗
(鄭州大學(xué) 信息工程學(xué)院,鄭州 450000)
在Web應(yīng)用的安全保障措施中,通常使用各類權(quán)限框架來(lái)保證整個(gè)系統(tǒng)的安全性以及數(shù)據(jù)的完整性。雖然權(quán)限框架能夠?qū)崿F(xiàn)客戶端請(qǐng)求的合法性校驗(yàn),但是攻擊者仍可以通過(guò)攔截合法的請(qǐng)求報(bào)文來(lái)獲取交互過(guò)程中的請(qǐng)求信息,從而對(duì)Web應(yīng)用程序執(zhí)行重放攻擊,入侵系統(tǒng)獲取用戶的數(shù)據(jù)信息。
針對(duì)重放攻擊防御的問(wèn)題,現(xiàn)有基于權(quán)限認(rèn)證框架的方案多為每一次請(qǐng)求設(shè)置一個(gè)新鮮性標(biāo)識(shí)來(lái)確定此次請(qǐng)求是否為新請(qǐng)求,從而過(guò)濾重放攻擊。設(shè)置消息新鮮性標(biāo)識(shí)的方法可以使用基于時(shí)間戳[1-2]、序列號(hào)[3]、版本號(hào)[4]和計(jì)數(shù)器[5]等。然而服務(wù)端權(quán)限框架針對(duì)每次請(qǐng)求的新鮮性檢測(cè)能力較弱,使得服務(wù)端應(yīng)用程序在重放攻擊方面的防御能力有限。
文獻(xiàn)[1]提出一種利用傳遞消息時(shí)系統(tǒng)的時(shí)間戳進(jìn)行消息新鮮性標(biāo)識(shí)的方法,當(dāng)攻擊者執(zhí)行重放攻擊時(shí),通過(guò)將報(bào)文的時(shí)間戳與已緩存時(shí)間戳進(jìn)行比較判斷消息的新鮮性,從而過(guò)濾重放攻擊報(bào)文。該方法能有效地防御重放攻擊,但存放時(shí)間戳信息會(huì)耗費(fèi)大量的存儲(chǔ)空間,從而影響服務(wù)端程序運(yùn)行效率。文獻(xiàn)[2]提出一種基于時(shí)間戳比較的請(qǐng)求過(guò)濾方案,即當(dāng)消息時(shí)間戳超出服務(wù)端預(yù)定的范圍時(shí)即拒絕消息請(qǐng)求。該方案在一定的請(qǐng)求時(shí)延內(nèi)可有效防御重放攻擊,但是如果服務(wù)端的時(shí)鐘與客戶端的時(shí)鐘不同步,就會(huì)導(dǎo)致服務(wù)端拒絕客戶端的請(qǐng)求。文獻(xiàn)[3]提出一種通過(guò)設(shè)置無(wú)重復(fù)請(qǐng)求序列號(hào)進(jìn)行消息新鮮性標(biāo)識(shí)的方法,將每個(gè)到達(dá)服務(wù)端的請(qǐng)求信息序列號(hào)與已存儲(chǔ)的序列號(hào)進(jìn)行比較,如果不存在,存儲(chǔ)該序列號(hào),否則就認(rèn)為是重放攻擊。該方法解決了使用時(shí)間戳比較時(shí)的時(shí)鐘同步問(wèn)題,但是由于服務(wù)端需要存儲(chǔ)每次請(qǐng)求的序列號(hào),因此會(huì)造成服務(wù)端存儲(chǔ)開銷較大,影響運(yùn)行效率。文獻(xiàn)[4]提出一種基于版本號(hào)的消息新鮮性標(biāo)識(shí)方案,通過(guò)在雙端定義請(qǐng)求版本號(hào)來(lái)維持新鮮性標(biāo)識(shí)。該方案解決了依賴于服務(wù)端存儲(chǔ)的重放攻擊防御問(wèn)題,同時(shí)保證了雙端的請(qǐng)求的可靠性,但是當(dāng)攻擊者在抓取大量的請(qǐng)求信息后,可以猜解出請(qǐng)求版本號(hào)的更新模式,從而偽造請(qǐng)求執(zhí)行新的重放攻擊。
為解決基于時(shí)間戳方案的時(shí)鐘同步問(wèn)題以及基于請(qǐng)求版本號(hào)方案服務(wù)器存儲(chǔ)空間開銷較大的問(wèn)題,文獻(xiàn)[5]提出一種基于計(jì)數(shù)器與動(dòng)態(tài)交驗(yàn)子的請(qǐng)求校驗(yàn)方案。該方案可以在一定網(wǎng)絡(luò)延時(shí)內(nèi)抵御重放攻擊,同時(shí)又能夠解決雙端的時(shí)鐘同步問(wèn)題,但是由于其中的動(dòng)態(tài)校驗(yàn)子是基于服務(wù)器端的時(shí)間戳生成的,當(dāng)網(wǎng)絡(luò)延遲過(guò)大時(shí)會(huì)造成校驗(yàn)失敗,因此對(duì)于大部分Web應(yīng)用的權(quán)限框架攻擊防御方案不適用。
基于時(shí)間戳的重放攻擊防御方案對(duì)于服務(wù)器的時(shí)效性要求較高,Web應(yīng)用系統(tǒng)經(jīng)常會(huì)因訪問(wèn)量過(guò)大而導(dǎo)致延遲,基于時(shí)間戳的方法在此種情況下會(huì)失效;而基于版本號(hào)的方案除了服務(wù)器本身的存儲(chǔ)開銷以外還需要對(duì)每一次請(qǐng)求進(jìn)行版本號(hào)存儲(chǔ),服務(wù)器的存儲(chǔ)開銷過(guò)大。為此,本文通過(guò)引入雙序列函數(shù),提出不依賴于時(shí)間戳與存儲(chǔ)版本的的請(qǐng)求校驗(yàn)方案對(duì)請(qǐng)求進(jìn)行合法校驗(yàn),并使其能夠適用于多數(shù)Web權(quán)限框架進(jìn)行重放攻擊的防御。
在本文方案中,請(qǐng)求過(guò)程分為身份校驗(yàn)過(guò)程和會(huì)話保持過(guò)程。身份校驗(yàn)過(guò)程是指在登錄過(guò)程中通過(guò)比較序列函數(shù)值對(duì)兩端身份進(jìn)行雙向認(rèn)證。會(huì)話保持過(guò)程是指在客戶端與服務(wù)端相互認(rèn)證之后在保持會(huì)話的過(guò)程中通過(guò)雙端周期函數(shù)值比對(duì)進(jìn)行會(huì)話的合法性校驗(yàn)。在會(huì)話保持過(guò)程中使用周期校驗(yàn)因子對(duì)周期函數(shù)的周期進(jìn)行變換,周期校驗(yàn)因子是指周期函數(shù)中影響函數(shù)周期變化的參數(shù),周期值則是變化后的結(jié)果。例如,f(x)=cos(x/n),則n就是f(x)的周期校驗(yàn)因子,x/n為周期函數(shù)的周期值。請(qǐng)求過(guò)程中所用到的符號(hào)及其定義如表1所示。

表1 符號(hào)定義Table 1 Symbol definition
本文方案采用雙序列函數(shù)對(duì)請(qǐng)求過(guò)程進(jìn)行新鮮性驗(yàn)證。客戶端與服務(wù)端具有相同的非周期函數(shù),在身份校驗(yàn)過(guò)程中,客戶端使用非周期函數(shù)生成身份校驗(yàn)的隨機(jī)數(shù),并根據(jù)身份校驗(yàn)的隨機(jī)數(shù)生成加密校驗(yàn)因子[6],服務(wù)端通過(guò)比較請(qǐng)求與自身通過(guò)運(yùn)算(使用相同的隨機(jī)數(shù)在相同的周期函數(shù)下運(yùn)算)所得的加密校驗(yàn)因子是否一致來(lái)判斷服務(wù)端請(qǐng)求的新鮮性[7]。在每一次請(qǐng)求之后,兩個(gè)非周期函數(shù)都按同一步長(zhǎng)[8]計(jì)算下一次的加密校驗(yàn)因子。在身份校驗(yàn)通過(guò)之后,生成隨機(jī)數(shù)作為下一次請(qǐng)求的周期函數(shù)參數(shù),以保證每次校驗(yàn)完成之后的周期函數(shù)新鮮性,并利用雙端的周期函數(shù)生成加密校驗(yàn)因子,服務(wù)端通過(guò)同樣的方式生成加密校驗(yàn)因子進(jìn)行比對(duì),在每次請(qǐng)求過(guò)后按統(tǒng)一步長(zhǎng)向下運(yùn)行,在運(yùn)算一個(gè)周期后,利用周期校驗(yàn)因子改變周期,利用同樣的步長(zhǎng)重新開始運(yùn)算,以保證每個(gè)周期的隨機(jī)數(shù)新鮮性[9]。
按照上述方案,客戶端與服務(wù)端均擁有相同的序列函數(shù)(即初值相同、序列函數(shù)的系數(shù)均相同且含有2個(gè)以上的系數(shù)[10])和周期校驗(yàn)函數(shù)(初值相同且周期校驗(yàn)因子相同),服務(wù)端與客戶端具有相同的運(yùn)算參數(shù)P,在序列函數(shù)系數(shù)改變后使用P作為雙端序列函數(shù)運(yùn)算的初值,而服務(wù)端擁有一個(gè)隨機(jī)數(shù)作為服務(wù)端的請(qǐng)求校驗(yàn)參數(shù)Key的初值(初值的位數(shù)少于請(qǐng)求過(guò)程中md5運(yùn)算加密值的位數(shù))。為便于說(shuō)明,此處假設(shè)客戶端與服務(wù)端發(fā)送失敗之后會(huì)執(zhí)行重發(fā)操作以保證序列信息不發(fā)生位偏[11]現(xiàn)象。身份校驗(yàn)過(guò)程如下:
步驟1首先客戶端生成隨機(jī)數(shù)X,并使用初始的序列函數(shù)執(zhí)行F(X)函數(shù)運(yùn)算得到運(yùn)算結(jié)果Realmc,之后執(zhí)行單向哈希算法md5(Realmc,A),得到加密參數(shù)Rc,然后向服務(wù)端發(fā)送Rc作為校驗(yàn)參數(shù)、隨機(jī)數(shù)X,并將X作為服務(wù)端的序列函數(shù)初值[12]:X=Random(x),Realmc=F(X),Rc=md5(Realmc,A),C→S:REQUEST(Rc,X)。
步驟2服務(wù)端接收到X,首先判斷得到的請(qǐng)求參數(shù)Rc是否與Key相等。如果相等,則判斷請(qǐng)求為重放攻擊,拒絕會(huì)話;如果不相等,運(yùn)算F(X)得到函數(shù)值Realms,再執(zhí)行單向哈希算法md5(Realms,A)得到加密結(jié)果Rs,并將Rs與客戶端傳來(lái)的加密結(jié)果Rc進(jìn)行比較。如果相同,則執(zhí)行Key=Rc,否則拒絕通信。判斷完畢后,生成一個(gè)隨機(jī)數(shù)M,將原有的序列函數(shù)系數(shù)A的值替換為M,通過(guò)計(jì)算F(P)得到新的函數(shù)運(yùn)算值[13]Realmres,執(zhí)行單向哈希算法md5(Realmres,P)得到加密結(jié)果Ra,然后執(zhí)行P=P+StepA,并將加密結(jié)果與新的F(X)系數(shù)A發(fā)送給客戶端。算法代碼如下:
If Rc==Key Then {Restart Protocol;}
Else Realms=F(X);
Rs=md5(Realm,A);
If Rs==Rc Then{M=Random(x);
A=M;
Realmres=F(P);
Ra=md5(Realmres,P);
P=P+StepA;
Key=Rc;
S→C:RESPONSE(Ra,M);}
Else Restart Protocol;
步驟3客戶端收到響應(yīng)后,首先使用新的系數(shù)值M替換客戶端自身序列函數(shù)的系數(shù)A,計(jì)算F(P)得到Realmreq,執(zhí)行單向哈希算法md5(Realmreq,P)得到加密結(jié)果Rac,然后將加密結(jié)果與服務(wù)器響應(yīng)中的Ra做比較。如果相同,則承認(rèn)此服務(wù)端合法并執(zhí)行P=P+StepA,生成隨機(jī)數(shù)J,將周期函數(shù)的周期值改為J,否則拒絕通信。判斷完成后,計(jì)算新的F(P)得到函數(shù)值Realmcs,執(zhí)行單向哈希算法md5(Realmcs,P)得到請(qǐng)求參數(shù)Rb,并將Rb和J作為請(qǐng)求參數(shù)發(fā)送到服務(wù)端。算法代碼如下:
A=M;
Realmreq=F(P);
Rac=md5(Realmreq,P);
If Rac==Ra Then{
P=P+StepA;
J=Random(x);
f(;J);
Realmcs=F(P);
Rb=md5(Realmcs,P);
C→S:REQUEST(Rb,J);}
Else Restart Protocol;
步驟4服務(wù)端接收到請(qǐng)求參數(shù)Rb之后,對(duì)Rb與Key做比較,如果相同則為重放攻擊拒絕會(huì)話,否則執(zhí)行Key=Rb。再通過(guò)計(jì)算F(P)得到函數(shù)值Realmsc,執(zhí)行md5(Realmsc,P)得到加密參數(shù)Rbs,判斷Rbs與Rb是否相等。如果相等,則承認(rèn)客戶端合法并且運(yùn)算P=P+StepA,將周期校驗(yàn)函數(shù)的周期值置為J,否則拒絕客戶端會(huì)話。算法代碼如下:
If Rb==Key Then {Restart Protocol;}
Else Key=Rb;
Realmsc=F(P);
Rbs=md5(Realmsc,P);
If Rbs==Rb Then {
P=P+StepA;
f(;J);}
Else Restart Protocol;
客戶端與服務(wù)端相互認(rèn)證身份后,客戶端與服務(wù)端進(jìn)入會(huì)話保持過(guò)程。會(huì)話保持過(guò)程如下:
步驟1客戶端調(diào)用周期函數(shù)f(X),使用客戶端與服務(wù)端共享的初值X0運(yùn)算得到周期函數(shù)初始值YGc,將X0/N結(jié)果作為加密參數(shù)Kxc,執(zhí)行運(yùn)算md5(Yc,Kxc)得到請(qǐng)求參數(shù)[14]Tc。然后執(zhí)行X=X0+StepN更新X值作為下一次運(yùn)算參數(shù),并將請(qǐng)求參數(shù)Tc發(fā)送到服務(wù)端。算法代碼如下:
Yc=f(X0);
Kxc=X0/N;
Rc=md5(Yc,Kxc);
X=X0+StepN;
C→S:REQUEST(Tc);
步驟2服務(wù)端收到客戶端的請(qǐng)求參數(shù)Tc后,將Tc與Key做比較。如果相等,則判斷此次請(qǐng)求為重放攻擊,拒絕會(huì)話,否則執(zhí)行key=Tc。再通過(guò)計(jì)算f(X0)得到函數(shù)值Ys,將X0/N作為加密參數(shù)[15]Kxs,執(zhí)行md5(Ys,Kxs)得到加密值Tse。判斷Tse與Tc是否相等[16],如果相等,則此次會(huì)話是合法的,否則就終止會(huì)話。在確認(rèn)此次會(huì)話合法之后,服務(wù)端計(jì)算X=X0+StepN并執(zhí)行f(X)得到周期函數(shù)值Ysc,判斷Ysc是否大于等于U。如果Ysc≥U的話,則對(duì)周期函數(shù)執(zhí)行周期校驗(yàn)運(yùn)算f(X;N),并將X置為初始值X0,重新運(yùn)算f(X)得到新的周期函數(shù)值Ysc。然后運(yùn)算X×N得到響應(yīng)加密參數(shù)[17]Kxsc,執(zhí)行md5(Ysc,Kxsc)得到響應(yīng)參數(shù)Tsc,將響應(yīng)參數(shù)Tsc響應(yīng)給客戶端。算法代碼如下:
If Tc==Key ThenRestart Protocol;
Else Key=Tc;
Ys=f(X0);
Kxs=X0/N;
Tse=md5(Ys,Kxs);
If Tse==Tc Then X=X0+StepN;
Ysc=f(X);
If Ysc>=U Then{f(X)=f(X;N);
X=X0;
Ysc=f(X);}
Kxsc=X*N;
Tsc=md5(Ysc,Kxsc);
S→C:RESPONSE(Tsc);
Else Restart Protocol;
步驟3客戶端收到服務(wù)端的響應(yīng)參數(shù)Tsc后,計(jì)算f(X)函數(shù)值Ycs,判斷Ycs是否大于等于U,如果Ycs≥U則周期函數(shù)執(zhí)行周期校驗(yàn)運(yùn)算f(X;N),并將X置為初始值X0,重新運(yùn)算f(X)得到新的函數(shù)值Ycs,計(jì)算X×N得到md5加密參數(shù)Kxcs,執(zhí)行md5(Ycs,Kxcs)得到加密值Tcs,判斷Tcs與Tsc是否相等。如果相等,則判斷不是重放攻擊,允許會(huì)話,否則就終止會(huì)話。判斷完畢后,計(jì)算f(X)得到函數(shù)值Yc1,計(jì)算X/N得到加密參數(shù)[18]Kxc1,執(zhí)行md5(Yc1,Kxc1)得到請(qǐng)求參數(shù)Tc1,在請(qǐng)求時(shí)發(fā)送Tc1作為服務(wù)端的加密校驗(yàn)參數(shù)。每次請(qǐng)求都會(huì)執(zhí)行以上步驟來(lái)保證消息的可靠性。算法代碼如下:
Ycs=f(X);
If Ycs>=U Then {f(X)=f(X;N);
X=X0;
Ycs=f(X);}
Kxcs=X*N;
Tcs=md5(Ycs,Kxcs);
If Tcs==Tsc Then {Yc1=f(X);
Kxc1=X/N;
Tc1=md5(Yc1,Kxc1);
C→S:REQUEST(Tc1);}
Else Restart Protocol;
為便于說(shuō)明,本文假設(shè)攻擊者可以獲取所有的請(qǐng)求與響應(yīng)信息,并利用請(qǐng)求信息對(duì)服務(wù)端執(zhí)行重放攻擊。
如果在雙端認(rèn)證階段步驟1執(zhí)行重放攻擊,那么由于服務(wù)端會(huì)直接校驗(yàn)Key值是否與加密校驗(yàn)參數(shù)相等,相等的話就說(shuō)明此次請(qǐng)求與上一次請(qǐng)求重復(fù)是重放攻擊,而Key值是由客戶端初次請(qǐng)求得到的Key,步驟2重復(fù)請(qǐng)求的話Key值必定會(huì)與加密校驗(yàn)參數(shù)相等所以會(huì)拒絕此次請(qǐng)求。如果在步驟2執(zhí)行重放攻擊,那么由于客戶端會(huì)比對(duì)響應(yīng)中的加密校驗(yàn)參數(shù)是否與自身生成的加密校驗(yàn)參數(shù)相等,相等的話說(shuō)明此次響應(yīng)是服務(wù)端的響應(yīng)并改變序列函數(shù)的運(yùn)算值,由于該加密校驗(yàn)參數(shù)的值是基于序列函數(shù)的值生成的,重放上一次請(qǐng)求會(huì)導(dǎo)致加密校驗(yàn)參數(shù)比對(duì)失敗,因此會(huì)拒絕重放攻擊的請(qǐng)求。同理,在步驟3執(zhí)行重放攻擊,由于序列函數(shù)值的變化以及Key值的變化,重放攻擊的請(qǐng)求無(wú)法通過(guò)Key值校驗(yàn)。而在步驟4執(zhí)行重放攻擊,由于客戶端序列函數(shù)值的變化,重放攻擊的響應(yīng)無(wú)法通過(guò)加密校驗(yàn)參數(shù)的校驗(yàn)。
會(huì)話保持階段與身份校驗(yàn)階段類似,服務(wù)端在每次收到請(qǐng)求時(shí)會(huì)校驗(yàn)對(duì)應(yīng)的Key值,由于周期函數(shù)值變化以及每次請(qǐng)求改變Key值,因此重放攻擊無(wú)法通過(guò)服務(wù)端的校驗(yàn)。而客戶端每次收到響應(yīng)都會(huì)與自身生成的加密校驗(yàn)參數(shù)作比對(duì),由于周期函數(shù)值的變化以及每經(jīng)過(guò)一周期函數(shù)系數(shù)的變化,客戶端所運(yùn)算出來(lái)的加密校驗(yàn)參數(shù)也會(huì)改變,因此重放攻擊無(wú)法通過(guò)客戶端的校驗(yàn)。
信息篡改攻擊指攻擊者攔截用戶請(qǐng)求報(bào)文,篡改其中的重要信息,并發(fā)送新的請(qǐng)求到服務(wù)端獲取用戶數(shù)據(jù)。假設(shè)攻擊者具有破解單向哈希加密算法的能力,并且可以獲取通信過(guò)程中的報(bào)文信息。由于每次請(qǐng)求的加密校驗(yàn)參數(shù)的加密鹽值信息變化導(dǎo)致攻擊者無(wú)法破譯加密校驗(yàn)參數(shù),并且Key值與加密校驗(yàn)參數(shù)每次請(qǐng)求生成的值都不同,因此信息篡改的請(qǐng)求無(wú)法通過(guò)服務(wù)端校驗(yàn)。
密碼猜解攻擊是指攻擊者通過(guò)發(fā)送大量的請(qǐng)求到服務(wù)器窮舉出用戶密碼[19]。假設(shè)攻擊者可以發(fā)送大量的密碼嘗試報(bào)文。由于每次請(qǐng)求都需要經(jīng)過(guò)雙重校驗(yàn),而校驗(yàn)參數(shù)又隨請(qǐng)求次數(shù)不斷變化,所以攻擊者的猜解嘗試報(bào)文無(wú)法通過(guò)服務(wù)端的校驗(yàn)。
線下密碼猜解攻擊是指利用線上抓取的報(bào)文信息在線下進(jìn)行密碼的破解工作之后再構(gòu)造報(bào)文請(qǐng)求。假設(shè)攻擊者可以線下破解單向哈希算法,由于每經(jīng)過(guò)一個(gè)周期,函數(shù)的系數(shù)都會(huì)變化,而加密校驗(yàn)參數(shù)又是基于系數(shù)生成的,因此每個(gè)周期的請(qǐng)求加密方式都不相同,無(wú)法破解。
中間人攻擊是指攻擊者大量竊聽雙端的通信,從中獲取雙端的通信規(guī)律,并用此偽造請(qǐng)求信息。假設(shè)攻擊者可以獲取雙端所有的通信報(bào)文信息,由于函數(shù)的初始系數(shù)都是隨機(jī)生成的,并且每個(gè)周期過(guò)后都會(huì)更新系數(shù),因此每次請(qǐng)求的加密校驗(yàn)參數(shù)生成策略是基于隨機(jī)數(shù)的、無(wú)規(guī)律的,攻擊者無(wú)法利用請(qǐng)求信息猜解出規(guī)律。
偽造服務(wù)端的攻擊是指攻擊者偽裝成服務(wù)端接收客戶端的請(qǐng)求信息并回送響應(yīng),從而獲取客戶端所發(fā)送到服務(wù)端的信息[20]。假設(shè)攻擊者可以偽造通信的服務(wù)端。由于客戶端每次收到響應(yīng)都會(huì)校驗(yàn)對(duì)應(yīng)的加密校驗(yàn)參數(shù),因此如果偽造服務(wù)端,則在沒有服務(wù)端函數(shù)的情況下無(wú)法偽造響應(yīng)到客戶端。
Session竊取攻擊是指攻擊者通過(guò)竊取合法用戶的Session,偽造合法用戶的會(huì)話請(qǐng)求來(lái)獲取用戶數(shù)據(jù)。假設(shè)攻擊者可以竊取合法用戶的Session信息。由于本文方案在Session校驗(yàn)機(jī)制之外增加了新的校驗(yàn)方案,即使攻擊者竊取了Session信息,在沒有序列函數(shù)與周期函數(shù)的情況下也無(wú)法生成加密校驗(yàn)參數(shù),因此無(wú)法通過(guò)服務(wù)端的校驗(yàn)。
假設(shè)Web服務(wù)端網(wǎng)絡(luò)延遲較大。在身份驗(yàn)證階段與會(huì)話階段均保證了兩種函數(shù)運(yùn)算值的統(tǒng)一更新模式,即僅在此次請(qǐng)求正確之后才會(huì)更新函數(shù)運(yùn)算值,請(qǐng)求報(bào)文丟失的情況下,在此次加密校驗(yàn)參數(shù)未重發(fā)并收到回送請(qǐng)求之前,是不會(huì)更新函數(shù)的運(yùn)算值的,由此可保證雙端的函數(shù)運(yùn)算值不會(huì)出現(xiàn)位偏情況。基于以上分析可知,此方案可以抵御較高的網(wǎng)絡(luò)延遲。
上文從8個(gè)方面分析了本文方案的安全防御能力,為了便于說(shuō)明,本節(jié)使用R1~R8分別表示這8種安全情況,并通過(guò)表2給出本文方案與文獻(xiàn)[1-5]方案在Web應(yīng)用的權(quán)限框架中的安全性能比較。可以看出,本文方案在安全性表現(xiàn)上比單純基于時(shí)間戳的方案和單純基于序列號(hào)的方案的安全性更高。由于文獻(xiàn)[5]方案無(wú)法應(yīng)對(duì)網(wǎng)絡(luò)延遲較大的情況,相對(duì)而言,本文方案在沒有接收到請(qǐng)求信息的時(shí)候不會(huì)更新序列函數(shù)值,即使網(wǎng)絡(luò)延遲較大也不會(huì)影響整個(gè)序列函數(shù)的運(yùn)行。

表2 6種方案在Web應(yīng)用中的安全性能Table 2 Security performance of six schemes in Web applications
表3給出了本文方案與文獻(xiàn)[1-5]中方案時(shí)間性能的比較,其中,Tt為時(shí)間戳運(yùn)算時(shí)間,Ts為序列號(hào)運(yùn)算時(shí)間,Ty是加密序列號(hào)運(yùn)算時(shí)間,H為單向哈希運(yùn)算時(shí)間,n為從數(shù)據(jù)庫(kù)取出之前請(qǐng)求的數(shù)據(jù)所需要的時(shí)間。由于不同運(yùn)算之間具有一定的時(shí)間差距,從運(yùn)算角度分析有如下運(yùn)算時(shí)間差距:Tt 表3 8種方案客戶端與服務(wù)端的時(shí)間性能Table 3 Time performance of eight schemes inclient and server 針對(duì)Web應(yīng)用層易受重放攻擊的問(wèn)題,本文提出一種基于雙序列函數(shù)Web權(quán)限框架的重放攻擊防御方案。分析結(jié)果表明,該方案可以有效防御常見的Web應(yīng)用層攻擊,并且適用于多數(shù)Web權(quán)限框架。下一步將從簡(jiǎn)化運(yùn)算和減少服務(wù)端運(yùn)算量等方面改進(jìn)本文方案,并使其能防御更多種類的Web應(yīng)用層攻擊。此外,還將解決第三方授權(quán)機(jī)制中的重放攻擊防御問(wèn)題。
4 結(jié)束語(yǔ)