thumb 位於網路層中的 IPsec 網際網路安全協定（，縮寫：IPsec）是一個協議套件，透過對 IP 協議的分組進行加密和認證來保護 IP 協議的網路傳輸協議族（一些相互關聯的協議的集合）。 IPsec 主要由以下協議組成 ： 認證頭（AH），為 IP 資料報提供無連線資料完整性、以及防重放攻擊保護； 封裝安全載荷（ESP），提供機密性、資料來源認證、無連線完整性、防重放和有限的傳輸流（trafficflow）機密性； 網際網路金鑰交換（英語： Internet Key Exchange ，簡稱 IKE 或 IKEv2），為 AH、ESP 操作所需的安全關 聯（SA）提供演算法、資料包和金鑰引數 The Internet Key Exchange IKE RFC 2409 1 Abstract。 標準現狀 IPsec 的源始編碼是在 IPv4 的環境中於 1994 年開發，第一版 IPsec 協議在 RFC 24012409 中定義。在 2005 年第二版標準文件釋出，新的文件定義在 RFC 4301 和 RFC 4309 中 RFC 4301RFC 4309。在 IPv4 中 IPsec 的使用是一個可選項，在 IPv6 RFC 6434 中為必選的內容 IPv6 Node Requirements E Jankiewicz J Loughney T Narten December 2011，這樣做的目的，是為了隨著 IPv6 的進一步流行，IPsec 可以得到更為廣泛的使用。 歷史概要 從 192070 年代初開始，美國高階研究專案局贊助了一系列實驗性的 ARPANET 加密裝置，起初用於本地 ARPANET 資料包加密，隨後又用於 TCPIP 資料包加密。 從 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 和 ATT 貝爾實驗室，開始由 JohnIoanndis 等人研發實驗性軟體 IP 加密協議 swIPe。 3 1993 年，在白宮資訊高速公路專案的支援下，Trusted Information Systems（TIS）科學家徐崇偉（Wei Xu） 研究和開發了第一代軟體 IPSEC 協議，它的編碼是在 BSD 41 核心中完成的，支援 x86 和 SUNOS CPU 架構，同時開發了硬體安全 3DES 的加密技術，併為資料加密標準開發了裝置驅動程式。到 1994 年 12 月，TIS 釋出了由 DARPA 贊助的開放原始碼的 手銬防火牆 產品，其 VPN 速度超過 T1，首次用 IPSec VPN 實現了美國東西海岸安全連結，也是歷史上第一個 IPSec 商用產品。 4 在美國國防部高階研究計劃局（DARPA）資助的研究工作下，1996 年，NRL 為 IPsec 開發了 IETF 標準跟蹤規範（rfc1825 到 rfc1827），它的編碼是在 BSD 44 核心中，同時支援 x86 和 SPARC CPU 架構 httpswwwusenixorglegacypublicationslibraryproceedingssd96atkinsonhtml 。 網際網路工程任務組（IETF）於 1992 年成立了 IP 安全工作組，以規範對 IPsec 的公開協議，1995 年工作組成員有 TIS、Cisco、FTP、Checkpoint 等五個企業組成，首次合作協商改進了 NRL 起草的 IPsec 協議標準，以及規範了 Cisco 和 TIS 提供的 IPsec 開放原始碼，此後，釋出了 RFC1825 和 RFC1827，NRL 在 1996 年 USENIX 會議論文集中進行了描述了，由麻省理工學院線上提供，併成為大多數初始商業實現的基礎。 設計意圖 IPsec 被設計用來提供（1）入口對入口通訊安全，在此機制下，分組通訊的安全性由單個節點提供給多臺機器（甚至可以是整個區域網）；（2）端到端分組通訊安全，由作為端點的計算機完成安全操作。上述的任意一種模式都可以用來構建虛擬專用網（VPN），而這也是 IPsec 最主要的用途之一。應該注意的是，上述兩種操作模式在安全的實現方面有著很大差別。 ，其中部分原因，是因為其不夠普遍或者說不被普遍信任。公鑰基礎設施能夠得以形成（DNSSEC 最初就是為此產生的），一部分是因為許多使用者不能充分地認清他們的需求及可用的選項，導致其作為內含物強加到賣主的產品中（這也必將得到廣泛採用）；另一部分可能歸因於網路響應的退化（或說預期退化），就像兜售資訊的充斥而帶來的頻寬損失一樣。 IPsec 與其它網際網路安全協議的對比 IPsec 協議工作在 OSI 模型的第三層，使其在單獨使用時適於保護基於 TCP 或 UDP 的協議（如安全套接子層（SSL）就不能保護 UDP 層的通訊流）。這就意味著，與傳輸層或更高層的協議相比，IPsec 協議必須處理可靠性和分片的問題，這同時也增加了它的複雜性和處理開銷。相對而言，SSLTLS 依靠更高層的 TCP（OSI 的第四層）來管理可靠性和分片。 技術細節 認證頭（AH） 認證頭（Authentication Header，AH）被用來保證被傳輸分組的完整性和可靠性。此外，它還保護不受重放攻擊。認證頭試圖保護 IP 資料報的所有欄位，那些在傳輸 IP 分組的過程中要發生變化的欄位就只能被排除在外。當認證頭使用非對稱數字簽名演算法（如 RSA）時，可以提供不可否認性（RFC 1826）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 0 0 下一個頭 載荷長度 保留 保留 32 32 安全引數索引（SPI） 安全引數索引（SPI） 安全引數索引（SPI） 安全引數索引（SPI） 64 64 序列號 序列號 序列號 序列號 96 96 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 欄位含義： 下一個頭：標識被傳送資料所屬的協議。 載荷長度：認證頭包的大小。 保留：為將來的應用保留（目前都置為 0）。 安全引數索引：與 IP 地址一同用來標識安全引數。 序列號：單調遞增的數值，用來防止重放攻擊。 認證資料：包含了認證當前包所必須的資料。 封裝安全載荷（ESP） 封裝安全載荷（Encapsulating Security Payload，ESP）協議對分組提供了源可靠性、完整性和保密性的支援。與 AH 頭不同的是，IP 分組頭部不被包括在內。 ESP 分組圖示： 位偏移 位元組 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 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 0 0 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 安全引數序列（SPI） 32 32 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 序列號 64 64 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 載荷 （可變長度） 64 64 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 填充（0255 位元組） 64 64 填充長度 填充長度 填充長度 填充長度 填充長度 填充長度 填充長度 填充長度 下一個頭 下一個頭 下一個頭 下一個頭 下一個頭 下一個頭 下一個頭 下一個頭 64 64 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 認證資料（可變長度） 欄位含義： 安全引數索引：與 IP 地址一同用來標識安全引數 序列號：單調遞增的數值，用來防止重放攻擊。 載荷資料：如果沒使用 ESP 的加密功能，則載荷資料域的內容是 下一個頭 所指示的資料；如果使用了 ESP 的加密功能，則使用加密載荷資料和 ESP 尾部資料所得的密文作為 payload data 填充：某些塊加密演算法用此將資料填充至塊的長度。 填充長度：以位為單位的填充資料的長度。 下一個頭：標識載荷中封裝的資料所屬的協議。 認證資料：又叫做完整性校驗值（ICV）。包含了認證當前包所必須的資料。 安全關聯（SA） 實現 FreeSWAN 專案已經開發了一個開源的 GNULinux 作業系統下的 IPsec 實現。Free SWAN 專案的開發在 2004 年時被中止。Openswan、strongSwan 和 libreswan 是 Free SWAN 延續。 至今已有許多 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 SWAN 專案主頁。 Openswan 專案主頁。 strongSwan 專案主頁。 VPN 社團。 A long thread on the ipsecliststislabscom 關於是否要將字母 S 大寫，RFC 文件寫的很清楚，應該是 IPsec。 IPsec 相關 RFC 文件 RFC 2401 IP 協議的安全架構 RFC 2402 認證頭 RFC 2406 封裝安全載荷 RFC 2407 ISAKMP 的 IPsec 解釋域（IPsec DoI） RFC 2408 網路安全關聯與金鑰管理協定（ISAKMP） RFC 2409 因特網金鑰交換（IKE） Category 網路層協議 Category 穿隧協議 Category 網際協議 Category 虛擬私人網路