本期主講人
楊元原 博士 國(guó)家網絡與信息系統安(ān)全産(chǎn)品質(zhì)量監督檢驗中(zhōng)心(公(gōng)安(ān)部第三研究所)商(shāng)用(yòng)密碼應用(yòng)安(ān)全性評估負責人。
IP數據包本身并不提供任何安(ān)全特性。很(hěn)容易僞造出IP包的地址、修改其内容、重播以前的包以及在傳輸途中(zhōng)攔截并查看包的内容。IPSec提供了一種标準的、健壯的機制,可(kě)為(wèi)IP及上層協議(如UDP和TCP)提供數據機密性、完整性、真實性等安(ān)全保證。
本文(wén)首先介紹了協議、密碼協議等概念,之後基于密碼國(guó)家标準和行業标準對IPSec VPN協議的技(jì )術規範進行了說明,并通過實際案例,說明了IPSec VPN協議測評驗證方法。
密碼協議的基本概念
所謂協議,就是兩個或兩個以上的參與者為(wèi)完成某項特定的任務(wù)而采取的一系列步驟。包含以下三層含義:
1)協議自始至終是有(yǒu)序的過程,每一個步驟 必須依次執行,在前一步沒有(yǒu)執行完之前,後面的步驟不能(néng)執行;
2)協議至少需要兩個參與者;
3)通過執行協議必須能(néng)夠完成某項任務(wù)。
協議運行前,協議中(zhōng)的每個參與者都必須預先擁有(yǒu)或知道運行協議所需的資源,都必須預先知道所要完成的協議步驟,并同意遵守它。協議本身必須被明确定義,不能(néng)産(chǎn)生歧義,并且必須是完整的,對每種可(kě)能(néng)的情況都必須規定具(jù)體(tǐ)的動作(zuò)。
密碼協議又(yòu)叫做安(ān)全協議,它以密碼算法為(wèi)基礎,運行在網絡或分(fēn)布式系統中(zhōng)、借助于密碼算法為(wèi)有(yǒu)安(ān)全需求的各方提供一系列步驟,以達到身份鑒别、密鑰分(fēn)配、信息傳輸保護等目的。
密碼協議按照其完成的功能(néng)可(kě)以分(fēn)成以下三類:
1)身份認證協議:在密碼協議中(zhōng),認證是最基本的安(ān)全服務(wù),是信息安(ān)全的基礎。密碼協議的認證過程包括标識和驗證兩個步驟,标識是指主體(tǐ)對自己的身份進行聲明的過程,而驗證是指通信的另一方對主體(tǐ)聲明的身份進行驗證的過程。當某個主體(tǐ)聲稱自己的身份時,認證服務(wù)應保證通信的另一方聲稱身份的真實性。
2)密鑰交換協議:密鑰交換協議是指在參與協議的兩個或者多(duō)個主體(tǐ)之間建立一個共享的密鑰的協議,這種密鑰通常都是臨時性的,隻用(yòng)于一次會話,在新(xīn)的會話中(zhōng)共享的密鑰都會被更新(xīn)。通常使用(yòng)基于公(gōng)鑰的算法來實現密鑰交換協議。
3)認證和密鑰交換協議:認證和密鑰交換協議是指将認證和密鑰交換結合在一起,能(néng)夠同時實現身份認證和密鑰交換兩種功能(néng)的協議。它是網絡通信中(zhōng)應用(yòng)範圍最廣,也最普遍的密碼協議。在認證和密鑰交換協議中(zhōng),通信主體(tǐ)首先運用(yòng)協議的認證功能(néng)對另一端主體(tǐ)的身份進行認證,如果認證成功,再通過密鑰交換功能(néng)協商(shāng)出通信使用(yòng)的會話密鑰。
密碼協議的主要目的在于通過消息的傳遞來實現某種安(ān)全需求,這些安(ān)全需求也被稱為(wèi)安(ān)全特性,包括機密性、認證性、完整性、不可(kě)否認性、新(xīn)鮮性等等。簡單地說,密碼協議的目的就是确保這些安(ān)全特性在協議執行完畢時能(néng)夠得以實現。下面列出了密碼協議的幾種安(ān)全特性:
1)機密性:機密性的目的是保護敏感信息不洩露給非授權用(yòng)戶。即使攻擊者能(néng)夠截獲含有(yǒu)敏感信息的消息,他(tā)也無法得到其中(zhōng)的敏感信息。保證協議機密性最直接的辦(bàn)法就是對消息進行加密。
2)認證性:認證性用(yòng)來抵抗身份假冒攻擊,确保通信另一方主體(tǐ)身份的真實性。在認證協議中(zhōng),當某一成員(聲稱者)提交一個主體(tǐ)身份并聲稱他(tā)是那個主體(tǐ)時,另一方需要運用(yòng)協議的認證功能(néng)證明該身份就是其聲稱的身份。
3)完整性:完整性的目的是保護協議消息不被非法篡改、删除和替代。最常用(yòng)的辦(bàn)法是電(diàn)子信封、數字簽名(míng)、消息認證碼等;
4)不可(kě)否認性:不可(kě)否認性指通信主體(tǐ)能(néng)夠提供另外某個主體(tǐ)與其進行協議通信的證明,以保證自身合法利益不受侵害。不可(kě)否認性要求協議的主體(tǐ)必須對自己的行為(wèi)負責,不能(néng)進行事後否認;
5)新(xīn)鮮性:新(xīn)鮮性用(yòng)來保證消息的實時性,即保證該消息不是上次或者之前用(yòng)過的消息,新(xīn)鮮性通常用(yòng)随機數或時間戳來實現。
IPSec VPN協議
VPN(Virtual Private Network)即虛拟專用(yòng)網,用(yòng)于在公(gōng)用(yòng)網絡上構建私人專用(yòng)虛拟網絡,并在此虛拟網絡中(zhōng)傳輸重要數據。
VPN具(jù)有(yǒu)以下兩個基本特征:
1)專用(yòng)(Private):VPN網絡是專供VPN用(yòng)戶使用(yòng)的網絡,對于VPN用(yòng)戶,使用(yòng)VPN與使用(yòng)傳統專網沒有(yǒu)區(qū)别。VPN能(néng)夠提供足夠的安(ān)全保證,确保VPN内部信息不受外部侵擾。VPN與底層承載網絡(一般為(wèi)IP網絡)之間保持資源獨立,即VPN資源不被網絡中(zhōng)非該VPN的用(yòng)戶所使用(yòng)。
2)虛拟(Virtual):VPN用(yòng)戶内部的通信是通過公(gōng)共網絡進行的,而這個公(gōng)共網絡同時也可(kě)以被其他(tā)非VPN用(yòng)戶使用(yòng),VPN用(yòng)戶獲得的隻是一個邏輯意義上的專網。
VPN的基本原理(lǐ)是利用(yòng)隧道(Tunnel)技(jì )術,對傳輸報文(wén)進行封裝(zhuāng),利用(yòng)VPN技(jì )術建立專用(yòng)數據傳輸通道,實現報文(wén)的安(ān)全傳輸。
隧道技(jì )術使用(yòng)一種協議封裝(zhuāng)另外一種協議報文(wén)(通常是IP報文(wén)),而封裝(zhuāng)後的報文(wén)也可(kě)以再次被其他(tā)封裝(zhuāng)協議所封裝(zhuāng)。對用(yòng)戶來說,隧道是其所在網絡的邏輯延伸,在使用(yòng)效果上與實際物(wù)理(lǐ)鏈路相同。
圖1
在圖1所展示的網絡中(zhōng),當分(fēn)支機構員工(gōng)訪問總部服務(wù)器時,報文(wén)封裝(zhuāng)過程如下:
1) 報文(wén)發送到網關時,網關1識别出該用(yòng)戶為(wèi)VPN用(yòng)戶後,發起與總部網關即網關2的隧道連接,從而網關1和網關2之間建立VPN隧道。
2) 網關1将數據封裝(zhuāng)在VPN隧道中(zhōng),發送給網關2。
3)網關2收到報文(wén)後進行解封裝(zhuāng),并将原始數據發送給最終接收者,即服務(wù)器。
反向的處理(lǐ)也一樣。VPN網關在封裝(zhuāng)時可(kě)以對報文(wén)進行加密處理(lǐ),使Internet上的非法用(yòng)戶無法讀取報文(wén)内容,因而通信是安(ān)全可(kě)靠的。
圖2
IPSec協議如圖2所示,它為(wèi)網絡層上的通信數據提供一整套的安(ān)全體(tǐ)系結構,包括IKE(Internet Key Exchange)協議、認證頭(Authentication Header,AH)協議、封裝(zhuāng)安(ān)全載荷(Encapsulating Security Payload,ESP)協議和用(yòng)于網絡身份鑒别及加密的一些算法等。從工(gōng)作(zuò)流程上看,IPSec協議可(kě)分(fēn)為(wèi)兩個環節:IKE是第一個環節,完成通信雙方的身份鑒别、确定通信時使用(yòng)的IPSec安(ān)全策略和密鑰,即安(ān)全聯盟(SA,Security Associations);第二個環節是使用(yòng)數據報文(wén)封裝(zhuāng)協議和IKE中(zhōng)協定的IPSec安(ān)全策略和密鑰,實現對通信數據的安(ān)全傳輸。其中(zhōng)AH協議定義了認證的應用(yòng)方法,提供數據源認證和完整性保證;ESP協議定義了加密和可(kě)選認證的應用(yòng)方法,提供機密性保證。在實際進行IP通信時,可(kě)以根據實際安(ān)全需求同時使用(yòng)這兩種協議或選擇使用(yòng)其中(zhōng)的一種。
圖3
1) 真實性(不可(kě)否認性):“真實性”可(kě)以證實消息發送方是唯一可(kě)能(néng)的發送者,發送者不能(néng)否認發送過消息。“真實性”是采用(yòng)公(gōng)鑰技(jì )術的一個特征,當使用(yòng)公(gōng)鑰技(jì )術時,發送方用(yòng)私鑰産(chǎn)生一個數字簽名(míng)随消息一起發送,接收方用(yòng)發送者的公(gōng)鑰來驗證數字簽名(míng)。由于在理(lǐ)論上隻有(yǒu)發送者才唯一擁有(yǒu)私鑰,也隻有(yǒu)發送者才可(kě)能(néng)産(chǎn)生該數字簽名(míng),所以隻要數字簽名(míng)通過驗證,發送者就不能(néng)否認曾發送過該消息。
2) 防重放:“防重放”确保每個IP包的唯一性,保證信息萬一被截取複制後,不能(néng)再被重新(xīn)利用(yòng)、重新(xīn)傳輸回目的地址。該特性可(kě)以防止攻擊者截取破譯信息後,再用(yòng)相同的信息包冒取非法訪問權。
3)完整性:防止傳輸過程中(zhōng)數據被篡改,确保發出數據和接收數據的一緻性。IPSec利用(yòng)Hash函數為(wèi)每個數據包産(chǎn)生一個雜湊值,接收方在打開包前先計算雜湊值,若數據包遭篡改導緻雜湊值不相符,則該數據包即被丢棄。
4) 機密性:在傳輸前,對數據進行加密,可(kě)以保證在傳輸過程中(zhōng),即使數據包遭截取,信息也無法被讀取。
為(wèi)規範IPSec VPN産(chǎn)品的研制、檢測、使用(yòng)和管理(lǐ),國(guó)家先後發布了《GM/T 0022-2014 IPSec VPN技(jì )術規範》、《GB/T 36968-2018 信息安(ān)全技(jì )術 IPSecVPN 技(jì )術規範》、《GM/T 0023-2014 IPSec VPN 網關産(chǎn)品規範》等标準,規定了基于商(shāng)用(yòng)密碼算法的IPSec VPN協議實現。其中(zhōng)IKE、AH和ESP的規定如下:
(2.1)IKE
IKE協議用(yòng)于鑒别通信雙方身份、創建安(ān)全聯盟(SA,也稱為(wèi)安(ān)全關聯)、協商(shāng)加密算法以及生成共享會話密鑰等,其中(zhōng)ISAKMP(互聯網安(ān)全聯盟和密鑰管理(lǐ)協議,Internet Security Association and Key Management Protocol)是IKE的核心協議,定義了建立、協商(shāng)、修改和删除SA的過程和報文(wén)格式,并定義了密鑰交換數據和身份鑒别數據的載荷格式。它是IPSec的基礎,協議的内容包括數據報文(wén)封裝(zhuāng)協議、IPSec工(gōng)作(zuò)模式、密碼算法等安(ān)全策略和密鑰。IPSec的兩種封裝(zhuāng)協議(AH和ESP)均使用(yòng)SA中(zhōng)協商(shāng)的内容保護通信安(ān)全。另外,SA是單向的,一個SA為(wèi)單一通信方向上傳輸的數據提供一種安(ān)全服務(wù),通信雙方需要産(chǎn)生屬于自己的SA。
1)安(ān)全聯盟
安(ān)全聯盟(SA,也稱為(wèi)安(ān)全關聯)是構成IPSec的基礎。安(ān)全聯盟是兩個通信實體(tǐ)經協商(shāng)建立起來的一種協定。它們決定了用(yòng)來保護數據包安(ān)全的IPSec協議、轉碼方式、密鑰以及密鑰的有(yǒu)效存在時間等等。任何IPSec實施方案始終會構建一個SA數據庫(SADB),由它來維護IPSec協議用(yòng)來保障數據包安(ān)全的SA記錄。
SA是一個單向的邏輯連接,也就是說,IPSec 需要建立兩個SA,一個用(yòng)于入站通信,另一個用(yòng)于出站通信。例如,有(yǒu)兩個主機(比如A和B)正在通過ESP進行安(ān)全通信,那麽主機A就需要有(yǒu)一個SA,即SA(out),用(yòng)來處理(lǐ)外發的數據包;另外還需要有(yǒu)一個不同的SA,即SA(in),用(yòng)來處理(lǐ)進入的數據包。每個SA用(yòng)唯一的SPI索引标識,當處理(lǐ)接收數據包時,服務(wù)器根據SPI值來決定該使用(yòng)哪種SA。
IKE建立SA分(fēn)兩個階段。第一階段,協商(shāng)創建一個通信信道(IKE SA),并對該信道進行認證,為(wèi)雙方進一步的IKE通信提供機密性、數據完整性以及數據源認證服務(wù);第二階段,使用(yòng)已建立的IKE SA建立IPSec SA。第二階段協商(shāng)消息受第一階段SA保護,任何沒有(yǒu)第一階段SA保護的消息将被拒收。
ISAKMP第一階段稱為(wèi)主模式,通信雙方協商(shāng)創建一個通信信道(IKE SA),并實現雙方的身份鑒别和密鑰交換,得到工(gōng)作(zuò)密鑰,該工(gōng)作(zuò)密鑰用(yòng)于保護第二階段的協商(shāng)過程;第二階段是快速模式,使用(yòng)已建立的ISAKMP SA提供保護,實現通信雙方IPSec SA的協商(shāng),确定通信雙方IPSec安(ān)全策略和會話密鑰。其中(zhōng),IPSec安(ān)全策略定義了哪些服務(wù)以何種形式提供給IP數據報文(wén),如數據加密服務(wù)以SM4的CBC模式實現。
階段 |
工(gōng)作(zuò)模式 |
數據交互 |
目的 |
第一階段 |
主模式 |
6條交互信息 |
創建IKE SA,确定對下一階段保護機制(主要是交換密鑰及身份認證) |
第二階段 |
快速模式 |
3條交互數據 |
确定協議(AH or ESP),算法及參數。 |
2)第一階段——主模式
主模式數據交換使用(yòng)标準ISAKMP載荷語法、屬性編碼、消息的超時和重傳以及通知消息。
主模式是一個身份保護的交換,其交換過程由6條消息組成。雙方身份的鑒别采用(yòng)數字證書的方式。
主模式的交換過程如下(圖4):
圖4
消息1 發起者向接收者發送一個封裝(zhuāng)有(yǒu)建議載荷的SA載荷,而建議載荷中(zhōng)又(yòu)封裝(zhuāng)有(yǒu)變換載荷。
消息2 接收者發送一個SA載荷以及接收者的簽名(míng)證書和加密證書,該載荷表明它所接受的發起方發送的SA提議。
消息3和消息4 發起者和接收者交換數據,交換的數據内容包括Nonce、身份标識(ID)等載荷。Nonce是生成加密密鑰和認證密鑰所必需的參數;ID是發起方或響應方的标識。這些數據使用(yòng)臨時密鑰Sk進行加密保護,Sk用(yòng)對方加密證書中(zhōng)的公(gōng)鑰加密保護,并且,雙方各自對數據進行數字簽名(míng)。
發起者交換的數據如下:
XCHi = Asymmetric_Encrypt(Ski, pub_r) | Symmetric_Encrypt(Ni,Ski) | Symmetric_Encrypt(IDi,Ski)|CERT_sig_i|CERT_enc_i
SIGi_b = Asymmetric_Sign(Ski_b | Ni_b | IDi_b | CERT_enc_i_b, priv_i)
接收者交換的數據如下:
XCHr = Asymmetric_Encrypt(Skr, pub_i) | Symmetric_Encrypt(Nr,Skr) | Symmetric_Encrypt(IDr,Skr)
SIGr_b = Asymmetric_Sign(Skr_b | Nr_b | IDr_b|CERT_enc_r_b, priv_r)
上述過程中(zhōng)使用(yòng)的非對稱密碼算法、對稱密碼算法和密碼雜湊算法均由消息1和消息2确定。臨時密鑰Sk由發起方和接收者各自随機生成,長(cháng)度符合對稱密碼算法對密鑰長(cháng)度的要求。
對稱密碼運算使用(yòng)CBC模式,第一個載荷的IV值為(wèi)0;後續的IV使用(yòng)前面載荷的最後一組密文(wén)。加密前的交換數據應進行填充,使其長(cháng)度等于對稱密碼算法分(fēn)組長(cháng)度的整數倍。所有(yǒu)的填充字節的值除最後一個字節外都是0,最後一個填充字節的值為(wèi)不包括它自己的填充字節數。
消息3和消息4交互完成後,參與通信的雙方生成基本密鑰參數SKEYID,以生成後續密鑰SKEYID_d、SKEYID_a、SKEYID_e,計算方法分(fēn)别如下:
SKEYID = PRF(HASH(Ni_b | Nr_b), CKY-I | CKY-R)
SKEYID_d = PRF(SKEYID, CKY-I | CKY-R | 0)
SKEYID_a = PRF(SKEYID, SKEYID_d | CKY-I | CKY-R | 1)
SKEYID_e = PRF(SKEYID, SKEYID_a | CKY-I | CKY-R | 2)
上述計算公(gōng)式中(zhōng)的值0,1,2是單個字節的數值。
SKEYID_e 是ISAKMP SA用(yòng)來保護其消息機密性所使用(yòng)的工(gōng)作(zuò)密鑰。SKEYID_a 是ISAKMP SA用(yòng)來驗證其消息完整性以及數據源身份所使用(yòng)的工(gōng)作(zuò)密鑰。SKEYID_d 用(yòng)于會話密鑰的産(chǎn)生。
消息5和6發起者和接收者鑒别前面的交換過程。這兩個消息中(zhōng)傳遞的信息使用(yòng)對稱密碼算法加密。對稱密碼算法由消息1和消息2确定,密鑰使用(yòng)SKEYID_e。對稱密碼運算使用(yòng)CBC模式,初始化向量IV是消息3中(zhōng)的Ski和消息4中(zhōng)的Skr串連起來經過Hash運算得到的,即:
IV= HASH(Ski_b | Skr_b)
Hash算法由消息1和消息2确定。
加密前的消息應進行填充,使其長(cháng)度等于對稱密碼算法分(fēn)組長(cháng)度的整數倍。所有(yǒu)的填充字節的值都是0。報頭中(zhōng)的消息長(cháng)度應包括填充字節的長(cháng)度,因為(wèi)這反映了密文(wén)的長(cháng)度。
為(wèi)了鑒别交換,發起方産(chǎn)生HASHi,響應方産(chǎn)生HASHr,計算公(gōng)式如下:
HASHi = PRF(SKEYID, CKY-I | CKY-R | SAi_b | IDi_b )
HASHr = PRF(SKEYID, CKY-R | CKY-I | SAr_b | IDr_b )
3)第二階段——快速模式
快速模式交換依賴于第一階段主模式交換,主要協商(shāng)IPSec SA的安(ān)全策略并衍生會話密鑰。快速模式交換的信息由ISAKMP SA來保護,即除了ISAKMP頭外所有(yǒu)的載荷都要加密。在快速模式中(zhōng),一個Hash載荷應緊跟在ISAKMP頭之後,這個Hash用(yòng)于消息的完整性校驗以及數據源身份驗證。
在第二階段,載荷的加密使用(yòng)對稱密碼算法的CBC工(gōng)作(zuò)模式,第1個消息的IV是第一階段的最後一組密文(wén)和第二階段的MsgID進行Hash運算所得到的,即:
IV=HASH(第一階段的最後一組密文(wén) | MsgID)
後續的IV是前一個消息的最後一組密文(wén)。消息的填充和第一階段中(zhōng)的填充方式相同。
在ISAKMP頭中(zhōng)的MsgID唯一标識了一個正在進行中(zhōng)的快速模式,而該ISAKMP SA本身又(yòu)由ISAKMP頭中(zhōng)的cookies來标識。因為(wèi)快速模式的每個實例使用(yòng)一個唯一的IV,這就有(yǒu)可(kě)能(néng)基于一個ISAKMP SA的多(duō)個快速模式在任一時間内同時進行。
在通信雙方之間有(yǒu)多(duō)條隧道同時存在的情況下,身份标識ID為(wèi)對應的IPSec SA标識并規定通信數據流進入對應的隧道。
快速模式的交換過程如下(圖5):
圖5
消息1 發起者向接收者發送一個雜湊載荷、一個SA載荷(其中(zhōng)封裝(zhuāng)了一個或多(duō)個建議載荷,而每個建議載荷中(zhōng)又(yòu)封裝(zhuāng)一個或多(duō)個變換載荷)、一個nonce載荷和标識載荷。
雜湊載荷中(zhōng)消息摘要的計算方法如下:
HASH_1 = PRF(SKEYID_a,MsgID | Ni_b | SA [ | IDi | IDr])
消息2 發起者向接收者發送一個雜湊載荷、一個SA載荷、一個nonce載荷和标識載荷。
雜湊載荷中(zhōng)消息摘要的計算方法如下:
HASH_2 = PRF(SKEYID_a,MsgID | Ni_b |SA | Nr_b [ | IDi | IDr])
消息3 發起者向接收者發送一個雜湊載荷,用(yòng)于對前面的交換進行鑒别。
雜湊載荷中(zhōng)消息摘要的計算方法如下:
HASH_3 = PRF(SKEYID_a,0 | MsgID | Ni_b | Nr_b )
最後,會話密鑰素材定義為(wèi):
KEYMAT = PRF(SKEYID_d, protocol | SPI | Ni_b | Nr_b)
其中(zhōng),protocol和SPI從協商(shāng)得到的ISAKMP建議載荷中(zhōng)選取。
用(yòng)于加密的會話密鑰和用(yòng)于完整性校驗的會話密鑰按照算法要求的長(cháng)度從KEYMAT中(zhōng)依次選取。先選取用(yòng)于加密的會話密鑰,後選取用(yòng)于完整性校驗的會話密鑰。
當PRF函數的輸出長(cháng)度小(xiǎo)于KEYMAT需要的密鑰素材長(cháng)度時,需要利用(yòng)反饋及連接方法加以擴展,直到滿足對密鑰長(cháng)度的要求為(wèi)止。即:
KEYMAT = K1 | K2 | K3 | ...
其中(zhōng):
K1 = PRF(SKEYID_d, protocol | SPI | Ni_b | Nr_b)
K2 = PRF(SKEYID_d, K1 | protocol | SPI | Ni_b | Nr_b)
K3 = PRF(SKEYID_d, K2 | protocol | SPI | Ni_b | Nr_b)
…
單個SA協商(shāng)産(chǎn)生兩個安(ān)全關聯—— 一個入,一個出。每個SA(一個由發起方選擇,另一個由響應方選擇)的不同的SPI保證了每個方向都有(yǒu)一個不同的KEYMAT。由SA的目的地選擇的SPI,被用(yòng)于衍生該SA的KEYMAT。
4)安(ān)全報文(wén)協議
IPSec通過AH和ESP這兩個安(ān)全協議來實現數據報在網絡上傳輸時的機密性、完整性、真實性和防重放。
圖6
· AH協議
AH協議的主要作(zuò)用(yòng)是為(wèi)整個IP數據報文(wén)(IP頭和IP載荷)提供高強度完整性校驗,以确保被篡改過的數據包可(kě)以被檢查出來。AH使用(yòng)MAC對IP數據報文(wén)進行認證,最常用(yòng)的MAC是HMAC,而HMAC對IP數據報文(wén)處理(lǐ)所用(yòng)的密鑰就是IKE協定的用(yòng)于驗證完整性和數據源身份的會話密鑰。
由于AH不提供機密性保證,所以它也不需要加密算法。盡管如此,仍然需要一個驗證器(身份驗證器)。AH定義保護方法、頭的位置、身份驗證的覆蓋範圍以及輸出和輸入處理(lǐ)規則。
AH可(kě)用(yòng)來保護一個上層協議(傳輸模式)或一個完整的IP數據報(隧道模式)。AH可(kě)單獨使用(yòng),也可(kě)以和ESP連合使用(yòng)。但AH提供的數據完整性與ESP提供的數據完整性稍有(yǒu)不同,AH對外部IP頭各部分(fēn)進行身份驗證。标準GM/T 0022-2014規定,AH不得單獨用(yòng)于封裝(zhuāng)IP數據報文(wén),應和封裝(zhuāng)安(ān)全載荷協議ESP嵌套使用(yòng)。
· ESP協議
和AH協議相比,ESP協議增加了對數據報文(wén)的加密功能(néng),它可(kě)同時使用(yòng)用(yòng)于加密的會話密鑰及用(yòng)于驗證完整性和數據源身份的會話密鑰,以便為(wèi)IP提供機密性、數據源驗證、抗重放以及數據完整性等安(ān)全服務(wù)。由于ESP提供的安(ān)全功能(néng)更為(wèi)全面,在标準GM/T 0022-2014中(zhōng)規定,ESP可(kě)單獨使用(yòng),并同時選擇保密性和數據源身份鑒别服務(wù);當ESP和AH結合使用(yòng)時,無須ESP提供數據源身份鑒别服務(wù),而由AH提供該項安(ān)全服務(wù)。
ESP頭緊緊跟在一個IP頭之後。ESP頭中(zhōng)會包含一個SPI字段。這個值和IP頭之前的目标地址以及協議結合在一起,用(yòng)來标識用(yòng)于處理(lǐ)數據包的特定的那個安(ān)全聯盟。SPI本身是個任意數,一般是在IKE交換過程中(zhōng)由目标主機選定的。
5)工(gōng)作(zuò)模式
IPSec VPN工(gōng)作(zuò)模式包括隧道模式和傳輸模式。在傳輸模式下,IPSec頭被插入到IP頭之後,傳輸層協議之前。在隧道模式下,IPSec頭插在原始IP頭之前,另外生成一個新(xīn)的報文(wén)頭,放在AH或ESP頭之前,如圖7所示。
圖7
對于AH協議,在傳輸模式時,AH放在原IP頭之後,上層(傳輸層)協議之前,為(wèi)整個IP數據報文(wén)(原IP頭和IP載荷)提供認證保護;在隧道模式時,AH放在新(xīn)建外部IP頭之後,原IP數據報文(wén)之前,為(wèi)整個原IP數據報文(wén)及新(xīn)建外部IP頭提供認證保護。
對于ESP協議,在傳輸模式時,ESP頭放在原IP頭之後,上層協議之前,為(wèi)ESP頭後的載荷提供保密性保護,為(wèi)原IP頭後的内容提供認證保護;在隧道模式時,ESP頭放在新(xīn)建外部IP頭之後,原IP數據報文(wén)之前,為(wèi)整個原IP報文(wén)提供保密性保護,為(wèi)新(xīn)建外部IP頭後的内容提供認證保護。
(2.2)密鑰交換的載荷格式
ISAKMP消息由一個定長(cháng)的消息頭和不定數量的載荷組成。消息頭包含着協議用(yòng)來保持狀态并處理(lǐ)載荷所必須的信息。
ISAKMP的頭格式如下圖所示:
圖8
發起方cookie:這個字段是一個唯一的8字節比特串,由發起方随機生成。
響應方cookie:這個字段是一個唯一的8字節比特串,由響應方随機生成。
下一個載荷:這個字段為(wèi)1個字節,說明消息中(zhōng)的第一個載荷的類型。載荷類型的定義如下表所示:
載荷類型的定義
下一個載荷 |
值 |
無 (None) |
0 |
安(ān)全關聯 (Security association) |
1 |
建議 (Proposal) |
2 |
變換 (Transform) |
3 |
密鑰交換 (Key exchange) |
4 |
标識 (Identification) |
5 |
證書 (Certificate) |
6 |
證書請求 (Certificate Request) |
7 |
雜湊 (Hash) |
8 |
簽名(míng) (Signature) |
9 |
Nonce |
10 |
通知 (Notification) |
11 |
删除 (Delete) |
12 |
廠商(shāng) (Vendor) |
13 |
屬性載荷 |
14 |
NAT_D |
20 |
NAT_OA |
21 |
對稱密鑰載荷(SK) |
128 |
保留 (Reserved) |
15-19,22-127 |
私有(yǒu)使用(yòng) (PrivateUse) |
129-255 |
版本号:這個字段為(wèi)1個字節,其中(zhōng)0-3位表示主版本号,4-7位表示次版本号。本标準規定主版本号為(wèi)1,次版本号為(wèi)1。
交換類型:這個字段為(wèi)1個字節,說明組成消息的交換的類型。交換類型的定義如下表所示:
交換類型 |
分(fēn)配的值 |
無 (None) |
0 |
基本 (Base) |
1 |
身份保護 (Identity protection) |
2 |
僅鑒别 (Authentication only) |
3 |
信息 (Informational) |
5 |
将來使用(yòng) (Future use) |
6-31 |
DOI具(jù)體(tǐ)使用(yòng) |
32-239 |
私有(yǒu)使用(yòng) (Private use) |
240-255 |
第一階段使用(yòng)的交換類型為(wèi)身份保護類型即主模式,其值為(wèi)2。第二階段交換使用(yòng)的快速模式所分(fēn)配的值為(wèi)32。
1) 安(ān)全聯盟載荷(SA載荷)
SA載荷用(yòng)于協商(shāng)安(ān)全關聯,并且指定協商(shāng)所基于的解釋域DOI。載荷的格式依賴于他(tā)使用(yòng)的DOI,載荷的類型值為(wèi)1。SA載荷的格式如下圖所示:
圖9
下一個載荷:這個字段的長(cháng)度為(wèi)1個字節,标識了本載荷後下一個載荷的類型。如果當前載荷是最後一個,則該字段将被置為(wèi)0。
載荷長(cháng)度:這個字段的長(cháng)度為(wèi)2個字節,以字節為(wèi)單位标明整個SA載荷的長(cháng)度,計算範圍包括SA載荷、所有(yǒu)建議載荷和所有(yǒu)與被提議的SA有(yǒu)關的變換載荷。
解釋域(DOI):這個字段長(cháng)度為(wèi)4個字節,其值為(wèi)無符号整數,它指定協商(shāng)所基于的DOI,這個字段的值為(wèi)1。
2) 建議載荷
建議載荷用(yòng)于密鑰交換的發起方告知響應方它優先選擇的安(ān)全協議以及希望協商(shāng)中(zhōng)的SA采用(yòng)的相關安(ān)全機制,載荷的類型值為(wèi)2。建議載荷的格式如下圖所示:
圖10
下一個載荷:這個字段的長(cháng)度為(wèi)1個字節,如果後面還有(yǒu)建議載荷,其值為(wèi)2,否則應為(wèi)0。
載荷長(cháng)度:這個字段的長(cháng)度為(wèi)2個字節,以字節為(wèi)單位标明整個建議載荷的長(cháng)度。計算範圍包括通用(yòng)載荷頭、建議載荷所有(yǒu)與該建議有(yǒu)關的變換載荷,該長(cháng)度僅用(yòng)于标明本建議載荷的長(cháng)度。
建議号:這個字段的長(cháng)度為(wèi)1個字節,标明本建議載荷的建議編号。
協議ID:這個字段的長(cháng)度為(wèi)1個字節,标明協議标識符。協議标識符的定義如下表所示:
協議标識符 |
描述 |
值 |
RESERVED |
未分(fēn)配 |
0 |
PROTO_ISAKMP |
ISAKMP的協議标識符 |
1 |
PROTO_IPSec_AH |
AH的協議标識符 |
2 |
PROTO_IPSec_ESP |
ESP的協議标識符 |
3 |
PROTO_IPCOMP |
IP壓縮的協議标識符 |
4 |
SPI長(cháng)度:這個字段的長(cháng)度為(wèi)1個字節,以字節為(wèi)單位标明SPI的長(cháng)度。在第一階段該長(cháng)度為(wèi)0,在第二階段該長(cháng)度為(wèi)4。
變換數:這個字段的長(cháng)度為(wèi)1個字節,标明建議的變換載荷個數。
變長(cháng)的SPI:在第一階段沒有(yǒu)這個字段,在第二階段這個字段的長(cháng)度為(wèi)4個字節,其内容是該建議的提出者産(chǎn)生的随機數。
3) 變換載荷
變換載荷用(yòng)于密鑰交換的發起方告知響應方為(wèi)一個指定的協議提供不同的安(ān)全機制,載荷的類型值為(wèi)3。變換載荷的格式如下圖所示:
圖11
下一個載荷:這個字段的長(cháng)度為(wèi)1個字節,如果後面還有(yǒu)變換載荷,其值為(wèi)3,否則應為(wèi)0。
載荷長(cháng)度:這個字段的長(cháng)度為(wèi)2個字節,以字節為(wèi)單位标明本變換載荷的長(cháng)度。計算範圍包括通用(yòng)載荷頭、變換載荷和所有(yǒu)的SA屬性載荷。
變換号:這個字段的長(cháng)度為(wèi)1個字節,标明本變換載荷的變換編号。單調遞增的變換号表示對變換的優先選擇順序,變換号越小(xiǎo)優先權越高。
變換ID:這個字段的長(cháng)度為(wèi)1個字節,标明建議協議的變換标識符。在第一階段該字段的值為(wèi)1,在第二階段根據不同的協議選用(yòng)不同的變換ID。AH協議的變換ID的定義如表4所示,ESP協議的變換ID的定義如下表所示:
AH協議的變換ID的定義
變換ID |
描述 |
值 |
RESERVED |
未使用(yòng) |
0-1 |
AH_SM3 |
使用(yòng)帶256比特SM3密碼雜湊算法的HMAC |
20 |
ESP協議的變換ID的定義
變換ID |
描述 |
值 |
RESERVED |
未使用(yòng) |
0 |
ESP_SM4 |
SM4分(fēn)組密碼算法 |
129 |
SA屬性:該字段的長(cháng)度是可(kě)變的,标明本變換的SA屬性。
4) SA屬性載荷
SA屬性載荷隻能(néng)用(yòng)于變換載荷之後,并且沒有(yǒu)通用(yòng)載荷頭,用(yòng)于表示SA屬性的數據結構,載荷的類型值為(wèi)14。SA屬性載荷的格式如下圖所示:
圖12 SA屬性載荷格式
屬性類型:這個字段的長(cháng)度為(wèi)2個字節,标明屬性類型。該字段的最高有(yǒu)效比特(比特0)如果為(wèi)0,屬性值是變長(cháng)的,并且本載荷有(yǒu)3個字段,分(fēn)别是屬性類型、屬性長(cháng)度和屬性值。如果屬性類型最高有(yǒu)效比特為(wèi)1,屬性值是定長(cháng)的并且本載荷僅有(yǒu)2個字段,分(fēn)别是屬性類型和屬性值。如果屬性類型是變長(cháng)的,并且屬性值能(néng)在兩個字節中(zhōng)表示,那麽變長(cháng)的屬性可(kě)以用(yòng)定長(cháng)表示。
第一階段密鑰交換屬性類型的定義如下表所示:
第一階段密鑰交換屬性類型的定義
下一個載荷 |
值 |
長(cháng)度 |
加密算法 |
1 |
定長(cháng) |
Hash算法 |
2 |
定長(cháng) |
鑒别方式 |
3 |
定長(cháng) |
交換群描述 |
4 |
定長(cháng) |
交換群類型 |
5 |
定長(cháng) |
群素數/不可(kě)約多(duō)項式 |
6 |
定長(cháng) |
群産(chǎn)生器1 |
7 |
定長(cháng) |
群産(chǎn)生器2 |
8 |
定長(cháng) |
群曲線(xiàn)A |
9 |
定長(cháng) |
群曲線(xiàn)B |
10 |
定長(cháng) |
SA生存期類型 |
11 |
定長(cháng) |
SA生存期 (SA Life Duration) |
12 |
定長(cháng) |
僞随機函數(PRF) |
13 |
定長(cháng) |
密鑰長(cháng)度 |
14 |
定長(cháng) |
字段大小(xiǎo) |
15 |
定長(cháng) |
群順序 |
16 |
定長(cháng) |
塊大小(xiǎo) |
17 |
定長(cháng) |
非對稱算法類型 |
20 |
定長(cháng) |
第二階段密鑰交換屬性類型的定義
分(fēn)類 |
值 |
長(cháng)度 |
SA生存類型 (SA Life Type) |
1 |
定長(cháng) |
SA生存期 (SA Life Duration) |
2 |
定長(cháng) |
組描述 (Group Description) |
3 |
定長(cháng) |
封裝(zhuāng)模式 (Encapsulation Mode) |
4 |
定長(cháng) |
鑒别算法 (Authentication Algorithm) |
5 |
定長(cháng) |
密鑰長(cháng)度 (Key Length) |
6 |
定長(cháng) |
密鑰輪數 (Key Rounds) |
7 |
定長(cháng) |
壓縮字典長(cháng)度 (Compress Dictionary Size) |
8 |
定長(cháng) |
壓縮字典長(cháng)度 (Compress Dictionary Size) |
9 |
4 |
屬性值:這個字段如果是定長(cháng)的,其長(cháng)度為(wèi)2個字節。如果是變長(cháng)的,其長(cháng)度由屬性長(cháng)度字段指定。
屬性長(cháng)度:當屬性值是變長(cháng)時,該字段标明屬性值的長(cháng)度。
第一階段加密算法屬性值的定義如下表所示:
第一階段加密算法屬性值的定義
可(kě)選擇算法的名(míng)稱 |
描述 |
值 |
ENC_ALG_SM4 |
SM4分(fēn)組密碼算法 |
129 |
第一階段密碼雜湊算法屬性值的定義如下表所示:
第一階段密碼雜湊算法屬性值的定義
名(míng)稱 |
描述 |
值 |
HASH_ALG_SM3 |
SM3密碼雜湊算法 |
20 |
第一階段鑒别方式屬性值的定義如下表所示:
第一階段鑒别方式屬性值的定義
名(míng)稱 |
描述 |
值 |
AUTH_METHOD_DE |
公(gōng)鑰數字信封鑒别方式 |
100 |
SA生存期類型屬性值的定義适用(yòng)于第一階段和第二階段,如下表所示:
SA生存期類型屬性值的定義
名(míng)稱 |
描述 |
值 |
SA_LD_TYPE_SEC |
秒(miǎo) |
1 |
SA_LD_TYPE_KB |
千字節 |
2 |
第一階段公(gōng)鑰算法類型屬性值的定義如下表所示:
第一階段公(gōng)鑰算法類型屬性值的定義
名(míng)稱 |
描述 |
值 |
ASYMMETRIC_SM2 |
SM2橢圓曲線(xiàn)密碼算法 |
2 |
第二階段封裝(zhuāng)模式屬性值的定義如下表所示:
第二階段封裝(zhuāng)模式屬性值的定義
名(míng)稱 |
描述 |
值 |
RESERVED |
使用(yòng) |
0 |
ENC_MODE_TUNNEL |
隧道模式 |
1 |
ENC_MODE_TRNS |
傳輸模式 |
2 |
ENC_MODE_UDPTUNNEL_RFC |
NAT穿越隧道模式 |
3 |
ENC_MODE_UDPTRNS_RFC |
NAT穿越傳輸模式 |
4 |
第二階段鑒别算法屬性值的定義如下表所示:
名(míng)稱 |
描述 |
值 |
RESERVED |
使用(yòng) |
0 |
HMAC_SM3 |
SM3密碼雜湊算法的HMAC |
20 |
5) 證書載荷
證書載荷用(yòng)于通信雙方交換證書以及證書相關信息,本載荷的類型值為(wèi)6。
證書載荷的格式如下圖所示:
圖13 證書載荷格式
下一個載荷:這個字段的長(cháng)度為(wèi)1個字節,标識了本載荷後下一個載荷的類型。如果當前載荷是最後一個,則該字段将被置為(wèi)0。載荷類型由表1定義。
保留:這個字段的長(cháng)度為(wèi)1個字節,其值為(wèi)0。
載荷長(cháng)度:這個字段的長(cháng)度為(wèi)2個字節,以字節為(wèi)單位标明包含通用(yòng)載荷頭在内的整個載荷長(cháng)度。
證書編碼:這個字段的長(cháng)度為(wèi)1個字節,标明證書數據字段的證書編碼類型。證書編碼類型定義如下表所示:
證書類型 |
值 |
X.509簽名(míng)證書 |
4 |
X.509加密證書 |
5 |
在标準中(zhōng),隻能(néng)使用(yòng)X.509格式的簽名(míng)證書和加密證書。
證書數據:這個字段是變長(cháng)字段,标明證書。證書的結構及定義見GB/T 20518。
(來源:國(guó)家網安(ān)檢測中(zhōng)心)