簡介
網際網路安全協定(英語:Internet Protocol Security,縮寫為IPsec),是一個協定包,透過對IP協定的分組進行加密和認證來保護IP協定的網路傳輸協定族(一些相互關聯的協定的集合)。
IPsec主要由以下協定組成:一、認證頭(AH),為IP數據報提供無連線數據完整性、訊息認證以及防重放攻擊保護;二、封裝安全載荷(ESP),提供機密性、數據源認證、無連線完整性、防重放和有限的傳輸流(traffic-flow)機密性;三、安全關聯(SA),提供算法和數據包,提供AH、ESP操作所需的參數。
標準現狀
IPv6是IETF為IP協定分組通信制定的新的網際網路標準,IPsec在RFC 6434以前是其中必選的內容,但在IPv4中的使用則一直只是可選的。這樣做的目的,是為了隨著IPv6的進一步流行,IPsec可以得到更為廣泛的使用。第一版IPsec協定在RFCs2401-2409中定義。在2005年第二版標準文檔發布,新的文檔定義在RFC 4301和RFC 4309中。
設計意圖
IPsec被設計用來提供(1)入口對入口通信安全,在此機制下,分組通信的安全性由單個節點提供給多台機器(甚至可以是整個區域網路);(2)端到端分組通信安全,由作為端點的計算機完成安全操作。上述的任意一種模式都可以用來構建虛擬專用網(VPN),而這也是IPsec最主要的用途之一。應該注意的是,上述兩種操作模式在安全的實現方面有著很大差別。
網際網路範圍內端到端通信安全的發展比預料的要緩慢,其中部分原因,是因為其不夠普遍或者說不被普遍信任。公鑰基礎設施能夠得以形成(DNSSEC最初就是為此產生的),一部分是因為許多用戶不能充分地認清他們的需求及可用的選項,導致其作為內含物強加到賣主的產品中(這也必將得到廣泛採用);另一部分可能歸因於網路回響的退化(或說預期退化),就像兜售信息的充斥而帶來的頻寬損失一樣。
與其它安全協定的對比
IPsec協定工作在OSI模型的第三層,使其在單獨使用時適於保護基於TCP或UDP的協定(如安全套接子層(SSL)就不能保護UDP層的通信流)。這就意味著,與傳輸層或更高層的協定相比,IPsec協定必須處理可靠性和分片的問題,這同時也增加了它的複雜性和處理開銷。相對而言,SSL/TLS依靠更高層的TCP(OSI的第四層)來管理可靠性和分片。
技術細節
認證頭(AH)
認證頭(Authentication Header, AH)被用來保證被傳輸分組的完整性和可靠性。此外,它還保護不受重放攻擊。認證頭試圖保護IP數據報的所有欄位,那些在傳輸IP分組的過程中要發生變化的欄位就只能被排除在外。當認證頭使用非對稱數字簽名算法(如RSA)時,可以提供不可否認性(RFC 1826)。
認證頭分組圖示:
0 | 1 | 2 | 3 |
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 |
下一個頭 | 載荷長度 | 保留 | |
安全參數索引(SPI) | |||
串列號 | |||
認證數據(可變長度) |
欄位含義:
下一個頭:標識被傳送數據所屬的協定。
載荷長度:認證頭包的大小。
保留:為將來的套用保留(目前都置為0)。
安全參數索引:與IP位址一同用來標識安全參數。
串列號:單調遞增的數值,用來防止重放攻擊。
認證數據:包含了認證當前包所必須的數據。
封裝安全載荷(ESP)
封裝安全載荷(Encapsulating Security Payload, ESP)協定對分組提供了源可靠性、完整性和保密性的支持。與AH頭不同的是,IP分組頭部不被包括在內。
ESP分組圖示:
0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
安全參數串列(SPI) | |||||||||||||||||||||||||||||||
串列號 | |||||||||||||||||||||||||||||||
載荷*(可變長度) | |||||||||||||||||||||||||||||||
填充(0-255位元組) | |||||||||||||||||||||||||||||||
填充長度 | 下一個頭 | ||||||||||||||||||||||||||||||
認證數據(可變長度) |
欄位含義:
安全參數索引:與IP位址一同用來標識安全參數
串列號:單調遞增的數值,用來防止重放攻擊。
載荷數據:實際要傳輸的數據。
填充:某些塊加密算法用此將數據填充至塊的長度。
填充長度:以位為單位的填充數據的長度。
下一個頭:標識被傳送數據所屬的協定。
認證數據:包含了認證當前包所必須的數據。
實現
FreeS/WAN項目已經開發了一個開源的GNU/Linux環境下的IPsec實現。且一個基於KAME項目的IPsec實現已經包含在NetBSD、FreeBSD以及2.6Linux核心中。從某種程度上說,也是因為這個原因,Free S/WAN項目的開發在2004年3月時被中止。Openswan和strongSwan是Free S/WAN延續。
至今已有許多IPsec協定和ISAKMP/IKE協定的實現。它們包括:
•NRL IPsec,屬於原型的一種
•OpenBSD,代碼源於NRL IPsec
•Mac OS X,包含了Kame IPsec的代碼
•Cisco IOS
•Microsoft Windows
•SSH Sentinel(現作為SafeNet的一部分)提供了工具包
•Solaris
IPsec相關RFC文檔
RFC 2401
IP協定的安全架構
RFC 2402
認證頭
RFC 2406
封裝安全載荷
RFC 2407
ISAKMP的IPsec解釋域(IPsec DoI)
RFC 2408
網路安全關係與密鑰管理協定(ISAKMP)
RFC 2409
網際網路密鑰交換(IKE)
安全結構
IPsec協定工作在OSI 模型的第三層,使其在單獨使用時適於保護基於TCP或UDP的協定(如 安全套接子層(SSL)就不能保護UDP層的通信流)。這就意味著,與傳輸層或更高層的協定相比,IPsec協定必須處理可靠性和分片的問題,這同時也增加了它的複雜性和處理開銷。相對而言,SSL/TLS依靠更高層的TCP(OSI的第四層)來管理可靠性和分片。
安全協定
(1)AH(AuthenticationHeader) 協定。
它用來向 IP通信提供數據完整性和身份驗證,同時可以提供抗重播服務。
在 IPv6 中協定採用 AH 後, 因為在主機端設定了一個基於算法獨立交換的秘密鑰匙, 非法潛入的現象可得到有效防止, 秘密鑰匙由客戶和服務商共同設定。在傳送每個數據包時,IPv6 認證根據這個秘密鑰匙和數據包產生一個檢驗項。在數據接收端重新運行該檢驗項並進行比較,從而保證了對數據包來源的確認以及數據包不被非法修改。
(2)ESP(EncapsulatedSecurityPayload) 協定。
它提供 IP層加密保證和驗證數據源以對付網路上的監聽。因為 AH雖然可以保護通信免受篡改, 但並不對數據進行變形轉換, 數據對於黑客而言仍然是清晰的。為了有效地保證數據傳輸安全, 在IPv6 中有另外一個報頭 ESP,進一步提供數據保密性並防止篡改。
安全聯盟 SA
安全聯盟 SA,記錄每條 IP安全通路的策略和策略參數。安全聯盟是 IPSec 的基礎, 是通信雙方建立的一種協定,決定了用來保護數據包的協定、轉碼方式、密鑰以及密鑰有效期等。AH和 ESP都要用到安全聯盟,IKE的一個主要功能就是建立和維護安全聯盟。
密鑰管理協定
密鑰管理協定 ISAKMP, 提供共享安全信息。Internet密鑰管理協定被定義在套用層,IETF規定了 Internet安全協定和 ISAKMP(Internet Security Association and Key Management Protocol) 來實現 IPSec 的密鑰管理,為身份認證的 SA 設定以及密鑰交換技術
安全特性
IPSec的安全特性主要有:
不可否認性
"不可否認性"可以證實訊息傳送方是唯一可能的傳送者,傳送者不能否認傳送過訊息。"不可否認性"是採用公鑰技術的一個特徵,當使用公鑰技術時,傳送方用私鑰產生一個數字簽名隨訊息一起傳送,接收方用傳送者的公鑰來驗證數字簽名。由於在理論上只有傳送者才唯一擁有私鑰,也只有傳送者才可能產生該數字簽名,所以只要數字簽名通過驗證,傳送者就不能否認曾傳送過該訊息。但"不可否認性"不是基於認證的共享密鑰技術的特徵,因為在基於認證的共享密鑰技術中,傳送方和接收方掌握相同的密鑰。
反重播性
"反重播"確保每個IP包的唯一性,保證信息萬一被截取複製後,不能再被重新利用、重新傳輸回目的地址。該特性可以防止攻擊者截取破譯信息後,再用相同的信息包冒取非法訪問權(即使這種冒取行為發生在數月之後)。
數據完整性
防止傳輸過程中數據被篡改,確保發出數據和接收數據的一致性。IPSec利用Hash函式為每個數據包產生一個加密檢查和,接收方在打開包前先計算檢查和,若包遭篡改導致檢查和不相符,數據包即被丟棄。
數據可靠性
在傳輸前,對數據進行加密,可以保證在傳輸過程中,即使數據包遭截取,信息也無法被讀。該特性在IPSec中為可選項,與IPSec策略的具體設定相關。