網際網路安全協定（英語：Internet Protocol Security，縮寫：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）