吳龍騰,王勇超,曾愷,黃偉杰,郭文鑫
(1.廣東電網(wǎng)調度控制中心,廣東廣州 510600;2.廣東電網(wǎng)河源供電局,廣東 河源 517000;3.廣東電網(wǎng)江門供電局,廣東 江門 529000)
配電網(wǎng)調度的主要任務是組織和協(xié)調配電網(wǎng)的運行,通常系統(tǒng)受到攻擊的前提是攻擊者偽造身份或獲得現(xiàn)有的通信通道與系統(tǒng)建立通信,而身份認證恰恰是阻擋攻擊的第一關。用戶在登錄系統(tǒng)之前必須證明自己的身份,驗證用戶身份的真實性,隨后系統(tǒng)會根據(jù)授權設定來判斷登錄和其他相關權限。身份認證在保護系統(tǒng)安全中占有極為重要的地位,一旦身份認證被破壞,系統(tǒng)的其他安全措施將不起作用。
文獻[1]提出了一種動態(tài)ID 多因素遠程用戶身份認證方案的改進。該方法對傳統(tǒng)的動態(tài)ID 身份認證方法進行改進,能夠在確保用戶身份匿名的情況下,完成服務器和用戶身份之間的雙向認證,但是在抵御重放攻擊方面還存在一定缺陷。文獻[2]提出了一種適用于無線體域網(wǎng)的動態(tài)口令認證協(xié)議。該方法以非對稱加密機制和動態(tài)口令為依據(jù),改進了傳統(tǒng)認證方案需要大量計算資源的問題,但是其安全性能仍然較低。
基于此,提出了一種基于動態(tài)口令的配電網(wǎng)調度系統(tǒng)中身份認證方案。
采用挑戰(zhàn)-應答協(xié)議完成口令的生成,對其進行簡單描述如下:
1)A→B:C1
2)B→A:R1,C2
3)A→B:R1
其中,C1為A傳送給B的挑戰(zhàn)數(shù)[3],多數(shù)情況下該值為一個不可預計的隨機數(shù),B接收到A的數(shù)據(jù)后將給A回復一個應答數(shù)R1以及一個其自身生成的挑戰(zhàn)數(shù)C2,隨后A則會給B回復一個應答數(shù)R2。協(xié)議的主要目標為:若R1、R2均與發(fā)出挑戰(zhàn)方的預期值相同,即可完成一個認證過程。為了確保協(xié)議的安全性,應滿足以下幾個充分條件:
1)A1、R1為(B→A)口令的認證;
2)A2、R1為回復C1的應答;
3)A3、R1依賴協(xié)議的發(fā)起方;
4)B1、R2為(B→A)口令的認證;
5)B2、R2為回復C2的應答;
6)B3、R2依賴協(xié)議的發(fā)起方;
7)B4、R2與C1同一輪執(zhí)行。
從以上七個條件來看,該協(xié)議的主要功能為:通過R1、R2響應協(xié)議發(fā)起方以及對發(fā)起方的認證;通過A3防止字典攻擊[4],B3則為了防止重定向攻擊[5],B4能夠防止重放攻擊[6]。此外,保證R1、R2形式上的區(qū)別即可防止重放攻擊。能夠滿足以上條件的協(xié)議即可成為自然形式,采用串空間模型[7]對其進行建模,過程如圖1 所示。
圖1 自然形式的串空間模型
圖中,K表示A與B的共享密鑰,f、g表示安全Hash 函數(shù)[8],并定義二者具有不同的消息形式,防止惡意的反射攻擊。NA、NB則表示通過A、B生成的挑戰(zhàn)數(shù)。
動態(tài)口令生成協(xié)議包含兩個階段,分別為注冊階段和登錄階段。
1)注冊階段
該階段主要建立客戶端和調度系統(tǒng)服務器之間的初始信任關系,該過程在安全通道中執(zhí)行。注冊過程中,客戶端與服務器分別完成一次公鑰和ID 的交換,并將另一方所生成的公鑰加密儲存。
2)登錄階段
解釋說明該階段所用符號:EK()表示對括號中數(shù)據(jù)加密過程;DK()表示對括號中信息解密過程;Kpubc、Kpric分別為客戶端公鑰、私鑰;Kpubs、Kpris分別為服務器公鑰、私鑰;Cid、Sid分別為客戶端及服務器ID;Pj為客戶端收到的動態(tài)密碼;R為客戶端發(fā)出的隨機數(shù)。圖2 為該階段的通信流程。
圖2 登錄階段的通信流程
登錄階段主要步驟如下。
步驟1:
客戶端通過私鑰對Cid與Pj進行加密,再通過服務器對Cid和R進行加密,兩次加密后客戶端將所得結果直接發(fā)送至服務器。備份R以后,客戶端啟動計時器,若在規(guī)定時間T內(nèi),服務器沒有給客戶端傳送應答數(shù)據(jù)包,則客戶端丟棄R;若在T時間內(nèi),收到服務器傳送而來的應答數(shù)據(jù),則進行驗證,并在驗證結束后丟棄R。
步驟2:
首先服務器使用自身私鑰解密C1,獲得數(shù)據(jù)包M1以及Cid和R。以所得的Cid為依據(jù),在數(shù)據(jù)庫內(nèi)尋找與之相匹配的公鑰Kpubc。
步驟3:
使用Kpubc對(M2)進行解密獲得Cid和當前動態(tài)密碼Pj。
步驟4:
服務器向客戶端發(fā)送數(shù)據(jù)包C2,即通過服務器私鑰對客戶端傳輸來的R和Sid加密,再將加密結果和Sid打包,并使用客戶端公鑰對其再次加密。
步驟5:
客戶端接收到服務器的反饋信息后,使用Kpric解密加密后的數(shù)據(jù)包,將其記為M4。
步驟6:
通過步驟5 中所得的Sid獲得相對應的公鑰Kpubs,并通過Kpubs解密M3,獲得新的Sid和R。
在身份認證的過程中,為了使認證方案具有有效性就必須保證服務器和客戶端雙方的高度同步。假設動態(tài)密碼c與時間t之間的關系可以表示為c=rand(tx),其中x表示密鑰,rand()表示單向散列函數(shù)[9]。令服務器向客戶端發(fā)出數(shù)據(jù)包的時間為t1,c1=rand(t1x);客戶端發(fā)出數(shù)據(jù)包的時間為t2,c2=rand(t2x)。若t1≠t2,則說明認證出現(xiàn)了失步情況,則導致動態(tài)密碼c1≠c2。將服務器時間固定為t0,在服務器端植入Δt,Δt為客戶端與服務器間的時鐘差,即Δt=t2-t1。此時若客戶端收到的動態(tài)密碼c=rand(t2x),則服務器端發(fā)出的動態(tài)密碼可以表示為c=rand[(t1+Δt)x]。因此,可以在客戶端產(chǎn)生Δt指令信息時,將Δt植入服務器端并對其進行記錄即可判斷認證是否同步,也就是說通過在服務器端調整即可解決認證失步[10]的問題。
在客戶端發(fā)出序列號和動態(tài)密碼申請時,系統(tǒng)的服務器計算c=rand[(t1+Δt)x]以及Δ(t+5)×60 等數(shù)列,數(shù)列的具體長度根據(jù)系統(tǒng)的實際情況確定。若動態(tài)密碼和Δ(t-2)×60 數(shù)列所對應的密碼相同,則調整Δt=Δ(t-2)×60 即可實現(xiàn)密碼生成器和服務器時間上的同步。
在配電網(wǎng)調度系統(tǒng)中內(nèi)嵌加密算法完成口令驗證、口令錯位控制等功能。當系統(tǒng)連接服務器時,服務器會在程序啟動前強制運行認證功能,防止?jié)撛诓话踩僮魍{系統(tǒng)安全。上文挑戰(zhàn)-應答協(xié)議以錄入的用戶姓名為依據(jù)判斷該用戶類型,若為普通用戶,系統(tǒng)則給出一個挑戰(zhàn)數(shù),啟動挑戰(zhàn)-應答操作,模塊內(nèi)的挑戰(zhàn)功能完成用戶發(fā)出應答數(shù)的驗證,評估用戶合法性。認證過程主要分為四個階段,分別為用戶ID 驗證階段、用戶口令驗證階段、應答數(shù)驗證階段和子口令修改階段[11]。
1)用戶ID 驗證
該文采用Keyed MD5完成用戶ID的驗證,當用戶輸入ID 地址后,服務器會將ID 和24 字節(jié)的Salt 因子作異或運算,重新構成一個數(shù)據(jù)串M,隨后將預存的16 位隨機數(shù)組記為HK,通過Keyed MD5 算法完成M的Hash 計算,獲得客戶端輸入的ID 散列值。最后將計算所得散列值和程序中預存的散列值進行對比分析,完成用戶ID合法性的驗證。其計算表達式如下:
式(7)中,Salt為輸入因子。
2)用戶口令驗證
輸入口令后,從數(shù)據(jù)串M中截取128 組數(shù)字組成密鑰,并通過3DES 算法對預存的HK密文CHK進行解密。獲得HK明文PHK。隨后利用MD5 函數(shù)與HK進行Keyed Hash 運算,得到一個散列值,將該值與系統(tǒng)內(nèi)預存值進行對比,若二者一致,那么直接判定該用戶為合法用戶,反之則為非法用戶[12]。其過程描述可以表示為:
式(8)中,PWD 表示用戶口令。通過計算可以判定h為運算所得的口令散列值,用戶登錄后也會被解密以用于用戶計算應答數(shù)時使用。
3)應答數(shù)驗證
服務器接收到應答數(shù)后,通過應答模塊完成驗證。在驗證的過程中,使用RC5 算法確保了在不同挑戰(zhàn)數(shù)的情況下,所得密鑰也不盡相同,提高密鑰安全性。
RC5 算法在挑戰(zhàn)-應答階段使用,其計算效率直接影響著系統(tǒng)的響應時間[13]。該文選用計算效率相對較高的對稱密鑰加密,該算法將R和SK作部分異或運算處理得到加密所需的實際密鑰,并且R經(jīng)過RC5 算法加密后獲得密文C,將其與系統(tǒng)中預存的應答數(shù)進行對比,確定用戶是否合法。
4)子口令修改
該部分適用于普通用戶,當認證模塊安裝至系統(tǒng)后,服務器內(nèi)置用戶名及口令,為確保口令的安全性,當普通用戶通過挑戰(zhàn)-應答認證后,即可對口令進行修改[14]。在該部分內(nèi)通過普通用戶ID 完成用戶登錄ID 和口令的修改功能,該部分的輸入加工輸出(Input Processing Output,IPO)圖如圖3 所示。
圖3 普通用戶ID和口令管理子模塊IPO圖
普通用戶以動態(tài)方式完成系統(tǒng)登錄后,可擁有修改口令和用戶名的權限。用戶名更改功能采用了將系統(tǒng)中預存的靜態(tài)變量和新ID 進行密碼學運算的方法,對相關用戶ID 參數(shù)進行修改,同時ID 的更新也能一定程度上提高系統(tǒng)的安全性[15-16]。在更改口令的過程中,該部分能夠通過新的口令獲得新的散列值,同時完成stdfilc 文件的更新[17]。
為了驗證所提方法的有效性,從配電網(wǎng)調度系統(tǒng)的服務器端、客戶端、信息傳送次數(shù)三個方面驗證身份認證方案的執(zhí)行性能。表1 中給出了文獻[1]、文獻[2]與該文方法各方面性能的情況。
表1 不同方法執(zhí)行能力對比
從表1 中即可得出如下結論:文獻[1]方法的執(zhí)行效率較好,文獻[2]方法最差,該文方法的整體效果最優(yōu)。這是由于該文方法使用挑戰(zhàn)-應答協(xié)議完成動態(tài)口令的生成并對其進行了失步調整,使其的同步性更高。
驗證該文身份認證方法的安全性,采用不同的方法對系統(tǒng)進行惡意攻擊,對比結果如表2 所示。
表2 不同認證方法的防御性能對比
從表2 中能夠看出,該文方法能夠有效地阻止四種常見網(wǎng)絡攻擊,這是由于客戶端和服務器之間的傳輸數(shù)據(jù)是采用單向散列函數(shù)計算所得,而不是真正的口令,使得非法人員截取了該數(shù)據(jù)后仍舊不可以從中獲得用戶口令。
為提升配電網(wǎng)調度系統(tǒng)的安全性,結合配電網(wǎng)調度系統(tǒng)的服務器和客戶端特點,提出基于動態(tài)口令的配電網(wǎng)調度系統(tǒng)身份認證方案,通過實驗驗證得出,該認證方案具有高度同步性,可以有效防止惡意攻擊者偽造或篡改信息,防止網(wǎng)絡監(jiān)聽,使得配電網(wǎng)調度系統(tǒng)的安全性得到了提升。