范 潔 池亞平 李冬冬
北京電子科技學(xué)院,北京市 100070
網(wǎng)絡(luò)安全協(xié)議是基于密碼學(xué)的通信協(xié)議,是將密碼技術(shù)應(yīng)用于網(wǎng)絡(luò)安全的紐帶。 網(wǎng)絡(luò)安全協(xié)議的研究目標(biāo)都與安全性有關(guān),例如,認(rèn)證主體的身份;在主體之間分配會話密鑰;實(shí)現(xiàn)機(jī)密性、完整性、不可否認(rèn)性、公平性等。
《網(wǎng)絡(luò)安全協(xié)議》課程是信息安全專業(yè)的必修課,在授課過程中如何講清楚密碼學(xué)相關(guān)知識在某個具體安全協(xié)議中的應(yīng)用,如通信雙方是否進(jìn)行密鑰協(xié)商,何時進(jìn)行身份認(rèn)證,如何實(shí)現(xiàn)信息傳輸?shù)臋C(jī)密性、完整性、不可否認(rèn)性,一直是課程的授課重點(diǎn)。 結(jié)合《網(wǎng)絡(luò)安全協(xié)議》課程十余年的授課經(jīng)驗(yàn),本文以IPSec、SSL、S/MIME、PGP等安全協(xié)議為例深入剖析密碼學(xué)技術(shù)在是如何在具體的協(xié)議通信過程中保障數(shù)據(jù)的安全傳輸,實(shí)現(xiàn)了信息安全專業(yè)特色課程《密碼學(xué)》與《網(wǎng)絡(luò)安全協(xié)議》課程的有機(jī)結(jié)合。
TCP/IP 協(xié)議族是目前整個互聯(lián)網(wǎng)的基礎(chǔ),但由于TCP/IP 協(xié)議族最初的設(shè)計目標(biāo)是實(shí)現(xiàn)網(wǎng)絡(luò)的互聯(lián)互通,沒有綜合的考慮網(wǎng)絡(luò)互聯(lián)之后的安全通信的需求。 在互聯(lián)網(wǎng)不斷發(fā)展的基礎(chǔ)上,網(wǎng)絡(luò)通信所面臨的安全威脅日益嚴(yán)重。 為了解決TCP/IP 協(xié)議族自身帶來的網(wǎng)絡(luò)通信安全問題,Internet 工程任務(wù)組(IETF)不斷地改進(jìn)現(xiàn)有協(xié)議和設(shè)計新的安全通信協(xié)議。 目前TCP/IP協(xié)議族各層都有相關(guān)的安全協(xié)議標(biāo)準(zhǔn),為各層通信提供安全保障,初步形成了完整的TCP/IP 安全體系結(jié)構(gòu)[1,3],如圖1 所示。
對稱加密體制是指發(fā)送方對明文加密時使用的密鑰和接收方對密文解密時使用的密鑰是同一個密鑰。 非對稱加密體制也稱公開密鑰密碼體制,于1976 年由Diffie 和Hellman 提出,采用一對密鑰即加密密鑰和解密密鑰。 一個是可以公開的,稱為公鑰;另一個為用戶專用,稱為私鑰。
目前,對稱加密技術(shù)和非對稱加密技術(shù)在網(wǎng)絡(luò)安全協(xié)議中的應(yīng)用都很多,其中對稱加密技術(shù)具有加密效率高的優(yōu)點(diǎn),但發(fā)送方和接收方之間需要提前共享密鑰。 非對稱加密技術(shù),加密和解密速度慢,但是發(fā)送方和接收方之間無須共享密鑰,一般只是用在小數(shù)據(jù)加密。
IPSec、SSL 協(xié)議對數(shù)據(jù)實(shí)現(xiàn)機(jī)密性保護(hù)時,采用的都是對稱加密算法。 其中IPSec 協(xié)議中的IKE 協(xié)議和SSL 中的握手協(xié)議具備密鑰協(xié)商的功能。 IKE 協(xié)商出的密鑰可以供IPSec 中的ESP 協(xié)議和AH 協(xié)議使用,IKE 將密鑰協(xié)商結(jié)果存儲在SAD(安全關(guān)聯(lián)數(shù)據(jù)庫)中,ESP 在對數(shù)據(jù)進(jìn)行加密和計算完整性保護(hù)的MAC 值時從SAD 中讀取所需的對稱密鑰即可;SSL 中的握手協(xié)議協(xié)商出的密鑰可以供SSL 中的記錄協(xié)議在對數(shù)據(jù)加密和計算完整性保護(hù)的MAC 值時使用。
ESP 協(xié)議和SSL 協(xié)議對數(shù)據(jù)實(shí)現(xiàn)機(jī)密性保護(hù)時,采用的都是對稱加密技術(shù)。 IPSec ESP 標(biāo)準(zhǔn)要求所有的ESP 實(shí)現(xiàn)要支持密碼分組鏈方式(CBC)的DES 作為缺省的算法。 SSL2.0 協(xié)議和SSL3.0 協(xié)議支持的加密算法包括RC4、RC2、IDEA 和DES 等。
公開密鑰算法的加密和解密的速度較慢,不適用于加密大的文件或數(shù)據(jù),但可以用于加密小數(shù)據(jù)。 對稱加密算法的加密和解密速度都很快,但需要解決發(fā)送方和接收方之間安全的傳遞密鑰的問題。 由于對稱加密算法的密鑰長度都很小(如DES 算法密鑰64bit,AES 算法密鑰長度128bit),可以利用公鑰加密技術(shù)來解決對稱加密算法的密鑰傳遞和共享問題。 發(fā)送方在對數(shù)據(jù)進(jìn)行加密之前,首先隨機(jī)產(chǎn)生一個會話密鑰K,用K 去加密需要傳輸?shù)拿魑臄?shù)據(jù)M,產(chǎn)生密文C。 然后用接收方的公鑰去加密會話密鑰K,被加密的會話密鑰稱為數(shù)字信封。 發(fā)送發(fā)將密文C 和數(shù)字信封一起傳遞給接收方,接收方收到之后先用自己的私鑰解密數(shù)字信封,得到會話密鑰K,再用K 去解密密文C,得到明文M。
對稱和非對稱加密體制的結(jié)合應(yīng)用加密具體過程如圖2 所示,解密具體過程如圖3 所示。
S/MIME(Simple Multipurpose Internet Mail Exchange,安全多用途郵件擴(kuò)展)、PGP(Pretty Good Privacy,完美隱私)是目前應(yīng)用較多的電子郵件安全協(xié)議,這兩個標(biāo)準(zhǔn)都沒有密鑰協(xié)商機(jī)制,因此發(fā)送方和接收方傳輸數(shù)據(jù)之前不能安全協(xié)商出雙方都認(rèn)可的對稱密鑰。 S/MIME、PGP在對數(shù)據(jù)進(jìn)行加密時采用了對稱密鑰和非對稱密鑰體制(公開密鑰體制)相結(jié)合的技術(shù),即發(fā)送方隨機(jī)產(chǎn)生一個對稱密鑰K 用于對需要傳輸?shù)臄?shù)據(jù)進(jìn)行加密,然后用接收方的公鑰對K 進(jìn)行加密形成數(shù)字信封傳遞給接收方。 接收方收到后先用自己的私鑰解密數(shù)字信封獲得對稱密鑰K,然后用K 解密加密后的數(shù)據(jù)恢復(fù)出明文。
S/MIME 標(biāo)準(zhǔn)和PGP 支持安全電子郵件的收發(fā),在對數(shù)據(jù)進(jìn)行加密時都用到了數(shù)字信封技術(shù),通信之前,發(fā)送端需要安全獲得接收方的公鑰。 S/MIME 要求郵件發(fā)送方和接收方都具有X.509 格式的數(shù)字證書,PGP 要求郵件發(fā)送方和接收方都具有公私密鑰對。
哈希函數(shù)是保護(hù)數(shù)據(jù)完整性的基礎(chǔ),哈希函數(shù)和密碼技術(shù)相結(jié)合,可以為數(shù)據(jù)提供傳輸過程中的完整性驗(yàn)證。 消息認(rèn)證碼方法是哈希函數(shù)和對稱密鑰體制相結(jié)合的完整性保護(hù)技術(shù),在IPSec、SSL、SSH、SNMPV3 等安全協(xié)議中廣泛應(yīng)用,要求通信雙方安全共享一個密鑰K。 數(shù)字簽名是哈希函數(shù)和非對稱密鑰體制相結(jié)合的完整性保護(hù)技術(shù),在應(yīng)用層的安全電子交易協(xié)議SET、電子郵件安全協(xié)議S/MIME 及PGP 中廣泛應(yīng)用,接收方為了驗(yàn)證發(fā)送方的簽名,要求安全獲得發(fā)送方的公鑰或數(shù)字證書。 目前消息認(rèn)證碼方法在網(wǎng)絡(luò)安全協(xié)議中的應(yīng)用要多于數(shù)字簽名技術(shù),但數(shù)字簽名技術(shù)在商業(yè)領(lǐng)域的應(yīng)用更廣泛,如數(shù)字簽名在我國各大商業(yè)銀行的網(wǎng)上銀行業(yè)務(wù)中的應(yīng)用。
哈希函數(shù)(Hash Function)也稱單向散列函數(shù)、雜湊函數(shù),是將任意長度的消息M 映射成一個固定長度散列值h 的函數(shù):
從本質(zhì)上說,哈希函數(shù)就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)。哈希函數(shù)具有如下特性:①給定M,很容易計算h。 ②給定h,反推M 很難。 ③給定M,要找到另一消息M′(M 和M′ 不相同) 并滿足H M( ) =H(M′) 很難。
目前常見的哈希算法有MD5 算法和SHA-1 算法。 哈希函數(shù)主要用于數(shù)字簽名和消息認(rèn)證碼,以實(shí)現(xiàn)對數(shù)據(jù)的完整性保護(hù)。
消息認(rèn)證碼(Message Authentication Code,MAC)是密碼學(xué)中用來保證完整性的重要方法。消息驗(yàn)證碼有兩種計算方式,一種是利用已有的加密算法,比如DES 算法等直接對摘要值進(jìn)行加密處理;另一種是使用專用的MAC 算法。 本文重點(diǎn)介紹專用的MAC 算法。
與密鑰相關(guān)的單向散列函數(shù)通常稱為MAC,即消息認(rèn)證碼:
M 為可變長的消息;K 為通信雙方共享的密鑰;C 為哈希函數(shù)。 MAC 可為擁有共享密鑰的雙方在通信中驗(yàn)證消息的完整性;也可被單個用戶用來驗(yàn)證其存儲的文件是否被改動。 使用MAC 方法產(chǎn)生MAC 值和驗(yàn)證MAC 值的過程如圖4 所示。 發(fā)送方和接收方之間需要共享一個密鑰,C 是一個密鑰相關(guān)的哈希函數(shù),M 和K 一起作為C 的輸入,計算得到的哈希值稱為消息驗(yàn)證碼MAC 值。 發(fā)送方將消息驗(yàn)證碼和原文M一起發(fā)送。
接收方收到后,首先將原文M 和MAC 值分離,利用原文M 和共享密鑰K 進(jìn)行和發(fā)送方一樣的操作,利用C 函數(shù)計算消息認(rèn)證碼MAC值,將計算得到MAC 值和收到的MAC 值進(jìn)行比較,二者相同,則說明M 在傳送過程中沒有被篡改;二者不相同,則說明M 在傳送過程中被篡改,完整性遭到了破壞。
HMAC (key-hashed Message Authentication Code)方法是消息認(rèn)證碼方法的一種實(shí)現(xiàn),是目前信息安全領(lǐng)域普遍認(rèn)同的MAC 算法。 在HMAC 中定義了如何用一個秘密密鑰和來產(chǎn)生和驗(yàn)證MAC 值。 設(shè)給定一段需要計算其MAC值的數(shù)據(jù)text 和一個共享密鑰K,要求得到的MAC 值的長度為t 字節(jié),具體的計算過程為:
其中:H 為散列函數(shù),如SHA-1,MD5;B 為計算消息摘要時輸入塊的字節(jié)長度(如對于SHA-1, B=64)。 ipad 為將數(shù)值0x36 重復(fù)B 次后得到的一個長度為B 字節(jié)的數(shù)據(jù),opad 為將數(shù)值0x5c 重復(fù)B 次后得到的長度為B 字節(jié)的數(shù)據(jù)。 K 為發(fā)送方和接收方之間的共享密鑰。 K0為在密鑰K 的左邊附加若干個后得到的長度為B 字節(jié)的密鑰。 t 為MAC 值的字節(jié)數(shù),設(shè)散列函數(shù)H 的散列值的長度為L 字節(jié),當(dāng)t 的長度小于L 時,取哈希函數(shù)散列值左邊的t 個字節(jié)作為MAC 值[1,7]。
IPSec 協(xié)議、SSL 協(xié)議、SSH 協(xié)議在對數(shù)據(jù)進(jìn)行完整性保護(hù)時采用的都是消息認(rèn)證碼方法或者類HMAC 方法。 HAMC 方法要求發(fā)送方和接收方之間共享一個對稱密鑰,在IPSec 中IKE 協(xié)議協(xié)商獲得的用于完整性保護(hù)的密鑰供HMAC 使用,IPSec規(guī)定了兩個完整性驗(yàn)證方法HMAC-MD5-96,HMAC-SHA1-96,即取哈希值的前96 個bit 作為MAC 值。 《網(wǎng)絡(luò)安全協(xié)議》課程實(shí)踐環(huán)節(jié),要求學(xué)生在Windows 環(huán)境下配置兩臺計算機(jī)的IPSec 安全策略并啟用安全策略進(jìn)行通信,可捕獲明文的AH 協(xié)議的數(shù)據(jù)包,分析出AH 包中含有96bit 的MAC 值,如圖5 中橫線所示處為MAC 值。
在SSL/TLS 協(xié)議中握手協(xié)議協(xié)商得到的用于完整性保護(hù)的密鑰供HMAC 方法使用,SSL/TLS 協(xié)議在實(shí)現(xiàn)完整性保護(hù)時采用的是類HMAC 方法,將HMAC 計算過程中的異或運(yùn)算改為連接。 SSL 協(xié)議中的記錄協(xié)議(RecordLayer)負(fù)責(zé)對應(yīng)用層的數(shù)據(jù)進(jìn)行完整性保護(hù)和機(jī)密性保護(hù),發(fā)送方先計算MAC 值附加在原文的后面,再對原文和MAC 值進(jìn)行加密保護(hù)。 因此在SSL 協(xié)議通信過程中通過Wireshark捕獲到的數(shù)據(jù)包無法分析出其中的MAC 值,只能看到被加密后的數(shù)據(jù)。
數(shù)字簽名技術(shù)是公鑰密碼體制的一項(xiàng)重要應(yīng)用,可用于認(rèn)證數(shù)據(jù)的發(fā)送源,也可用于數(shù)據(jù)的完整性校驗(yàn),要求發(fā)送端有一對密鑰對,自己持有的私鑰和可對外公開的公鑰。 設(shè)發(fā)送方A有一個文件M 需要發(fā)送給接收方B,A 產(chǎn)生數(shù)字簽名的過程和B 驗(yàn)證數(shù)字簽名的過程如圖6所示。
應(yīng)用層協(xié)議中的電子郵件安全相關(guān)協(xié)議S/MIME、PGP 及安全電子交易協(xié)議SET 協(xié)議,在保證數(shù)據(jù)傳輸過程中的完整性時,使用的都是數(shù)字簽名方法。 下圖是《網(wǎng)絡(luò)安全協(xié)議》課程實(shí)驗(yàn)過程中,使用基于S/MIME 標(biāo)準(zhǔn)的Microsoft outlook 軟件發(fā)送簽名郵件產(chǎn)生的簽名郵件信息。
密鑰協(xié)商機(jī)制的思想是通信雙方交換生成密鑰的素材,并各自利用這些素材在本地生成共享密鑰。 密鑰協(xié)商算法被設(shè)計為即便攻擊者獲得了這些素材,也無法生成密鑰。 最為著名的密鑰協(xié)商算法就是Diffie-Hellman 交換。
Diffie-Hellman 使用模冪運(yùn)算,算法的安全性在于在有限域上計算離散對數(shù)非常困難。 通信雙方共享模數(shù)p 和p 的本原根g,其中p 是一個大素數(shù),g 滿足以下條件,對于任意Z <p,存在W,使得gwmodp = Z。 所以,能夠產(chǎn)生1 到p- 1 的所有數(shù)字。 設(shè)x <p,計算X=gxmodp,將x 作為私鑰,X 作為公鑰。
設(shè)A 和B 為通信雙方,想在不安全的信道上交換密鑰,密鑰協(xié)商步驟如下:
(1) Alice 和Bob 協(xié)商一個大素數(shù)p 及p 的本原根g,g 和p 可以公開;
(2) Alice 秘密產(chǎn)生一個隨機(jī)數(shù)x,計算X =gxmodp,然后把X 發(fā)送給Bob;
(3) Bob 秘密產(chǎn)生一個隨機(jī)數(shù)y,計算Y =gymodp,然后把Y 發(fā)送給Alice;
(4) Alice 計算K = Yxmodp;
(5) Bob 計算K′= Xymodp。
K 和K′是恒等的,因?yàn)镵 = Yxmodp =( gy)xmodp = ( gx)ymodp=Xymodp=K′,K 和K’即為A 和B 共同協(xié)商出的密鑰
Diffie-Hellman 密鑰交換容易遭受中間人攻擊,在A 和B 的密鑰協(xié)商過程中。 A 發(fā)送公開值X 給B,攻擊者C 截獲X 并把自己產(chǎn)生的公開值X’發(fā)送給B。 B 發(fā)送公開值Y 給A,C 截獲它然后把自己的公開值Y’發(fā)送給A。 A 和C 計算出二人之間的共享密鑰k1。 B 和C 計算出另外一對共享密鑰k2。 Diffie-Hellman 密鑰交換遭受中間人攻擊原理如圖8 所示,圖中實(shí)線代表在攻擊者C 存在下實(shí)際的密鑰協(xié)商消息傳遞過程,虛線代表A 和B 自認(rèn)為的密鑰協(xié)商消息傳遞過程。 造成中間人攻擊的原因是Diffie-Hellman 密鑰交換過程中不認(rèn)證對方的身份。
IKE(Internet Key Exchange)協(xié)議是IPSec 中密鑰管理協(xié)議,主要用途是協(xié)商通信雙方的加密及鑒別算法、加密及鑒別密鑰、通信的保護(hù)模式(傳輸模式或隧道模式)等;SSL 協(xié)議中的握手協(xié)議的主要用途是對客戶機(jī)和服務(wù)器之間進(jìn)行身份驗(yàn)證,協(xié)商加密算法、MAC 算法和密鑰。 IKE和SSL 中的握手協(xié)議在進(jìn)行密鑰協(xié)商時,都采用了基于Diffie-Hellman 的密鑰協(xié)商算法,但為了避免Diffie-Hellman 密鑰協(xié)商過程中易遭受中間人攻擊的缺陷,都對Diffie-Hellman 的密鑰協(xié)商過程作了改進(jìn)。 下面以IKE 為例,說明其密鑰協(xié)商過程。
IKE 的功能包括SA 協(xié)商、密鑰生成和身份認(rèn)證,從協(xié)議分層上講屬于應(yīng)用層協(xié)議,基于UDP,使用端口號500。 IKE 的密鑰協(xié)商分兩個階段實(shí)現(xiàn)。 第一階段建立IKE 本身使用的安全信道SA(采用ISAKMP),此階段的工作模式有兩種,即主模式和積極(野蠻)模式,較為安全的模式是主模式,在主模式下,通信雙方的身份認(rèn)證過程是在受保護(hù)下進(jìn)行的。 第二階段的密鑰協(xié)商利用第一階段已建立的安全信道SA 建立IPSec 通信中供AH 或ESP 使用的SA。 IKE 定義了四種認(rèn)證方法(1)基于數(shù)字簽名的方法(2)基于公鑰加密的方法(3)改進(jìn)的基于公鑰加密的方法(4)基于預(yù)共享密鑰的方法。 基于預(yù)共享密鑰驗(yàn)證方法的主模式下,IKE 密鑰協(xié)商第一階段的消息序列如圖9 所示。
圖9 中第一第二條消息用于協(xié)商IKE SA 需要的各項(xiàng)參數(shù),包括加密算法、Hash 算法、認(rèn)證方法、Diffie-Hellman 組的選擇等;第三第四條消息中的KE 載荷,用于Diffie-Hellman 的公鑰參數(shù)和隨機(jī)數(shù)的傳遞。 最后兩條消息用于身份認(rèn)證,認(rèn)證方式不同,數(shù)據(jù)包格式也不同。 前四條消息都是明文傳遞,最后兩條消息中的HDR*表明消息是加密傳輸?shù)?,即IKE 密鑰協(xié)商過程中的身份認(rèn)證是加密進(jìn)行的。
其中第三第四個消息的具體格式如圖10 所示,交換Diffie-Hellman 算法生成共享密鑰所需要的基本信息,之后進(jìn)行復(fù)雜的密碼計算,使得通信兩端的主機(jī)各自生成完全一樣的共享“主密鑰”,用于保護(hù)其后的通信過程。
IKE 第一階段產(chǎn)生的主密鑰也會用于對第二階段密鑰交換消息進(jìn)行加密保護(hù)和完整性保護(hù),所以IKE 第二階段密鑰協(xié)商的過程是安全的,第二階段協(xié)商出的密鑰結(jié)果供AH 協(xié)議或ESP 協(xié)議使用。 限于篇幅,本文不再贅述IKE第二階段的密鑰協(xié)商過程。 IKE 的密鑰交換過程,若只是依靠理論講解,學(xué)生理解起來比較抽象。 在《網(wǎng)絡(luò)安全協(xié)議》課程的實(shí)踐環(huán)節(jié),通過讓學(xué)生配置兩臺主機(jī)的IPSec 安全策略,利用Wireshark 工具抓取并分析IKE 的密鑰協(xié)商過程數(shù)據(jù)包,更有助于學(xué)生理解抽象的密鑰協(xié)商原理及數(shù)據(jù),具體結(jié)果如圖11 所示。 序號98 至103的數(shù)據(jù)包為IKE 密鑰協(xié)商第一階段的6 條消息,序號104 至107 的數(shù)據(jù)包為IKE 第二階段的數(shù)據(jù)包,圖中橫線處代表的是IKE 第一階段的第4條消息數(shù)據(jù)的解析。
設(shè)計網(wǎng)絡(luò)安全協(xié)議的最終目的是滿足互聯(lián)網(wǎng)通信過程中的機(jī)密性、完整性、可用性、不可否認(rèn)性、真實(shí)性等安全目標(biāo),網(wǎng)絡(luò)安全協(xié)議除具備一般通信協(xié)議的特點(diǎn)外,以密碼學(xué)為基礎(chǔ)是其最重要的特征。 通過運(yùn)用加密技術(shù)、消息驗(yàn)證碼技術(shù)、數(shù)字簽名技術(shù),網(wǎng)絡(luò)安全協(xié)議可將用戶產(chǎn)生的明文數(shù)據(jù)轉(zhuǎn)變?yōu)槊芪牡母郊雍灻祷騇AC 值的數(shù)據(jù),可以抵抗數(shù)據(jù)傳輸過程中的嗅探攻擊、篡改攻擊等。 《網(wǎng)絡(luò)安全協(xié)議》課程授課,在講授各層安全協(xié)議基本通信序列、數(shù)據(jù)包格式的基礎(chǔ)上,更應(yīng)該分析密碼學(xué)相關(guān)技術(shù)在具體的安全協(xié)議中的應(yīng)用,并通過實(shí)踐環(huán)節(jié)加深學(xué)生對理論知識的理解。 本文在深入研究各層網(wǎng)絡(luò)安全協(xié)議原理的基礎(chǔ)上,總結(jié)了加密技術(shù)在相關(guān)網(wǎng)絡(luò)安全協(xié)議中的具體應(yīng)用,展現(xiàn)了消息驗(yàn)證碼和數(shù)字簽名兩種完整性保護(hù)技術(shù)在相關(guān)網(wǎng)絡(luò)安全協(xié)議中的應(yīng)用情形,并以IKE 為例分析了網(wǎng)絡(luò)安全協(xié)議中的密鑰協(xié)商機(jī)制。 這對于信息安全從業(yè)人員深入理解密碼學(xué)技術(shù)在各層網(wǎng)絡(luò)安全協(xié)議中的具體應(yīng)用具有一定的參考價值。