摘要:認(rèn)證在網(wǎng)絡(luò)應(yīng)用和安全領(lǐng)域中起著非常重要的作用,是保證系統(tǒng)安全的重要措施之一。傳統(tǒng)的單向認(rèn)證機(jī)制能夠確保安全領(lǐng)域中外部系統(tǒng)的合法性,但無(wú)法保證接入系統(tǒng)的合法性。由此提出了雙向認(rèn)證機(jī)制,并介紹了雙向認(rèn)證的基本原理和主要算法,最后對(duì)雙向認(rèn)證機(jī)制的安全性作了分析,并構(gòu)造了雙向認(rèn)證機(jī)制的應(yīng)用模型。
關(guān)鍵詞:雙向認(rèn)證;算法;加密;安全領(lǐng)域;應(yīng)用模型
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)05-1pppp-0c
1 引言
信息安全的重要屬性之一是真實(shí)性,認(rèn)證技術(shù)即是保護(hù)真實(shí)性的有效手段。安全的認(rèn)證機(jī)制是確保信息安全的前提,是一切安全機(jī)制的基礎(chǔ)[1]。隨著網(wǎng)絡(luò)化、信息化的不斷深入和發(fā)展,身份認(rèn)證已成為支撐開(kāi)展應(yīng)用的基本服務(wù),對(duì)身份認(rèn)證提出了新的要求,傳統(tǒng)的單一的認(rèn)證手段己不適應(yīng)應(yīng)用需求,需要構(gòu)建綜合的身份認(rèn)證服務(wù)系統(tǒng),綜合提供多種認(rèn)證機(jī)制。雙向認(rèn)證是一種高安全性的認(rèn)證機(jī)制,本文介紹了雙向認(rèn)證的基本原理和主要的算法設(shè)計(jì)。
2 認(rèn)證的概念和分類(lèi)
認(rèn)證技術(shù)是信息安全理論與技術(shù)的一個(gè)重要內(nèi)容,認(rèn)證主要包括用戶身份認(rèn)證和信息認(rèn)證兩個(gè)方面。身份認(rèn)證用于證明或否認(rèn)通信實(shí)體所宣稱(chēng)的身份,是兩個(gè)或多個(gè)實(shí)體之間建立身份認(rèn)可的過(guò)程,是計(jì)算機(jī)及網(wǎng)絡(luò)系統(tǒng)確認(rèn)用戶或外部系統(tǒng)身份的重要手段[2]。網(wǎng)絡(luò)中的兩個(gè)通信實(shí)體彼此互不信任時(shí),必須進(jìn)行身份認(rèn)證。只有通信雙方互相確認(rèn)對(duì)方的身份以后才能通過(guò)加密等手段建立安全信道,同時(shí)它也是授權(quán)訪問(wèn)和審計(jì)記錄等安全服務(wù)的基礎(chǔ)。身份認(rèn)證是安全通信的第一步,從應(yīng)用系統(tǒng)的安全管理特性上看,身份認(rèn)證是進(jìn)入應(yīng)用系統(tǒng)的鑰匙。
在信息系統(tǒng)中,身份認(rèn)證大致可分為用戶與主機(jī)之間的認(rèn)證和主機(jī)與主機(jī)之間的認(rèn)證。用戶與主機(jī)間的認(rèn)證手段大體分為三種:從需要驗(yàn)證的條件來(lái)看,可以分為單因子認(rèn)證和雙因子認(rèn)證;從是否使用硬件來(lái)看,可以分為軟件認(rèn)證和硬件認(rèn)證;從認(rèn)證信息來(lái)看,可以分為靜態(tài)認(rèn)證和動(dòng)態(tài)認(rèn)證。身份認(rèn)證技術(shù)的發(fā)展,經(jīng)歷了從軟件認(rèn)證到硬件認(rèn)證,從單因子認(rèn)證到雙因子認(rèn)證,從靜態(tài)認(rèn)證到動(dòng)態(tài)認(rèn)證的過(guò)程。主機(jī)與主機(jī)之間的認(rèn)證手段大體分為:IP地址認(rèn)證、密鑰認(rèn)證。IP地址認(rèn)證是只允許合法的IP接入,拒絕非法的IP接入。這種認(rèn)證機(jī)制實(shí)現(xiàn)簡(jiǎn)單,但I(xiàn)P地址容易被冒充,對(duì)安全接入領(lǐng)域的應(yīng)用形成很大的風(fēng)險(xiǎn)。密鑰認(rèn)證是在直接信任的兩個(gè)個(gè)體之間通過(guò)互相交換密鑰信息進(jìn)行認(rèn)證,密鑰交換為確保安全通信提供了一種有力的機(jī)制。
2 雙向認(rèn)證的基本原理
認(rèn)證的前提條件是通信雙方已經(jīng)就加密算法和所用密鑰達(dá)成了一致。從認(rèn)證的方向來(lái)看,身份認(rèn)證可分為單向認(rèn)證和雙向認(rèn)證[3]。單向認(rèn)證是一方向另一方證明自己的身份,雙向認(rèn)證是雙方彼此向?qū)Ψ阶C明自己的身份。在傳統(tǒng)的網(wǎng)絡(luò)應(yīng)用中,身份認(rèn)證較多地采用單向認(rèn)證,但單向認(rèn)證在某些應(yīng)用環(huán)境中被證明是不安全的,例如:高保密度的交易系統(tǒng)以及移動(dòng)通信系統(tǒng)。為了實(shí)現(xiàn)更加安全的交易和通信,需要在系統(tǒng)之間進(jìn)行雙向認(rèn)證,但雙向認(rèn)證并不簡(jiǎn)單等于兩次單向認(rèn)證。雙向認(rèn)證的原理圖如圖1所示:

圖1 雙向認(rèn)證的原理圖
認(rèn)證的雙方在各自的系統(tǒng)中配置用于認(rèn)證的公鑰和私鑰[4],以及SQN(SequenceNumber)組數(shù)。公鑰是雙方共同使用的公共密鑰,雙方配置相同的公鑰;私鑰是各自擁有的私有密鑰,是提供給外部系統(tǒng)訪問(wèn)自己時(shí)使用的接入密碼,雙方分別配置對(duì)方的私鑰。SQN組數(shù)用于隨機(jī)得到SQN組號(hào)并且計(jì)算SQN。
(a)甲方根據(jù)SQN組數(shù)隨機(jī)得到一個(gè)SQN組號(hào),并且利用SQN組號(hào)和SQN組數(shù)計(jì)算出SQN。根據(jù)公鑰、對(duì)方私鑰和SQN,利用MD5算法產(chǎn)生認(rèn)證字段。把SQN組號(hào)、認(rèn)證字段和隨機(jī)產(chǎn)生的隨機(jī)數(shù),合成認(rèn)證請(qǐng)求發(fā)送給乙方。
(b)己方收到甲方的認(rèn)證請(qǐng)求后,使用相同的算法產(chǎn)生認(rèn)證字段,與認(rèn)證請(qǐng)求中的認(rèn)證字段進(jìn)行比較,如果相同,則甲方通過(guò)了乙方的認(rèn)證,如果不相同,則認(rèn)證失敗。
(c)當(dāng)甲方通過(guò)了乙方的認(rèn)證后,乙方根據(jù)公鑰、SQN和隨機(jī)數(shù),利用MD5算法產(chǎn)生加密密鑰,然后再根據(jù)加密密鑰、SQN和隨機(jī)數(shù),利用MD5算法產(chǎn)生應(yīng)答字段,通過(guò)認(rèn)證響應(yīng)返回給甲方。
(d)甲方收到乙方的認(rèn)證響應(yīng)后,使用相同的算法產(chǎn)生應(yīng)答字段,與認(rèn)證響應(yīng)中的應(yīng)答字段進(jìn)行比較,如果相同,則乙方通過(guò)了甲方的認(rèn)證,如果不相同,則認(rèn)證失敗。
上述過(guò)程完成了雙向認(rèn)證,既包括甲方對(duì)乙方的認(rèn)證,也包括乙方對(duì)甲方的認(rèn)證。只有兩次認(rèn)證都成功時(shí),整個(gè)認(rèn)證結(jié)果才是成功的。雙向認(rèn)證成功后,雙方可以進(jìn)行安全的通信。
3 雙向認(rèn)證的算法設(shè)計(jì)
雙向認(rèn)證中使用到的算法主要有:MD5算法、3DES加密算法、認(rèn)證字段和應(yīng)答字段的生成算法,以下分別介紹這幾種算法的設(shè)計(jì)思想以及在系統(tǒng)中的應(yīng)用。
3.1 MD5算法
所謂MD5,即Message-Digest Algorithm 5(信息-摘要算法),它由MD2、MD3、MD4發(fā)展而來(lái)的一種單向函數(shù)算法(也就是HASH算法)。MD5以512位分組來(lái)處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過(guò)了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。
在MD5算法中,首先需要對(duì)信息進(jìn)行填充,使其字節(jié)長(zhǎng)度對(duì)512求余的結(jié)果等于448。因此,信息的字節(jié)長(zhǎng)度(Bits Length)將被擴(kuò)展至N*512+448,即N*64+56個(gè)字節(jié)(Bytes),N為一個(gè)正整數(shù)。填充的方法如下:在信息的后面填充一個(gè)1和無(wú)數(shù)個(gè)0,直到滿足上面的條件時(shí)才停止用0對(duì)信息的填充。然后,在這個(gè)結(jié)果后面附加一個(gè)以64位二進(jìn)制表示的填充前信息長(zhǎng)度。經(jīng)過(guò)這兩步的處理,現(xiàn)在的信息字節(jié)長(zhǎng)度=N*512+448+64=(N+1)*512,即長(zhǎng)度恰好是512的整數(shù)倍。這樣做的原因是為滿足后面處理中對(duì)信息長(zhǎng)度的要求。
MD5的典型應(yīng)用是對(duì)一段信息(Message)產(chǎn)生信息摘要(Message-Digest),以防止被篡改。在本系統(tǒng)的應(yīng)用中,加密密鑰、認(rèn)證字段、應(yīng)答字段等信息都使用MD5算法形成信息摘要,保證了信息的唯一性和安全性。MD5還廣泛用于加密和解密技術(shù)上。
3.2 認(rèn)證字段的生成算法
認(rèn)證字段是由公鑰Ki、私鑰passwd和SQN等認(rèn)證參數(shù)組成的64 Bytes字節(jié)流,經(jīng)過(guò)MD5算法生成的信息摘要,其中公鑰是認(rèn)證雙方共同配置的公共密鑰,其長(zhǎng)度為16 Bytes;私鑰是認(rèn)證請(qǐng)求接收方的接入密碼,其長(zhǎng)度為16 Bytes;SQN是由SQN組數(shù)和SQN組號(hào)根據(jù)指定的公式計(jì)算得到的,其長(zhǎng)度為4 Bytes。SQN的計(jì)算公式如下:
SQN = (SQN組號(hào)-1)×取整[(FFFFFFFF/SQN組數(shù))](取整時(shí)去掉小數(shù)點(diǎn)后的數(shù)值)
其中SQN組數(shù)是認(rèn)證雙方共同配置的,SQN組號(hào)是認(rèn)證請(qǐng)求發(fā)送方隨機(jī)選擇的,取值范圍為2-SQN組數(shù),SQN組號(hào)將隨認(rèn)證字段和隨機(jī)數(shù),合成到認(rèn)證請(qǐng)求中,一同發(fā)送給接收方,以便接收方用于計(jì)算SQN。認(rèn)證字段的生成算法如下:
const unsigned long SQNGrpCount; //SQN組數(shù),認(rèn)證雙方共同配置
const unsigned char Ki[16];//公鑰,認(rèn)證雙方共同配置
const unsigned char passwd[16];//私鑰,認(rèn)證請(qǐng)求接收方的接入密碼
unsigned short SQNGrpNum;//存放SQN組號(hào), 取值范圍:2-SQN組數(shù)
unsigned long SQN; //存放SQN
unsigned char AuthField[16]; //存放認(rèn)證字段
unsigned char tmpbuff[64]; //存放認(rèn)證參數(shù)組合之后的字節(jié)流
SQNGrpNum = rand() % SQNGrpCount;//根據(jù)SQN組數(shù)隨機(jī)生成SQN組號(hào)
SQN = (0xffff/SQNGrpCount)*(SQNGrpNum -1);//根據(jù)SQN組數(shù)和SQN組號(hào)計(jì)算SQN
int sqn2 = htonl(SQN); //把SQN轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序
memset(tmpbuff, 0xff, 64); //初始全部填充1
memcpy(tmpbuff , Ki , 16); //填充公鑰Ki
memcpy(tmpbuff+16 , passwd , 16);//填充私鑰passwd
memcpy(tmpbuff+16+16 , sqn2 , 4); //填充SQN
MD5(tmpbuff, 64, AuthField); //利用MD5算法生成認(rèn)證字段
3.3 應(yīng)答字段的生成算法
應(yīng)答字段是由加密密鑰Kc、隨機(jī)數(shù)Rand和SQN等認(rèn)證參數(shù)組成的64 Bytes字節(jié)流,經(jīng)過(guò)MD5算法生成的信息摘要,其中加密密鑰是由公鑰Ki、隨機(jī)數(shù)Rand和SQN經(jīng)過(guò)MD5算法生成的16 Bytes信息摘要,隨機(jī)數(shù)是由認(rèn)證請(qǐng)求發(fā)送方隨機(jī)產(chǎn)生的7 bytes隨機(jī)數(shù),SQN是由SQN組數(shù)和認(rèn)證請(qǐng)求發(fā)送方隨機(jī)生成的SQN組號(hào),按照指定的公式計(jì)算得到的4 Bytes整數(shù)。應(yīng)答字段的生成算法如下:
const unsigned long SQNGrpCount; //SQN組數(shù),認(rèn)證雙方共同配置
const unsigned char Ki[16];//公鑰,認(rèn)證雙方共同配置
const unsigned char rand_num[7]; //認(rèn)證請(qǐng)求發(fā)送方產(chǎn)生的隨機(jī)數(shù)
const unsigned short SQNGrpNum;//認(rèn)證請(qǐng)求發(fā)送方產(chǎn)生的SQN組號(hào)
unsigned long SQN; //存放SQN
unsigned char Kc[16];//存放加密密鑰
unsigned char RespField[16]; //存放應(yīng)答字段
unsigned char tmpbuff[64]; //存放認(rèn)證參數(shù)組合之后的字節(jié)流
SQN=(0xffff/SQNGrpCount)*(SQNGrpNum -1);//根據(jù)SQN組數(shù)和SQN組號(hào)計(jì)算SQN
int sqn2=htonl(SQN); //把SQN轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序
memset(tmpbuff, 0xff, 64); //初始全部填充1
memcpy(tmpbuff , Ki , 16); //填充公鑰Ki
memcpy(tmpbuff+16 , rand_num, 7);//填充隨機(jī)數(shù)
memcpy(tmpbuff+16+7, sqn2 , 4); //填充SQN
MD5(tmpbuff, 64, Kc);//利用MD5算法生成加密密鑰
memset(tmpbuff, 0xff, 64); //初始全部填充1
memcpy(tmpbuff , Kc , 16); //填充加密密鑰Kc
memcpy(tmpbuff+16 , rand_num, 7);//填充隨機(jī)數(shù)
memcpy(tmpbuff+16+7, sqn2 , 4); //填充SQN
MD5(tmpbuff, 64, RespField); //利用MD5算法生成應(yīng)答字段
3.4 3DES加密算法
3DES(即Triple DES)是DES向AES過(guò)渡的加密算法[5],是DES的一個(gè)更安全的變形。它以DES為基本模塊,通過(guò)組合分組方法設(shè)計(jì)出分組加密算法。3DES算法是使用雙長(zhǎng)度(16字節(jié))密鑰K=(KL||KR)將8字節(jié)明文數(shù)據(jù)塊進(jìn)行3次DES加密/解密,其具體實(shí)現(xiàn)如下:
加密方式為:C=DES(KL)[DES-1(KR)[DES(KL[P])]]
解密方式為:P=DES-1(KL)[DES(KR)[DES-1(KL[C])]]
其中,DES(KL[P])表示用密鑰KL對(duì)明文P進(jìn)行DES加密,DES-1 (KL[C])表示用密鑰KL對(duì)密文C進(jìn)行解密。
在本系統(tǒng)的應(yīng)用中,加密密鑰Kc是由公鑰Ki、隨機(jī)數(shù)rand和SQN經(jīng)過(guò)MD5算法生成的16 Bytes信息摘要,其中KL = Kc[0-63],KR = Kc[64-127]。加密時(shí),明文數(shù)據(jù)按照每8 Bytes一個(gè)數(shù)據(jù)塊分成多個(gè)塊,對(duì)每個(gè)數(shù)據(jù)塊進(jìn)行3次DES加密/解密運(yùn)算,形成密文。解密時(shí),同樣對(duì)密文按照每8 Bytes一個(gè)數(shù)據(jù)塊進(jìn)行3次DES加密/解密運(yùn)算,形成明文。
4 雙向認(rèn)證機(jī)制的安全性分析及其應(yīng)用
雙向認(rèn)證機(jī)制實(shí)現(xiàn)了通信雙方的相互身份認(rèn)證功能,使通信雙方能確認(rèn)對(duì)方的身份,同時(shí)還提供了密鑰協(xié)商的功能,讓通信雙方能公平地協(xié)商會(huì)話密鑰。在認(rèn)證消息傳輸過(guò)程中,始終堅(jiān)持了消息可靠傳輸這一原則,對(duì)認(rèn)證消息采取了保護(hù)措施。一旦認(rèn)證消息在傳輸過(guò)程中被修改,消息到達(dá)對(duì)方時(shí)將被發(fā)現(xiàn)。
經(jīng)過(guò)分析,雙向認(rèn)證機(jī)制能夠抵御假冒攻擊、中間人攻擊和拒絕服務(wù)攻擊,具有較高的安全性。此外,該機(jī)制還具有較高的效率,它的實(shí)現(xiàn)不需要依賴于第三方認(rèn)證中心,認(rèn)證信息保持動(dòng)態(tài)性,能有效防止重放攻擊。
在安全領(lǐng)域,對(duì)請(qǐng)求接入的外部系統(tǒng)進(jìn)行嚴(yán)格的檢查和有效的驗(yàn)證,是保證接入系統(tǒng)安全的重要措施。利用雙向認(rèn)證機(jī)制,一方面能夠防止非法的外部系統(tǒng)接入合法的接入系統(tǒng),另一方面能夠防止合法的外部系統(tǒng)接入非法的接入系統(tǒng)。雙向認(rèn)證機(jī)制的應(yīng)用模型如圖2所示:

圖2 雙向認(rèn)證機(jī)制的應(yīng)用模型
外部系統(tǒng)請(qǐng)求接入時(shí),首先與接入系統(tǒng)建立TCP連接,然后通過(guò)已建立的連接進(jìn)行雙向認(rèn)證,認(rèn)證過(guò)程和認(rèn)證的復(fù)雜度可以根據(jù)特定的應(yīng)用有所區(qū)別,但認(rèn)證的算法思想總體上是一致的。雙向認(rèn)證通過(guò)后,認(rèn)為連接是安全的,此時(shí)可以進(jìn)行高保密的交易和通信。業(yè)務(wù)結(jié)束后,外部系統(tǒng)釋放并關(guān)閉已建立的連接。
5 結(jié)束語(yǔ)
身份認(rèn)證是建立安全通信的第一步,一個(gè)完整的網(wǎng)絡(luò)安全體系,應(yīng)能夠根據(jù)不同網(wǎng)絡(luò)層次的特點(diǎn)進(jìn)行有針對(duì)性的防范,雙向認(rèn)證機(jī)制主要從接入層面上確保了外部系統(tǒng)和接入系統(tǒng)的合法性與安全性。隨著雙向認(rèn)證機(jī)制相關(guān)算法的深入研究和應(yīng)用,必將推動(dòng)雙向認(rèn)證機(jī)制在其他相關(guān)領(lǐng)域的應(yīng)用和發(fā)展。
參考文獻(xiàn):
[1]WilliamStallings.網(wǎng)絡(luò)安全要素-應(yīng)用與標(biāo)準(zhǔn)[M].北京:人民郵電出版社,2000.
[2]王育民,劉建偉.通信網(wǎng)的安全-理論與技術(shù)[M].西安:西安電子科技大學(xué)出版社,1999.
[3]李中獻(xiàn),詹榜華.認(rèn)證理論與技術(shù)的發(fā)展[J].電子學(xué)報(bào),1999,27(1):98-102.
[4]MessaoudB,著.張千里,譯.互聯(lián)網(wǎng)公鑰基礎(chǔ)設(shè)施概論[M].北京:人民郵電出版社,2003.
[5]賴溪松,韓亮,等. 計(jì)算機(jī)密碼學(xué)及其應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2001.
收稿日期:2008-01-08
作者簡(jiǎn)介:龔汝洪(1978-),男,廣東番禺人,軟件工程師,碩士研究生,主要研究方向:計(jì)算機(jī)應(yīng)用與信息處理,數(shù)據(jù)庫(kù)應(yīng)用;周燕(1979-),女,江西撫州人,講師,碩士研究生,主要研究方向:計(jì)算機(jī)應(yīng)用與信息處理,數(shù)據(jù)庫(kù)應(yīng)用。