911帶來的教訓是慘痛的,尤其是那些在世貿中心的IT企業,因為它們的數據損失是災難性的,這在幾年內都會對它們的業務產生影響.所以企業信息數據存儲安全的重要性越來越被認可。而近年來的一些最沒有技術含量的失竊事件,反而讓大眾認識到為數據加密的重要性。 目前已經有多家廠商致力于存儲加密標準,希望讓存儲安全工具更容易和多種存儲架構一同工作。 有關加密技術的實現可根據不同廠商與產品分成三類:基于主機、基于網絡(數據傳輸)以及基于磁帶機。這有點類似實現虛擬存儲的劃分方式。 本文所介紹的FC加密卡是基于網絡層的,這是在設備I/O端口外接的一個硬件加密裝置。本FC加密卡的主要功能有存儲加密、基于主機的身份認證、訪問控制和安全日志等,同時還可以支持多種操作系統的服務器主機以及FC協議,并具有安全、方便的管理配置界面,能可靠的接人到FC-SAN的應用環境。 1 FC加密卡的應用環境 本FC加密卡主要用于采用光纖通道技術的FC-SAN中,可安裝在存儲服務器上的FC HBA卡和交換機/磁盤陣列FC接口之間。主要功能是完成進出磁盤陣列的SCSI數據的加解密。FC加密卡的加密密鑰采用USB KEY并以密文的形式注入,以配合主機輸入的解密密鑰將工作密鑰解密。同時也可以根據主機設定的控制策略,對進出磁盤陣列的有效數據進行加解密。本加密卡的應用方式如圖1所示。 2 總體硬件設計 2.1 FC加密卡硬件設計 FC加密卡系統的總體結構如圖2所示。該加密卡包含一塊加密卡硬件和相應的驅動程序以及設備管理程序,同時包含2個2 GB的FC光收發模塊,可用于連接HBA卡和磁盤陣列。此外,該加密卡還可通過PCI-E接口連接到計算機主板,然后通過設備管理程序完成設備狀態的檢測、顯示和日志記錄等功能。密鑰的注入也是設備管理程序的工作,而驅動程序則可用于完成與下層驅動程序的接口功能。本FC加密卡硬件的總體結構如圖3所示。本加密卡主要由三部分組成:光收發器、大容量FPGA和外圍附加電路。其中光收發模塊可完成光電信號的轉換功能,設計時可采用最高能支持2 Gbps的FC用光收發模塊,該模塊支持熱插拔,所以可將其中的一路光收發模塊與服務器的HBA卡光接口相連,而將另一路與磁盤陣列的光接口相連。 FPGA是卡上功能最重要的一個器件,用于完成加密卡數據凈荷的加解密。FPGA可選用Xilinx公司的高端FPGA—V5LX50T,FPGA本身能支持2 Gbps速率的串并變換高速接口。并可完成8B/10B變換,同時可提供PCI—E接口硬核。若按邏輯功能劃分,FPGA上主要有DMA處理模塊、密鑰交互模塊、同步與解復用模塊、幀解析模塊、密鑰管理模塊、成幀模塊、轉發調度模塊以及復用模塊。 通過DMA處理模塊可調用PCI—E IPCORE,以通過DMA數據傳輸方式實現主機與FPGA的數據交互。本FC加密卡主要傳輸三種數據,即經過加密的AES密鑰、解密密鑰、數據。 密鑰交互模塊主要通過與DMA處理模塊交互,來得到經過加密的AES密鑰與解密密鑰,然后通過解密程序解出加密數據所用的AES密鑰,并存在RAM中,以供密鑰管理模塊調用。 同步與解復用模塊主要用于完成20 bit到33bit的數據轉換、字同步、去除IDLE原語。以及數據時鐘域轉換,也就是將線路時鐘數據轉換為本地時鐘數據。 幀解析模塊主要用于解析線路中傳輸的原語序列或幀數據。通常幀中會有4種FCP信息單元。即命令服務請求(FCP_CMND)、數據傳送請求、數據傳送請求(FCP_XFER_RDY)、數據傳送工作(FCP_DATA)、命令服務響應(FCP_RSP),系統首先需要將幀同原語序列解析出來,然后還要將各種幀類型解析出來。 圖4所示是一個幀報頭的格式,由圖4可見。在幀頭中,有足夠的信息來解析各信息單元。其幀類型定義如表1所列。 在命令幀中可提取LUN、讀寫信息.而將其他的命令幀轉發至轉發調度模塊。并將數據送人加密模塊處理。 密鑰管理模塊的作用是在鏈路建立前完成密鑰表的建立。并在主機與FPGA交互完畢并解出AES密鑰后,將其存人RAM中。在FCP_CMND解析后,可得出讀寫信息,如果讀、寫信號任一有效或同時有效,則還應根據LUN號從RAM中提取密鑰并輸入AES加密模塊。 AES加密模塊的作用是通過收到的加密密鑰,并使甩AES-256計數器模式進行加密,然后蔣計數器值加密后送到成幀模塊。 成幀模塊可在對數據凈荷進行加,解密之前進行CRC校驗,如果接收幀正確,則在加密后重新計算一個正確的CRC;若接收幀錯誤,則在計算新的CRC值時添加錯誤的CRC。由于FCP協議中規定:在每發送完一個幀之后,發送機的RD值應保持為負。所以必須計算加/解密幀從SOF到CRC的RD值。最后添加一個合適的EOF。 轉發調度模塊的主要作用是在將幀解析模塊的輸出和加/解密模塊的輸出都發送到轉發調度模塊后,通過調度模塊來調度兩路信號并將其輸出至復用模塊。而且在無有效數據輸入時,它可發送IDLE原語。 復用模塊可將輸入的33bit信號轉換為20 bit信號。 外圍附加電路包括晶振、電源電路和FPGA加載芯片。其中晶振可提供高精度的106.25 MHz時鐘作基準時鐘,通過FPGA內的時鐘分配電路產生各個模塊工作所需要的時鐘。電源電路負責從PCI-E接口接入主機的3.3 V電源,并生成FPGA所需的1 V、2.5 V電壓以供應FPGA和光模塊。 2.2 PCI-E接口控制模塊 PCI-E接口控制模塊用于完成PCI-E硬核的調用和頂層TLP包的組裝和拆分工作,為上層通信控制器提供正確的通信通道。圖5所示是PCI-E接口硬核的結構功能框圖。 3 軟件設計 3.1 PCI-E驅動程序 PCI是一組完全規范,它定義了計算機的不同部分是如何交互的。PCI規范覆蓋了與計算機接口相關的絕大多數方面,PCI外設由一個總線號、一個設備號和一個功能號確定。 PCI或PCI-E設備上有三種地址空間:PCI的I/O空間、PCI的存儲空間和PCI的配置空間。CPU可以訪問PCI設備上的所有地址空問,其中I/O空間和存儲空間提供給設備驅動程序使用.而配置空間則由Linux內核中的PCI初始化代碼使用。內核在啟動時負責對所有PCI設備進行初始化,并配置好所有的PCI設備,包括中斷號以及I/O基址,然后在文件/proc/pci中列出所有找到的PCI設備,以及這些設備的參數和屬性。 Linux驅動程序通常使用結構(struct)來表示一種設備。結構體中的變量代表某一具體設備。該變量存放了與該設備相關的所有信息。 3.2設備驅動程序 本設計中的設備驅動程序也就是USB-Key的驅動,它類似于USB的驅動,其設計思想是在USB驅動上做一個修改和擴充。 首先應獲得LISB-Key的硬件信息,并將其填進USB驅動框架里。 Linux的USB內核系統中提供了與設備驅動程序開發直接相關的核心數據結構,該結構在整個設備驅動程序的框架中起著重大的作用。其中在中定義的數據結構file operation可向內核中的其他部分提供一個統一的標準設備接口。 3.3設備管理程序 設備管理程序分為下面幾個部分: (1)用戶驗證程序User_confirm()。用戶啟動設備時,要求必須插入USB—Key,并輸入用戶名和口令以進行身份認證,通過認證后,設備才能啟動。 (2)獲得USB—Key屬性以及信息的程序Usb—key_get_info()。用戶調用該程序可以獲得USB—Key的基本信息和存儲區間的情況。 (3)對USB-Key的操作程序模塊Usb-key execute(),該模塊主要完成對存儲密鑰的讀寫、更改和刪除操作,并提供相應的管理界面。 (4)安全日志模塊Security_diary(),安全日志可記錄所有的訪問信息,包括成功或不成功。用戶可以通過操作來查看這些信息。 4仿真與測試 本方案可以verilog語言來實現,可選用Xilinx公司的vitex5 lx50T芯片。測試可采用環回方式并通過加密后的數據直接環回至解密模塊,這樣便于數據比較。圖6所示是本設計的FC加密卡的邏輯仿真圖。圖中,rbca為線路輸入時鐘,rxda為線路輸入數據。通常先輸入原語序列以用于建立鏈路,然后輸入命令幀,再提取lun號與讀寫使能,然后輸入數據幀。 對數據幀進行加密后,txda為加密后的數據:txda是數據加密后環回至解密模塊的數據。經過測試,輸入的數據在經過模塊加密處理后,能實現正確的轉發調度以及解密處理,從而實現了預期的目的。 現階段的測試環境包括兩臺PC機,一個HBA卡,一個交換機,一塊ML555開發板。測試時,先將程序生成的bit文件下載到開發板中,再由主機通過PCI-E接口向FPGA寫入加密后的AES密鑰和加密密鑰,然后由HBA卡通過光纖把數據發送到開發板,經過處理后再轉發回HBA卡,最后由HBA卡的指示燈以及chipscope進行數據顯示。該方法能正確的處理數據,并能觀察到明文和密文的區別。 5 結束語 本設計在經過基本的測試后證明:其能實現對類磁盤陣列數據的加密。在加密卡和磁盤陣列中傳輸的靜態數據都是以密文的形式存在。由于密鑰與加密設備是分開管理的,因此,即使被攻擊者*到線路數據或者盜取了磁盤陣列,也無法獲得有用信息,有效的保護了數據。 |