IPsec
互聯網協定套組 |
---|
應用層 |
傳輸層 |
網絡層 |
連結層 |
IPsec(Internet Protocol Security),是通過對IP協議(互聯網協議)的分組進行加密和認證來保護IP協議的網絡傳輸協議族(一些相互關聯的協議的集合)。
IPsec由兩大部分組成:(1)建立安全分組流的密鑰交換協議;(2)保護分組流的協議。前者為互聯網金鑰交換(IKE)協議。後者包括加密分組流的封裝安全載荷協議(ESP協議)或認證頭協議(AH協議)協議,用於保證數據的機密性、來源可靠性(認證)、無連接的完整性並提供抗重播服務。
標準現狀
IPv6是IETF為IP協議分組通信制定的新的互聯網標準,IPsec是其中必選的內容,但在IPv4中的使用則是可選的。這樣做的目的,是為了隨着IPv6的進一步流行,IPsec可以得到更為廣泛的使用。第一版IPsec協議在RFCs 2401-2409中定義。在2005年第二版標準文檔發佈,新的文檔定義在RFC4301和RFC4309中。
設計意圖
IPsec被設計用來提供(1)入口對入口通信安全,在此機制下,分組通信的安全性由單個節點提供給多台機器(甚至可以是整個局域網);(2)端到端分組通信安全,由作為端點的計算機完成安全操作。上述的任意一種模式都可以用來構建虛擬專用網 (VPN),而這也是IPsec最主要的用途之一。應該注意的是,上述兩種操作模式在安全的實現方面有着很大差別。
互聯網範圍內端到端通信安全的發展比預料的要緩慢[來源請求],其中部分原因,是因為其不夠普遍或者說不被普遍信任。公鑰基礎設施能夠得以形成(DNSSEC最初就是為此產生的),一部分是因為許多用戶不能充分地認清他們的需求及可用的選項,導致其作為內含物強加到賣主的產品中(這也必將得到廣泛採用);另一部分可能歸因於網絡響應的退化(或說預期退化),就像兜售信息的充斥而帶來的帶寬損失一樣。
IPsec與其它互聯網安全協議的對比
IPsec協議工作在OSI 模型的第三層,使其在單獨使用時適於保護基於TCP或UDP的協議(如 安全套接子層(SSL)就不能保護UDP層的通信流)。這就意味着,與傳輸層或更高層的協議相比,IPsec協議必須處理可靠性和分片的問題,這同時也增加了它的複雜性和處理開銷。相對而言,SSL/TLS依靠更高層的TCP(OSI的第四層)來管理可靠性和分片。
技術細節
認證頭
認證頭(AH)被用來保證被傳輸分組的完整性和可靠性。此外,它還保護不受重放攻擊。認證頭試圖保護IP數據報的所有字段,那些在傳輸IP分組的過程中要發生變化的字段就只能被排除在外。
認證頭分組圖示:
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)
封裝安全載荷(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 字節) | |||||||||||||||||||||||||||||||
填充長度 | 下一個頭 | ||||||||||||||||||||||||||||||
Authentication Data (variable) 認證數據(可變長度) |
字段含義:
- 安全參數索引
- 與IP位址一同用來標識安全參數
- 序列號
- 單調遞增的數值,用來防止重放攻擊。
- 載荷數據
- 實際要傳輸的數據。
- 填充
- 某些塊加密算法用此將數據填充至塊的長度。
- 填充長度
- 以位為單位的填充數據的長度。
- 下一個頭
- 標識被傳送數據所屬的協議。
- 認證數據
- 包含了認證當前包所必須的數據。
實現
FreeS/WAN項目已經開發了一個開源的GNU/Linux環境下的IPsec實現。且一個基於KAME項目的IPsec實現已經包含在NetBSD、FreeBSD以及2.6 Linux內核中。從某種程度上說,也是因為這個原因,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 Win2K and WinXP
- 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 簡介
- IETF的IPsec工作組。
- Free S/WAN 項目主頁。
- Openswan 項目主頁。
- strongSwan 項目主頁。
- VPN社團 。
- A long thread on the ipsec@lists.tislabs.com 關於是否要將字母S大寫,RFC文檔寫的很清楚,應該是IPsec。