網路層的護身符(上):IPSec簡介

作者: 賴榮樞
http://www.goodman-lai.idv.tw

近年來,資訊發展的當紅炸子雞當然是非網路莫屬。隨著網際網路與企業網路的主流化,網路安全性的課題也益形重要,相關的解決方案也成為熱門話題,例如,PGP、Kerberos與SSL等等。不過,這些解決方案主要都是在應用層或傳輸層中加入安全機制,至於網路層的安全性則付之闕如。而IP Security(簡稱 IPSec)便是針對位於網路層的Internet Protocol所提出的安全性協定。

IP中加入安全性協定的最大好處在於確保所有網路通訊的安全。也就是說,即使位於IP層上層的應用程式或傳輸層沒有提供任何安全性的機制,由於IP層加入了安全機制,因此可保護整個網路通訊的內容。

IPSec主要可提供兩種功能:認證功能(Authentication)與保密功能(Confidentiality)。所謂認證,是指確認通訊雙方的身份,以及確保雙方之間傳輸的資料未受他人破壞或竄改。保密則是將通訊內容予以加密,防止網路上的第三者讀取通訊內容。認證與保密的核心都是加密法(或是雜湊函數),提到加密法當然就會牽涉到金鑰管理(Key Management)。因此,IPSec也規定了如何交換金鑰,以便建立與管理加密時所需的各類金鑰。

根據1997年CERT(一個專門研究網路安全的機構)的報告指出,最常見的網路攻擊主要有兩種類型:

  • 修改IP封包,以假造的IP位址來扮演其他使用者。

  • 從網路上竊取IP封包,讀取通訊內容。

有鑑於此,IAB(Internet Architecture Board)決定在下一代的IP協定中(也就是IPv6),加入認證與保密的功能,這些相關功能即統稱為IPSec。IPSec在設計時即考慮到必須與現有IPv4相容。因此相關的開發廠商也可將IPSec移植到現有的IPv4,例如Windows 2000、Windows XP、Windows Server 2003等作業系統便都支援IPSec。

本頁內容

IPSec的應用
IPSec的優點
IPSec的架構
金鑰交換協定

IPSec的應用

IPSec的主要用途即是建立安全的通訊管道。IPSec的應用可分為兩類:

  • 建立區域網路內部的安全通訊:在這種模式下,雙方的個人電腦都必須具備IPSec的能力。這類應用主要是為了防範區域網路內的駭客。例如,將總經理與財務經理之間的全部傳輸內容予以加密,避免員工看到機密的財務資訊。

    圖1:在區域網路內使用IPSec
    圖1:在區域網路內使用IPSec

  • 區域網路之間透過網際網路安全地傳輸資料:在這種模式下,區域網路對外的路由器或防火牆必須要具備IPSec的能力,至於區域網路內的個人電腦使用一般的IP即可。此種模式可建立虛擬私人網路(Virutal Private Network),讓區域網路不必再架設昂貴的專線,而是透過網際網路來建立虛擬專線,以便在區域網路之間安全地傳輸資訊。例如,位於外地的分公司,可透過網際網路與總公司建立安全的通訊管道。

    圖2:利用IPSec,經由網際網路建立區域網路之間的安全通道
    圖2:利用IPSec,經由網際網路建立區域網路之間的安全通道

IPSec的優點

與目前TCP層或應用層的安全性解決方案相比,IPSec大致有以下的優勢:

  • 由於IPSec位於較低的網路層,所以不會牽動上層的TCP層或應用層。因此,不僅使用者完全不受影響,甚至連程式設計師或開發廠商,都不用針對IPSec作任何特殊的變更。

  • 當IPSec應用在路由器或防火牆時,可確保所有的區域網路對外的通訊安全,但區域網路內仍可使用傳輸效率較佳的IP協定。

  • IPSec可套用在個別的使用者或電腦上,提供較大的管理彈性。

  • 目前網際網路的路由協定,主要是藉由路由器之間彼此交換路由資訊而建立整個路由架構。因此之故,網路駭客可藉由不實的路由資訊來破壞路由的路徑,將他人的機密資訊導入所要的位置。由於IPSec可確保路由器之間的通訊安全,也因此可加強路由架構的安全性。

IPSec的架構

我們可以從運作方式、封包結構、使用模式以及使用的協定這四方面來了解IPSec的架構。

IPSec的運作方式

IPSec的運作需先經過以下的1、2步驟:

  • 在初始化時,雙方必須建立安全聯結(Security Associations)。這個步驟的主要目的是讓雙方對於如何使用IPSec的方式達成共識,例如,選擇何種安全功能;決定加密的演算法;使用金鑰的原則等等。

  • 金鑰交換。這個步驟主要是利用非對稱加密法,讓雙方各自擁有相同的秘鑰(Secret Key,專指對稱式加密法所用的金鑰)。

  • 開始以安全的管道來傳輸資訊。

IPSec的封包結構

IPSec到底是以何種方法來提供上述的安全功能呢?除了對封包執行加密或認證演算外,IPSec還會在傳統的IP封包中加入額外的IPSec表頭,用來記錄加密或認證的相關資訊。下圖的封包欄位配置會因使用的模式而有所不同,稍後我會再詳細說明這些欄位。

圖3:IPSec表頭的位置
圖3:IPSec表頭的位置

IPSec的使用模式

IPSec提供了兩種使用模式:

  • 傳輸模式(Transport mode):僅加密或認證上層協定的資料。例如,在區域網路中有兩台電腦A與B,A與B可直接建立連線(不必經由路由器或防火牆),且A與B具有處理IPSec封包的能力時,則可使用IPSec的傳輸模式。

  • 通道模式(Tunnel mode):IPSec會加密或認證整個封包,然後在最外面再加上一個新的IP表頭。當IPSec連線兩端的電腦有一端或兩端不具處理IPSec封包能力,而必須透過具有IPSec能力的路由器或防火牆來代為處理IPSec封包時,即必須使用通道模式。

稍後我會再進一步說明傳輸模式與通道模式。

IPSec的協定

若從功能面來看,IPSec包含了三種協定,分別提供不同的功能。

  • 金鑰交換協定:負責建立安全聯結與交換金鑰。

  • 認證表頭 (Authentication Header,AH):主要提供認證的功能。

  • 資料封裝加密 (Encapsulating Security Payload,ESP):主要提供加密的功能,也可選擇性地再加上認證的功能。

建立IPSec連線使一定會使用金鑰交換協定。至於AH與ESP則是二選一,或是兩者合併使用。

金鑰交換協定

金鑰交換協定主要負責這兩項工作:

  • 建立安全聯結。

  • 建立共同的秘鑰。

IPSec目前預設的金鑰交換協定為ISAKMP(Internet Security Association and Key Management Protocol)與Oakley。Oakley僅規定金鑰交換的方法,至於各種訊息詳細的格式則是由ISAKMP所定義。ISAKMP同時也規定了安全聯結的建立步驟。ISAKMP/Oakley協定相當複雜,因此本文僅大略介紹其原理與功能。讀者若有興趣研究詳細的規格,可自行參考RFC文件。

安全聯結

IPSec在制訂時,即考慮到相容性與彈性的問題。例如,IPSec必須能跨越各種平台;IPSec必須能在Ipv4或Ipv6上使用;開發廠商能夠按照需求來移植各種等級的加密演算法。也就是說,IPSec的協定只提供一個基本的架構,在這個架構之下,各軟硬體廠商再加入適合的演算法或標準等等。

因此之故,IPSec協定中包含了許多參數。當網路上兩個主體(電腦或是路由器)要使用IPSec來傳輸資料時,雙方勢必要先相互溝通,對相關參數達成一致的共識,之後才能建立安全的傳輸管道。所謂安全聯結,就是這樣的一組參數。換言之,安全聯結是由許多參數所組成。在此請讀者注意,安全聯結只是一個抽象性的觀念,組成安全聯結的參數並非全部都是封包中實際的的欄位。

安全聯結具有單向的特質,也就是說當A傳送資料給B時需要定義一項安全聯結,而B傳送資料給A時需要另外一組安全聯結。

安全聯結中有三個最重要的參數,三者合起來可共同定義(或識別)安全聯結:

  • Security Parameters Index(SPI,安全係數索引):SPI是由IPSec接收端在自行定義的數值,長度為32位元,會記載於每個IPSec封包中。例如,A、B、C同時要以IPSec傳送資料給X,則X會定義三個SPI值,之後便可利用IPSec封包中的SPI欄位,辨識該封包隸屬哪個安全聯結。

  • Security Protocol ID(安全協定ID):指定要使用AH或是ESP表頭。每項安全聯結僅能在AH或ESP中擇其一,不能同時指定這兩者。因此,若要同時使用AH與ESP來傳輸資料時,則必須用到兩項安全聯結;若要同時使用AH與ESP建立雙向傳輸關係,則需要四項安全聯結。

  • IP destination address(IP目的位址):安全聯結的單方關係是以接收端的IP位址來定義

如何建立安全聯結

ISAKMP詳細定義了如何建立、協調、修改,以及刪除安全聯結。具有IPSec能力的系統,通常會保有一份安全性清單,詳列系統所支援的安全聯結(例如,支援何種演算法等等),以及使用的優先順序。IPSec連線的兩端在建立安全聯結時,會依據ISAKMP的格式,從各自最高優先順序的安全聯結開始協調,直到建立雙方皆支援的安全聯結。

如前文所述,利用IPSec來互傳資料時,通常需要建立多項安全聯結。此外,安全聯結建好後,也不是就此一路到底使用同樣的安全聯結。由於金鑰安全的機制(後文會說明),每隔一段時間即必須重新建立安全聯結。所有這些工作都由ISAKMP所定義。

金鑰交換的原理

金鑰交換協定向來是加密法中最複雜的部份。IPSec金鑰交換協定首先利用非對稱式加密法來建立安全連線,然後再利用對稱式加密法來加密(或認證)傳輸的資料(有關對稱式加密法的介紹,可參考Kerberos 101一文)。以下簡單地說明非對稱式加密法的架構。

假設使用者A希望利用非對稱式加密法,讓別人能夠以安全的方式傳送資料給他。使用者A首先必須建立一對金鑰,也就是一把公鑰(Publick Key)與一把私鑰(Private Key)。公鑰只能拿來作加密的用途,因此可隨意散發,不會有安全的顧慮。私鑰可拿來解密,因此由使用者A自行保留,不可給其他人。其他人若要以安全的方式傳送資料給使用者A,只要取得使用者A的公鑰,將資料加密後再送回給使用者A。由於只有使用者A擁有私鑰,因此只有使用者A才能解密。請讀者注意,上述的關係基本上是單方的性質,因此若雙方要互傳資料,雙方必須各自擁有對的公鑰。

圖4:非對稱式加密法的架構

圖4:非對稱式加密法的架構

圖5:非對稱式加密法的另一種架構

圖5:非對稱式加密法的另一種架構

在實作上,有些非對稱式加密法也具有下列功能:

順帶一提,上述方式其實就是數位簽名的原理。不過在IPSec中,不會用到這樣子的架構。

與對稱式加密法相比,非對稱式加密法最大的優點在於雙方毋須先共享金鑰即可建立安全連線,因此非常適合應用在網際網路。不過,非對稱式加密法有一個最大的缺點,就是其演算法極為繁複,因此會耗費大量的電腦資源。為了解決這個問題,非對稱式加密法通常會結合對稱式加密法(運算較快、較不耗費資源)一起使用。在實作上,目前有許多種模式,以下說明IPSec所使用的Diffie-Hellman金鑰交換法(Diffie與Hellman這兩位也是最早提出非對稱式加密法的前輩):

  • 雙方先以非對稱式加密法來交換彼此的公鑰(Ka-pub與Kb-pub)。

  • 再以對方的公鑰與自己的私鑰,運算求得一把共同的秘鑰(Ka-b)。很多讀者可能會對這個步驟半信半疑。不用懷疑,就是有些聰明人會想出這種絕招。

  • 利用秘鑰以對稱式加密法,來進行加密或認證的動作。

圖6:Diffie-Hellman金鑰交換法
圖6:Diffie-Hellman金鑰交換法

在後續的加密過程中,若反覆使用同一把秘鑰,比較容易被人破解。為了提高加密安全性,秘鑰每隔一段時間便會重新建立,這種秘鑰就稱為階段金鑰或工作金鑰(Session Key)。這也是為什麼安全聯結必須定期重新協調的主要原因。

IPSec預設使用的金鑰交換協定為Oakley。Oakley可視為是Diffie-Hellman金鑰交換法的加強版,原理相同但提供較高的安全性。