互联网安全协议

**網際網路安全協定**（英語：**I**nternet **P**rotocol **Sec**urity，縮寫：**IPsec**）是一個協定套件，透過對 IP 協定的封包進行加密和認證來保護 IP 協定的網路傳輸協定族（一些相互關聯的協定的集合）。

IPsec 主要由以下協定組成：

1. 認證頭（AH），為 IP 資料報提供無連接資料完整性、訊息認證以及防重放攻擊保護；
2. 封裝安全載荷（ESP），提供機密性、資料來源認證、無連接完整性、防重放和有限的傳輸流（traffic-flow）機密性；
3. 網際網路金鑰交換（英語： Internet Key Exchange ，簡稱 IKE 或 IKEv2），為 AH、ESP 操作所需的 安全關聯（SA） 提供演算法、封包和金鑰參數。

## 標準現狀

IPsec 的源始編碼是在 IPv4 的環境中於 1994 年開發，第一版 IPsec 協定在 RFCs 2401-2409 中定義。在 2005 年第二版標準文件發布，新的文件定義在 RFC 4301 和 RFC 4309 中。在 IPv4 中 IPsec 的使用是一個可選項，在 IPv6 RFC 6434 中為必選的內容 ，這樣做的目的，是為了隨著 IPv6 的進一步流行，IPsec 可以得到更為廣泛的使用。

## 歷史概要

從 1920-70 年代初開始，美國進階研究專案局贊助了一系列實驗性的 ARPANET 加密裝置，起初用於本地 ARPANET 封包加密，隨後又用於 TCP/IP 封包加密。

從 1986 年到 1991 年，美國國家安全局在其安全資料網路系統（SDN）計劃下贊助了網際網路安全協定的開發，包括摩托羅拉在內的各種供應商聚集在一起，於 1988 年生產了一種網路加密裝置，這項工作於 1988 年由 NIST 公開發表，其中第 3 層的安全協定（SP3）演變為 ISO 標準的網路層安全協定（NLSP）。

從 1992 年到 1995 年，有三個研究小組對 IP 層加密分別進行了獨立研究：

* 1. 1992 年，美國海軍研究實驗室（NRL）開始了 Simple Internet Protocol Plus（SIPP）專案來進行 IP 加密協定的研究。
* 2. 1993 年，哥倫比亞大學 SunOS 和 AT&T 貝爾實驗室，開始由 JohnIoanndis 等人研發實驗性軟體 IP 加密協定 (swIPe)。
* 3. 1993 年，在白宮資訊高速公路專案的支援下，Trusted Information Systems（TIS）科學家徐崇偉（Wei Xu） 研究和開發了第一代軟體 IPSEC 協定，它的編碼是在 BSD 4.1 核心中完成的，支援 x86 和 SUNOS CPU 架構，同時開發了硬體安全 3DES 的加密技術，並為資料加密標準開發了裝置驅動程式。到 1994 年 12 月，TIS 發布了由 DARPA 贊助的開放原始碼的「手銬防火牆」產品，其 VPN 速度超過 T1，首次用 IPSec VPN 實現了美國東西海岸安全連結，也是歷史上第一個 IPSec 商用產品。
* 4. 在美國國防部進階研究計劃局（DARPA）資助的研究工作下，1996 年，NRL 為 IPsec 開發了 IETF 標準跟蹤規範（rfc1825 到 rfc1827），它的編碼是在 BSD 4.4 核心中，同時支援 x86 和 SPARC CPU 架構 。

網際網路工程任務組（IETF）於 1992 年成立了 IP 安全工作群組，以規範對 IPsec 的公開協定，1995 年工作群組成員有 TIS、Cisco、FTP、Checkpoint 等五個企業組成，首次合作協商改進了 NRL 起草的 IPsec 協定標準，以及規範了 Cisco 和 TIS 提供的 IPsec 開放原始碼，此後，發布了 RFC-1825 和 RFC-1827，NRL 在 1996 年 USENIX 會議論文集中進行了描述了，由麻省理工學院線上提供，並成為大多數初始商業實現的基礎。

## 設計意圖

IPsec 被設計用來提供（1）入口對入口通訊安全，在此機制下，封包通訊的安全性由單個節點提供給多台機器（甚至可以是整個區域網路）；（2）端到端封包通訊安全，由作為端點的電腦完成安全操作。上述的任意一種模式都可以用來構建虛擬私人網路（VPN），而這也是 IPsec 最主要的用途之一。應該注意的是，上述兩種操作模式在安全的實現方面有著很大差別。

網際網路範圍內端到端通訊安全的發展比預料的要緩慢，其中部分原因，是因為其不夠普遍或者說不被普遍信任。公鑰基礎設施能夠得以形成（DNSSEC 最初就是為此產生的），一部分是因為許多使用者不能充分地認清他們的需求及可用的選項，導致其作為內含物強加到賣主的產品中（這也必將得到廣泛採用）；另一部分可能歸因於網路回應的退化（或說預期退化），就像兜售資訊的充斥而帶來的頻寬損失一樣。

## IPsec 與其它網際網路安全協定的對比

IPsec 協定工作在 OSI 模型的第三層，使其在單獨使用時適於保護基於 TCP 或 UDP 的協定（如安全套接子層（SSL）就不能保護 UDP 層的通訊流）。這就意味著，與傳輸層或更高層的協定相比，IPsec 協定必須處理可靠性和分片的問題，這同時也增加了它的複雜性和處理開銷。相對而言，SSL/TLS 依靠更高層的 TCP（OSI 的第四層）來管理可靠性和分片。

## 技術細節

### 認證頭（AH）

**認證頭**（Authentication Header，**AH**）被用來保證被傳輸封包的完整性和可靠性。此外，它還保護不受重放攻擊。認證頭試圖保護 IP 資料報的所有欄位，那些在傳輸 IP 封包的過程中要發生變化的欄位就只能被排除在外。當認證頭使用非對稱數位簽章演算法（如 RSA）時，可以提供不可否認性（RFC 1826）。

認證頭封包圖示：

欄位含義：

**下一個頭：標識被傳送資料所屬的協定。**
**載荷長度：認證頭包的大小。**
**保留：為將來的應用保留（目前都置為 0）。**
**安全參數索引：與 IP 位址一同用來標識安全參數。**
**序列號：單調遞增的數值，用來防止重放攻擊。**
**認證資料：包含了認證當前包所必須的資料。**

### 封裝安全載荷（ESP）

**封裝安全載荷**（Encapsulating Security Payload，**ESP**）協定對封包提供了源可靠性、完整性和保密性的支援。與 AH 頭不同的是，IP 封包頭部不被包括在內。

ESP 封包圖示：

欄位含義：

**安全參數索引：與 IP 位址一同用來標識安全參數**
**序列號：單調遞增的數值，用來防止重放攻擊。**
**載荷資料：如果沒使用 ESP 的加密功能，則載荷資料域的內容是「下一個頭」所指示的資料；如果使用了 ESP 的加密功能，則使用加密載荷資料和 ESP 尾部資料所得的密文作為 payload data.**
**填充：某些塊加密演算法用此將資料填充至塊的長度。**
**填充長度：以位為單位的填充資料的長度。**
**下一個頭：標識載荷中封裝的資料所屬的協定。**
**認證資料：又叫做完整性校驗值（ICV）。包含了認證當前包所必須的資料。**

### 安全關聯（SA）

## 實現

FreeS/WAN 專案已經開發了一個開源的 GNU/Linux 作業系統下的 IPsec 實現。Free S/WAN 專案的開發在 2004 年時被中止。Openswan、strongSwan 和 libreswan 是 Free S/WAN 延續。

至今已有許多 IPsec 協定和 ISAKMP／IKE 協定的實現。它們包括：

* NRL IPsec，屬於原型的一種
* OpenBSD，代碼源於 NRL IPsec
* Mac OS X，包含了 Kame IPsec 的代碼
* Cisco IOS
* Microsoft Windows
* SSH Sentinel（現作為 SafeNet 的一部分）提供了工具包
* Solaris
* FreeBSD
* NetBSD
* Android
* iOS

## 參見

* 資訊安全

## 參考文獻

## 外部連結

* 電腦系統安全
* IPsec 簡介
* IETF 的 IPsec 工作群組。
* Free S/WAN 專案首頁（頁面存檔備份，存於網際網路檔案館）。
* Openswan 專案首頁（頁面存檔備份，存於網際網路檔案館）。
* strongSwan 專案首頁（頁面存檔備份，存於網際網路檔案館）。
* VPN 社團（頁面存檔備份，存於網際網路檔案館）。
* A long thread on the ipsec@lists.tislabs.com 關於是否要將字母 S 大寫，RFC 文件寫的很清楚，應該是 IPsec。

### IPsec 相關 RFC 文件

**RFC 2401**
: IP 協定的安全架構

**RFC 2402**
: 認證頭

**RFC 2406**
: 封裝安全載荷

**RFC 2407**
: ISAKMP 的 IPsec 解釋域（IPsec DoI）

**RFC 2408**
: 網路安全關聯與金鑰管理協定（ISAKMP）

**RFC 2409**
: 網際網路金鑰交換（IKE）