1 前言
針對Internet 的安全需要,為了給IPV4 和IPV6 數(shù)據(jù)報提供高質(zhì)量的、可互操作的、基于密碼學(xué)的安全性,Internet 工程任務(wù)組(IETF)頒布了IP 層安全標(biāo)準(zhǔn)IPSec。IPSec 在IP 層對數(shù)據(jù)包進行高強度的安全處理,提供包括訪問控制、無連接的完整性、數(shù)據(jù)源認證、抗重播(replay)保護(序列完整性(sequence integrity)的一個組成部分)、保密性和有限傳輸流保密性在內(nèi)的服務(wù)。這些服務(wù)是基于IP 層的,提供對IP 及其上層協(xié)議的保護。
對于IPSec 數(shù)據(jù)流處理而言,有兩個必要的數(shù)據(jù)庫:安全策略數(shù)據(jù)庫(SPD) 和安全關(guān)聯(lián)數(shù)據(jù)庫(SAD)。SPD 指定了用于到達或者源自特定主機或網(wǎng)絡(luò)的數(shù)據(jù)流的策略,而SAD 則包含了活動的SA 參數(shù)。在啟動IPSec 保護的源和目的之間,都需要設(shè)置單獨的輸入和輸出SPD 和SAD 。
經(jīng)受IPSec 保護的節(jié)點的通信流,無論是輸入還是輸出都必須查詢SPD。SPD 包含一個策略條目的有序列表,每個條目里又包含多個選擇符,輸入輸出數(shù)據(jù)流就是通過和這些選擇符比較來決定是否進行安全保護。IPSec 允許的選擇符有目的IP 地址,源IP 地址,傳輸層協(xié)議,系統(tǒng)名和用戶ID。目的和源IP 地址可以是一個主機地址,廣播地址,單播地址,任意播地址,地址范圍,地址加子網(wǎng)掩碼或者通配地址;系統(tǒng)名和用戶ID 可以是完整的DNS 名或E-mail 地址。SPD 中的條目決定了處理通信流的粒度,策略可能規(guī)定與某特定的SA 或SA 束對應(yīng)的IPSec 服務(wù)應(yīng)該應(yīng)用到任何源自任何源或者去往任何目的地的所有通信流,策略也可能規(guī)定應(yīng)該基于特定的選擇符來決定不同SA 或SA 束的應(yīng)用??傊琒PD 在控制通過一個IPSec 系統(tǒng)的所有通信中發(fā)揮著非常重要的作用。為了在保證安全強度的前提下,提高IPSec 保護節(jié)點上的流處理速度,本文提出了一種采用硬件IDT75K62100 芯片實現(xiàn)快速的SPD 與SAD 數(shù)據(jù)庫的思想。
2 SPD 與SAD 硬件結(jié)構(gòu)
安全模塊的設(shè)計初衷就是為了在IPV6 路由器中對特定的數(shù)據(jù)流實現(xiàn)高速的IPSec 安全保護,這就使得SPD 和SAD 的高速查找成為一個很關(guān)鍵的問題,因為對每一個包進行IPSec 處理時,都必須查找SPD 和SAD 以獲取相應(yīng)的處理策略,如果查找速度慢的話,將達不到高速的性能要求。數(shù)據(jù)庫可以用軟件來組織,也可以依托硬件來實現(xiàn),為了提高查找速度,我們使用硬件來做數(shù)據(jù)庫。目前支持高速查找的硬件主要有兩種:基于邏輯算法設(shè)計的SRAM 技術(shù)和基于半導(dǎo)體器件設(shè)計的CAM(Content Addressable Memory, 內(nèi)容尋址寄存器)技術(shù)。常用的隨機存儲器通過輸入地址來返回該地址所對應(yīng)的數(shù)據(jù)信息,而CAM 只需要輸入關(guān)鍵字的內(nèi)容就會將此關(guān)鍵字與CAM 中所有表項同時進行比較,最后返回匹配表項在CAM 中對應(yīng)的地址信息。CAM 可以在一個硬件時鐘周期內(nèi)完成關(guān)鍵字的精確匹配查找,目前速度可達到266Mpps 。
CAM 雖然有很多優(yōu)勢,但在本模塊中如果都采用CAM 來作為數(shù)據(jù)庫,則一方面代價太高,因為輸入處理和輸出處理各需要兩個數(shù)據(jù)庫(SPD和SAD), 這樣一共需要四個CAM,而CAM 價格較為昂貴;另一方面將SPD 和SAD 分別設(shè)在兩塊CAM 中,這樣每處理一包需要進行兩次查找,影響了速度。為此,我們特別研究了一種能夠?qū)崿F(xiàn)快速查找的數(shù)據(jù)庫硬件結(jié)構(gòu),這種結(jié)構(gòu)采用CAM 和SRAM 相結(jié)合的方式。這種結(jié)構(gòu)一方面在一定程度上降低了成本,另一方面解決了二次查找的問題。
這種硬件結(jié)構(gòu)的組成原理是將SPD 設(shè)置在CAM 中,而將SAD 設(shè)置在SRAM 中,然后將CAM 和SRAM 級聯(lián)。這樣,在進行IPSec 處理時,先在CAM 中查SP,如果沒有找到相應(yīng)的SP, 則查找結(jié)束;如果查到了相應(yīng)的SP,則由CAM 將對應(yīng)的SA 在SRAM 中的存放地址送給SRAM, 然后從SRAM 中對應(yīng)地址將SA 取出送FPGA, 這樣避免了再由FPGA 對SAD 進行查詢。這種數(shù)據(jù)庫的查找方法還引入了流水機制,即CAM 查到了前一報文的SP 后,將匹配地址送給SRAM,在SRAM 讀該地址對應(yīng)的SA 的同時,CAM 可進行對下一報文的SP 的查找。該查找方法中,CAM 與SRAM 的連接如圖一所示。
圖 1 :CAM 與SRAM 連接圖
3 75K62100 芯片的內(nèi)部結(jié)構(gòu) 實際設(shè)計中,CAM 選用IDT 公司的75K62100 ,其內(nèi)部邏輯結(jié)構(gòu)與主要外部總線如圖二所示。從圖中可以看出,該型號CAM 內(nèi)部主要由配置電路,指令譯碼,輸入輸出數(shù)據(jù)緩存,比較寄存器和數(shù)據(jù)存儲區(qū)等單元組成,外部總線有指令總線,數(shù)據(jù)總線和索引總線,另外還包括一條匹配標(biāo)志信號線。該CAM 的數(shù)據(jù)存儲區(qū)的容量為18M, 經(jīng)過配置電路配置,可以工作在256k×72bit (表項深度為256K, 寬度為72bit)、128K×144bit 、72K×288bit 等模式下。指令總線寬20 位,配置指令,讀寫指令從該總線輸入。數(shù)據(jù)總線寬72 位, 輸入數(shù)據(jù)時,先將數(shù)據(jù)寫入數(shù)據(jù)輸入輸出緩存區(qū),在內(nèi)部地址譯碼控制下,再將數(shù)據(jù)寫入數(shù)據(jù)存儲區(qū)或比較寄存器。比較后得到匹配項的地址由24 位索引總線送出,數(shù)據(jù)經(jīng)輸入輸出緩存器從數(shù)據(jù)總線輸出,并由匹配標(biāo)志信號線給出匹配狀態(tài)。
圖 2 :IDT75K62100 內(nèi)部邏輯結(jié)構(gòu)與外部總線示意圖
SRAM 選用IDT 公司的71V65603 ,該款SRAM 工作頻率為100M-150MHZ ,支持ZBT 技術(shù),容量為256KX36bit 。其內(nèi)部邏輯結(jié)構(gòu)及主要外部總線如圖三所示。
圖 3 :IDT71V65603 內(nèi)部邏輯結(jié)構(gòu)與外部總線示意圖
查找時,先從包頭中提取出查表關(guān)鍵字送CAM 查SP,若查到了SP,則將此SP 對應(yīng)的SA 的地址通過CAM 索引總線送給SRAM 并將匹配標(biāo)志送IPSec 處理單元,SRAM 根據(jù)送來的地址將對應(yīng)的SA 通過數(shù)據(jù)總線寫入IPSec 處理單元。每查到一條SA,則需要對SAD 中的該SA 條目進行更新,因為SA 中包括序列號和SA 生存期等需要及時更新的字段。更新過程和查找過程基本一致,先從CAM 中找到對應(yīng)的SP 條目,得到該SA 的存放地址,然后將修改后的SA 寫入該地址或?qū)⒃璖A 刪除。
4 SPD 和SAD 數(shù)據(jù)格式設(shè)置
一個好的IPSec 協(xié)議實現(xiàn)方案,一定程度上取決于SPD 和SAD 條目的合理的設(shè)置,因為合理的SPD 和SAD 條目設(shè)置可以使IPSec 處理即不復(fù)雜,又達到了預(yù)期的安全保護的要求。
根據(jù)實際需要,本安全模塊的SPD 中每個條目設(shè)置源IP 地址,目的IP 地址,傳輸層協(xié)議三個選項。需要注意的是,源IP 地址和目的IP 地址項完全沒必要設(shè)為128 位的, 只需要儲存各自地址的高64 位即可,因為在128 位的IPV6 地址中,高64 位是所屬網(wǎng)絡(luò)地址,由于是在路由器上實現(xiàn)IPSec 保護,故在進行策略查找時,只需要檢查數(shù)據(jù)包中的源和目的的網(wǎng)絡(luò)地址是否與策略庫中的網(wǎng)絡(luò)地址相匹配即可。傳輸層協(xié)議選項為8 位寬,對于輸出處理單元,只對TCP 和UDP 進行安全保護,故該選項的十進制值應(yīng)為6(TCP)或17(UDP)
; 對于輸入處理單元,只對ESP 進行處理,故該選項的十進制值應(yīng)為50。由此看來,SPD 的表項寬度應(yīng)在136 位以上。
對于輸出包處理的SAD,每個SA 條目包括SPI 字段,序列號計數(shù)器字段,序列號溢出字段,密鑰字段和SA 生存期字段。其中,SPI 字段為32 位寬, 取值范圍為256—232-1,我們規(guī)定,若SPI 為全1,則表示SA 尚未建立,需要進行協(xié)商;若SPI 為其它有效值,則根據(jù)對應(yīng)的SA 進行安全處理。序列號計數(shù)器字段為32 位寬,為所處理的數(shù)據(jù)包提供一個唯一的編號用來抗重放。序列號溢出字段為1 位寬,當(dāng)該位為‘1’時,表示需要對序列號字段進行溢出檢查;為‘0’表示不需進行溢出檢查。密鑰字段128 位,存放3DES 算法的密鑰。SA 生存期字段16 位寬, 值為預(yù)先約定的該SA 所處理的數(shù)據(jù)包的個數(shù),每處理一包該值減一,為0 時該SA 過期, 重新協(xié)商。綜上所述,輸出包處理的SAD1 每個表項寬度應(yīng)在209 位。
對于輸入包處理的SAD2,每個條目包括SPI 字段,抗重放窗口字段,密鑰字段和SA 生存期字段??怪胤糯翱谧侄?2 位寬, 用來存放該SA 所接收到的驗證有效的最大序列號, 接收到的包的序列號如果小于該值將被丟棄。其它字段的設(shè)置與輸出包處理單元對應(yīng)字段相同,不再重復(fù)。綜上所述,輸入包處理的SAD 每個表項寬度為208 位。
需要說明的是,以上設(shè)置是根據(jù)本安全模塊實際設(shè)計的需要設(shè)置的,在IPSec 協(xié)議中建議的一些選項在本設(shè)計中省略了。例如,SPD 中的SPI 選項被省略,因為本設(shè)計中SPD 和SAD 是同時查找的,故可以將SPD 中的SPI 項省略。另外本安全模塊默認使用隧道模式,密碼算法為3DES,不進行認證,故SAD 中的相關(guān)選項被省略。
在設(shè)計中,SPD1 和SPD2 所用CAM 都設(shè)置為128KX144bit 模式,數(shù)據(jù)存儲格式如圖4-1 所示。SAD1 和SAD2 均由SRAM 組成,其存儲空間為256KX36bit,這樣SAD1 和SAD2 中一條SA 條目需要占用6 個存儲單元。數(shù)據(jù)存儲格式如圖4-2 所示。
圖 4-2:SAD1 和SAD2 數(shù)據(jù)格式
5 創(chuàng)新點總結(jié)本文的創(chuàng)新點在于提出并實現(xiàn)了一種用硬件IDT75K62100 芯片實現(xiàn)快速的SPD 與SAD 數(shù)據(jù)庫的思想。目前的SPD 和SAD 往往用軟件的方式來實現(xiàn),但這極大地限制了IPSEC 處理數(shù)據(jù)流的速度,本文提出的這種思想,經(jīng)過實現(xiàn)與測試,對提高IPSEC 保護節(jié)點提高數(shù)據(jù)流的處理速度有很大的幫助。