IPsec相關的一些基本概念

龍蝦天天發表於2017-05-04

問題提出:什麼是xfrm,racoon,netkey,PF_KEY,netlink,clips,26sec,Setkey,KAME,ipsec?

IPsec:Internet Protocol Security是一種開放標準的框架結構,通過使用加密的安全服務以確保在網路上程式保密而安全的通訊。IPsec IP層協議安全主要包括一個IP包程式模組和一個金鑰交換模組,IPsec包的處理模組是基本IPsec安全策略(SP)和安全關聯(SA)的。

PF_KEY:PF_KEY是金鑰管理套接子,在UNPV13e 第19章有介紹。

klips或是NETKEY實現IP資料包的安全接受或傳送的程式。在核心域中執行,主要負責控制管理SA及金鑰,同時處理資料包的加密和解密工作。

klips主要由以下模組組成:通訊介面socket PF_KEY(klips是pluto自帶的,而這個PF_KEY是clips自帶的,Linux核心也有PF_KEY的實現,所以這兩種PF_KEY是不一樣的),負責註冊和初始化模組,資料包處理和轉發模組,資料包的接收和處理模組,SA的管理模組,SHA1、MD5演算法實現模組,路由器的基數實現模組,PF_KEY2協議實現模組,其它一些相關子模組。KLIPS不支援IPv6

NETKEY:又稱26sec,通訊介面socket netlink, 該部分實現包含在2.6核心中,實際是對KAME專案的重寫。

xfrm:指處理IP資料包的網路框架。是IPSec SPD/SAD的管理模組,與原網路架構的路由和網路資料處理密切相關,策略檢查、SA的獲取都屬於xfrm.支援pf_key和netlink.

racoon:一個金鑰管理守護程式,實現使用者中的IKE金鑰協商模組,主要用於自動方式下與通訊對端相應模組的SA協商(相當於openswan的pluto吧),配置管理模組由Setkey實現,用來手動配置SP、SA,完成SPD、SAD的人工管理(相當於openswan的whack?)。為實現racoon和Setkey模組與核心互動,需使用PF_KEYv2套接字

pluto金鑰交換協議(IKE)的守護程式。主要實現IKE協議,以及完成SA的互動。如果pluto使用clips,則使用PF_KEY套接字;如果pluto使用NETKEY,則使用NETLINK_XFRM套接字。

SA,SP,SADB等具體在程式碼中怎麼操作,程式碼中的含義是什麼?資料是怎麼組織的?

IKE,ipsec,pluto的深入理解?

安全策略(Security Policy,簡寫為SP):定義對滿足條件IP報文進行安全處理的規則。即下面的一條路由。或者另一描述:安全策略是用來識別一個資料包是應該處理、忽略、還是應該丟棄。

安全關聯(SecurityAssociation,簡寫為SA):這是這組協議中最重要的一個概念,是RFC文件中要求所有實現中必須包含的一個概念。它為當前IP報文的鑑別、加密處理提供必要的演算法標識和演算法相關的引數。安全關聯是由當前IP報文的目的地址、SPI值及協議這個三元組(即SAID)唯一確定的

安全引數指標(SecurityParameter Index ,簡寫為SPI):是一個32位的整數,用來標識當前IP報文所對應的安全關聯

安全策略資料庫(Security PolicyDatabase,簡寫為SPDB):存放所有本機安全策略的集合

安全關聯資料庫(SecurityAssociation Database ,簡寫為SADB):是存放本機所有安全關聯的集合

pluto可支援核心使用KLIPS或NETKEY實現IPSEC,前者的通訊介面socket是PF_KEY, 後者的通訊介面是netlink, 另外也支援核心無IPSEC的情況(NO_KERNEL), 不過基本就沒什麼意義。KLIPS的IPSEC實現是通過構造ipsec*虛擬網路卡來實現的, 將資料從該網路卡傳送, 就意味著對資料進行加密; 從該網路卡獲取資料, 就是對資料包進行解密。因此安全策略(SP)實際是根據路由來進行的,因此配置加密路由就是配置安全策略,因此專門引入了eroute概念來描述這類路由。(此段引用yfydz的openswan實現)

轉自:http://www.voidcn.com/blog/jeason29/article/p-3409010.html

相關文章