劉驥宇,母軍臣
(1.商丘師范學院軟件學院,河南商丘476000;2.開封大學軟件學院,河南開封475000)
IKEv2協議中消息協商的一種實現方案
劉驥宇1,母軍臣2
(1.商丘師范學院軟件學院,河南商丘476000;2.開封大學軟件學院,河南開封475000)
IKEv2協議中最重要的內容是消息的協商,消息協商系統也是整個 IKEv2系統中的難點。本文實現的方案中,根據協商消息的轉換定義了多個狀態值和狀態轉換表,通過對狀態轉換的跟蹤,完成整個協商交換。并使用交換得到的信息生成安全傳輸所需的密鑰種子和各種密鑰,成功建立IKE_SA和CHILD_SA。
IPsec;IKEv2;消息協商
IP安全協議 IPsec協議族[1]是組建VPN[2]所使用的一種主要協議,也是IETF為了彌補Internet的安全性缺陷而設計的。IPsec是一組開放標準集,協同工作來確保對等設備之間的數據機密性、數據完整性以及數據認證。
Internet密鑰協商(IKE)協議是 IPsec協議族的重要協議之一,它的用途就是在 IPsec通信雙方之間,動態建立起共享安全參數及驗證過的密鑰,即建立安全聯盟(SA)。該協議的第二個版本(IKEv2)[3]簡化了其第1個版本(IKEv1)中冗余的功能,增強了安全性[4-5]。其依靠公鑰密碼體制、私鑰密碼體制和 Hash函數,提供了多種交換模式和相關選項為IPsec服務。
IKEv2的消息協商過程對 IKEv1進行了很大的改進。IKEv1的協商流程非常復雜,采用2個階段,4種模式。在第一階段中選擇使用主模式或野蠻模式,其中在主模式中需要六條交換消息,第二階段的快速模式需要3條交換消息。并且根據不通的認證方法,交換的消息也不同,使得整個協商流程更加復雜。IKEv2取消了模式的概念 ,不存在“主模式”、“野蠻模式”、“快速模式”、“帶身份保護的主模式”和“新組模式”等交換類型。IKEv2中的消息交換包括3種基本交換類型:初始交換(Initial Exchange)、協商子 SA交換(CREA TE_CH ILD_SA Exchange)和信息交換(INFORMA TIONAL Exchange)。
IKEv2協商SA分為2步實現:首先,在通信雙方間建立1個經認證的安全信道,即建立 IKE SA;然后,在這個安全信道保護之下,為 IPsec安全服務協商SA,即建立IPsec SA。在IKEv2中,IKE SA仍然被稱為IKE SA,而IPsec SA則被稱為CHILD SA。為了更好的進行上述2步交換,需要進行一些控制和狀態信息的交換。IKEv2相對于IKEv1在消息的數量和內容上都發生了不小的變化。
根據協議的特點,筆者使用C++語言,以面向對象的方法設計了1個IKEv2消息協商系統。
消息的處理主要由 Message類完成,Message類是對 IKEv2消息的抽象,1個Message對象就代表一條消息。它主要用來對IKEv2交換消息的屬性及消息的分析、構造等操作進行描述。
為了表示 IKEv2協議中重新設置的4種新的交換類型,Message類中定義了1個枚舉類型變量,如下所示:
enum EXCHANGE_TYPE{
IKE_SA_IN IT=34, /* IKE_SA_IN IT交換,值為34*/
IKE_AU TH, /* IKE_AU TH交換,值為35*/
CREA TE_CH ILD_SA, /* CREA TE_CH ILD_SA交換,值為36*/
INFORMA TIONAL /* 信息交換,值為37*/
};
Message類中主要成員函數如下:
1)添加載荷。在Message類中定義了2個載荷集合:unencrypted_payloads用來存放沒有加密的載荷,encrypted_payloads用來存放加密載荷中的加密數據,即SK{…}中的載荷。而add Payload()成員函數就是將各個載荷添加到這2個集合中來,以便構造交換消息。添加載荷時是從尾部插入。
2)消息的構造。當接收到系統的指令,需要向通信對方發送消息時,就要按照IKEv2協議的定義進行構造消息,即將待發送的消息暫存到1個緩沖區內等待發送。在構造消息時,首先消息實體中對各個域的設置是在實施消息協商的IKE_SA_Controller類中完成,設置完畢后,由 Message類的generate Binary Representation()成員函數來完成對消息的構造,它將IKE消息頭與上面介紹的2個載荷集合 unencrypted_payloads和encrypted_payloads添加進緩沖區中,等待向通信對端發送。構造消息流程圖如圖1所示。

圖1 構造消息流程圖
3)消息的分析。當接收到通信對方發送來的協商消息數據包時,應該按照IKEv2協議的定義對其進行分析,即將存入緩沖區的消息進行分析,分析出相應的 IKE頭和攜帶的載荷。IKE頭的各個域在Message類的構造函數中分析完成,消息中其余各個載荷的分析由M essage類的generatePayloads()成員函數來完成。分析消息流程圖如圖2所示。

圖2 分析消息流程圖
IKE_SA_Controller類負責通信雙方進行協商消息,根據當前協商所處的狀態和收到的消息,對進入的數據包進行分析處理,然后構造發送對端的數據包,進行協商,最終完成SA的建立。根據功能不同,可將其分為兩部分,一部分負責狀態轉換表的操作,另一部分負責消息協商。
2.2.1 狀態轉換表的設計
消息協商過程中的狀態信息比較復雜,可以定義一系列的標志進行標識,如標識是哪一對節點間的協商、協商所處的階段、協商雙方在此次協商中擔任的角色等。而且協商時要交換許多信息,這些信息在計算密鑰種子和各種密鑰、身份認證等情況下使用,因此需要定義1個變量臨時存放協商過程中的相關狀態。在IKE_SA_Controller類中設計了1個狀態轉換表用來記錄運行中的各個狀態值。每個狀態的轉換都由1個事件激發,一旦1個事件發生,就會激發狀態發生轉換。即如果1個狀態按照規定轉換到下1個相應的狀態值,則說明上1個動作正確完成了。這些狀態值的意義如表1所示。
IKE_SA_Controller類中有關狀態表的主要成員函數如下:
1)initializes State Tables():初始化狀態轉換表,即表2(空白之處為狀態 STA TE_ERROR),由此可以看到各個狀態的轉換情況,協商中各個狀態之間的轉換將按照這個表來進行。

表1 State_Value(狀態值表)

表2 State_Conversion(狀態轉換表)
2)createTransition():在進行構造狀態表時使用,用來說明1個狀態在受到特定事件激發時會轉換到哪個狀態。
3)getNextState():根據上1個狀態和發生的事件,轉換到1個新的狀態,該成員函數返回新的狀態值。
2.2.2 消息協商過程
在對IPsec數據包進行處理時,首先在內核的SAD中查找SA,如果沒有相應的SA,則將啟動IKEv2進程協商SA。響應建立SA請求并觸發IKEv2進程進行消息協商的方式有以下2種:一種是收到內核發出的創建SA或更新SA的請求:SADB_ACQU IRE消息或SADB_EXPIRE消息;另一種是在收到對端IKEv2守護進程發出的協商SA的請求時,也啟動協商交換以便能夠響應對方的協商請求。
IKEv2協商被觸發后,首先判斷 IKE_SA是否存在。如果存在,則直接進行 CREA TE_CH ILD_SA階段交換,協商建立該 IKE_SA保護下的CH ILD_SA;否則,開始 IN ITIAL階段的消息交換,協商建立IKE_SA和CHILD_SA。
1)初始交換階段協商。初始交換的協商由4條消息組成,包含2個交換:第一個是 IKE_SA_IN IT交換,第二個是 IKE_AU TH交換。交換完成,在 IKEv2交換實體間建立起 IKE_SA和第1個CH ILD_SA。
IKE_SA_IN IT交換由頭2條消息完成,進行協商加密算法、交換 nonce值、完成Diffie-Hellman交換、計算后階段所需要的各種密鑰值。
首先,協商雙方處于就緒狀態。在該狀態下,系統對于協商雙方的連接描述已建立,可以進入IKE協商。當發起方接到系統開始協商的通知后開始構造第一條消息。構造消息時首先創建消息對象,設置消息頭中的各域屬性,然后構造消息頭,接著順序加入SAi載荷、KEi載荷和Ni載荷,這些載荷由載荷處理子系統進行構造。消息構造完成后放入緩沖區進行發送,這時協商發起方的狀態值轉換為狀態1。
協商的響應方收到消息后,首先對其進行分析,得到消息頭各域以及 SA載荷、KE載荷和NONCE載荷。然后檢查收到的SA載荷中是否有合適的建議子結構,如沒有,則向對方發送1個通知載荷并返回。如發現合適的建議子結構,則接著完成D-H交換。在響應方對接收到的消息分析處理完畢后,就開始構造第二條消息,按順序構造消息頭、SA r載荷、KEr載荷和N r載荷。消息構造完成后將其發送到對方,這時響應方進入狀態4。然后響應方根據雙方協商的載荷可生成SKYSEED以及后續交換所需要的各個密鑰值。
發起方收到響應方發送的第二條消息后對其進行分析和檢查,如果協商出合適的提議子結構和D-H組等值,則發起方開始計算SKYSEED以及后續交換所需要的各個密鑰值。至此IKE_SA_IN IT交換結束并開始IKE_AU TH交換。
IKE_AU TH交換由后兩條消息完成,主要進行認證前面發送的消息、交換身份標識和證書(可選)、建立第一個CH ILD_SA。
首先,消息發起方構造第三條消息所需要的消息頭和載荷,從外面看,此消息只包括消息頭和1個加密載荷,而 IDi載荷、AU TH載荷、SAi2載荷、TSi載荷和 TSr載荷都由加密載荷封裝和保護。構造好載荷后將他們加入到消息中發送出去。這時發起方的狀態值轉換為狀態2。響應方接收到第三條消息后,同樣對該消息進行分析,得到相應的載荷并進行流量選擇符的選擇。然后根據協商的認證方法和密鑰對消息進行驗證,以檢驗其完整性。驗證無誤后開始構造第四條消息,構造完畢后將其送出。這時響應方的狀態值轉換為狀態5。發送方接收并分析第四條信息,并對其完整性進行驗證后完成IKE_AU TH交換并建立第1個CH ILD_SA。此時發起方的狀態值轉換為狀態3。
2)CREA TE_CHILD_SA階段交換。當在IKE_SA的保護下需要建立更多的CH ILD_SA或者需要重協商IKE_SA和CHILD_SA時,就需要進行CREATE_CHILD_SA交換。CREATE_CH ILD_SA交換可以選擇交換 KE載荷,以支持完美向前保密,使CHILD_SA具有更強的保密性。協商中的任何一方均可發起 CREATE_CHILD_SA交換。
協商雙方按照協議規定的消息的內容和格式調用載荷處理子系統構造消息中的載荷,然后構造要發送的消息。對于接收到的消息,交換的雙方在構造完消息頭后,進行檢查 spi是否為0,如不為0則表示是安全聯盟重協商;如果為0,則表示是建立CH ILD SA交換。然后檢查是否有 KE載荷以支持完美向前保密。CREA TE_CH ILD_SA交換的消息都是經過加密的,具體處理過程同IN ITIAL交換的加密消息處理。
IKEv1低效的原因之一是其復雜的消息協商過程,IKEv2協議簡化了 IKEv1冗余的功能,降低了復雜度,增強了安全性。本文提出的 IKEv2消息協商實現方案是整個IKEv2實現中最重要的部分,通過定義和跟蹤協商的狀態值,能高效完成IKEv2的消息協商并能成功建立安全聯盟。
[1] Kent S,Seo K.Security Architecture for the Internet Pro tocol[S].RFC4301,2005.
[2] 戴宗坤,唐三平.VPN與網絡安全[M].北京:電子工業出版社,2002.
[3] Kaufman C,et al.Internet Key Exchange(IKEv2)Protocol[S].RFC 4306,2005.
[4] Hussaina M,Hajjehb I,Afific H,et al.Tri-party IKEv2 in Home Networks[C].ICACT 07 Seoul,South Ko rea.
[5] Soussi H,Hussain M,Afifi H,et al.IKEv1 and IKEv2:A Quantitative Analyses[J].The Fourth World Enformatika Conference,2005(6):194-197.
Implementation for Message Negotiation in IKEv2 Protocol
Liu Jiyu1,Mu Junchen2
(1.School of Software,Shangqiu Normal University,Shangqiu,Henan 476000,China;2.School of Software,Kaifeng University,Kaifeng,Henan 475000,China)
The most important content of IKEv2 protocol is message negotiation and message negotiation system is the difficulty of the whole IKEv2 system.According to the conversion of consultation message,this paper defines a number of state values and state conversion table,and it completes the entire consultation exchange smartly through the state transition of the track.Also,it can use the information to generate the necessary seed and all kinds of secret keys.In this way,IKE_SA and CH ILD_SA are set up successfully.
IPsec;IKEv2;message negotiation
TP393.09
A
1671-2544(2010)06-0062-04
2010-09-02
劉驥宇(1978— ),男,河南商丘人,商丘師范學院軟件學院助教,碩士。母軍臣(1979— ),男,河南周口人,開封大學軟件學院助教,碩士。
(責任編輯:陳錦華)