馬建鵬,姚智慧,趙明亮
(中國航天科工集團(tuán)二院706所,北京100854)
作為數(shù)據(jù)存儲載體的存儲設(shè)備,如何保證數(shù)據(jù)能夠訪問受控,使得存儲設(shè)備即使在丟失、不受控等狀態(tài)下,依然保證其存儲數(shù)據(jù)不為非法用戶獲取,成為數(shù)據(jù)安全研究的重要內(nèi)容之一。SATA (serial ATA)接口是當(dāng)前主流的串行硬盤接口,具有傳輸速率高、可靠性高、連線簡單等優(yōu)勢。然而由于SATA 協(xié)議實(shí)現(xiàn)復(fù)雜度高和安全技術(shù)硬件實(shí)現(xiàn)比較困難等原因,國內(nèi)只有少數(shù)科研機(jī)構(gòu)展開了基于SATA 接口的安全存儲控制研究,且相關(guān)研究多是基于控制原語和數(shù)據(jù)的完全轉(zhuǎn)發(fā)開展,其實(shí)現(xiàn)較為簡單,不能自主完成對主機(jī)或硬盤的交互,難以快速對傳輸狀態(tài)的變化及異常做出響應(yīng),可靠性較低。本文針對安全存儲自主創(chuàng)新的需求,在深入研究SATA 協(xié)議和信息安全技術(shù)的基礎(chǔ)上,設(shè)計實(shí)現(xiàn)了一種基于SATA 接口的安全存儲控制系統(tǒng)。經(jīng)過FPGA 上的測試,該系統(tǒng)能自主完成對主機(jī)和硬盤的交互,快速處理異常,準(zhǔn)確提取信息,并實(shí)現(xiàn)數(shù)據(jù)加解密和身份認(rèn)證等安全功能。
SATA 協(xié)議體系[1-3]采用典型層次結(jié)構(gòu),分為四層:物理層、鏈路層、傳輸層和應(yīng)用層。物理層負(fù)責(zé)與電氣相關(guān)的特性,主要完成差分信號和OOB信號的收發(fā)、上電復(fù)位及初始化、電源管理、速率協(xié)商、串并/并串轉(zhuǎn)換和數(shù)據(jù)對齊等功能;鏈路層負(fù)責(zé)鏈路上幀的發(fā)送與接收,主要完成通過握手建立和釋放鏈路、幀定界、CRC 校驗(yàn)與生成、沖突仲裁、流量控制、8b/10b編碼與解碼、加解擾等功能;傳輸層負(fù)責(zé)FIS相關(guān)的事務(wù),主要完成FIS的產(chǎn)生與解析、差錯處理和流量控制等功能;應(yīng)用層負(fù)責(zé)各種命令的執(zhí)行以及相關(guān)寄存器的訪問。
本 系 統(tǒng) 實(shí) 現(xiàn) 于Xilinx Virtex-6 系 列[4,5]FPGA。該 系 列FPGA具有先進(jìn)的架構(gòu)和極高的性能,是業(yè)界首批采用40納米級工藝的FPGA。其可提供多達(dá)758,784 個邏輯單元,1200個I/O引腳,具備強(qiáng)大的時鐘管理能力,能夠滿足本系統(tǒng)的資源需求。其中,Virtex-6中的高速串行收發(fā)器RocketIO GTX 包括8b/10b編解碼器、極性控制器、FIFO、CRC模塊、串化/解串器、接收/發(fā)送緩沖器、預(yù)加重模塊、時鐘生成器、時鐘恢復(fù)器等模塊,并具有高效的可配置性和與FPGA 可編程邏輯資源緊密結(jié)合的特點(diǎn),可滿足各種不斷發(fā)展的高速串行協(xié)議的需要。通過調(diào)用RocketIO GTX 模塊,正確的配置模塊參數(shù),可以實(shí)現(xiàn)系統(tǒng)存儲控制模塊中物理層功能模塊的部分功能,從而簡化系統(tǒng)設(shè)計。
本系統(tǒng)橋接于主機(jī)硬盤之間,由存儲控制模塊和加密認(rèn)證模塊兩部分組成[6],如圖1 所示。傳輸鏈路建立后,流經(jīng)系統(tǒng)的信息分為控制原語、加密幀和非加密幀,系統(tǒng)對不同的信息采用不同的處理方式。其中存儲控制模塊即時響應(yīng)控制原語,同時觸發(fā)內(nèi)部狀態(tài)機(jī)的跳轉(zhuǎn);對其它信息,經(jīng)過串并轉(zhuǎn)換、解碼、數(shù)據(jù)提取甄別等操作,將識別出的非加密幀再經(jīng)重新裝幀、編碼、并串轉(zhuǎn)換等操作直接轉(zhuǎn)發(fā),對識別出的加密幀遞交加密認(rèn)證模塊做加密處理。
圖1 系統(tǒng)框架
系統(tǒng)詳細(xì)實(shí)現(xiàn)結(jié)構(gòu)如圖2所示。
2.3.1 存儲控制模塊
存儲控制模塊由物理層子模塊、鏈路層子模塊和路徑選擇子模塊三部分構(gòu)成。其中物理層子模塊和鏈路層子模塊分為主機(jī)端物理層子模塊和鏈路層子模塊,以及設(shè)備端物理層子模塊和鏈路層子模塊,分別用于完成對硬盤和主機(jī)的交互,實(shí)現(xiàn)協(xié)議物理層和鏈路層中規(guī)定功能;路徑選擇子模塊完成對鏈路層子模塊提取數(shù)據(jù)的甄別,決定數(shù)據(jù)是否加密,同時負(fù)責(zé)數(shù)據(jù)緩存和流量控制信號的生成。
(1)物理層子模塊
主機(jī)端物理層子模塊和設(shè)備端物理層子模塊在功能與實(shí)現(xiàn)上基本相同。本系統(tǒng)主要通過完成Xilinx GTX IP核的配置和OOB控制器的設(shè)計2個部分的工作來實(shí)現(xiàn)物理層的相關(guān)功能[7]。
通過使用ISE軟件提供的Core Generator工具配置Xi-
圖2 系統(tǒng)結(jié)構(gòu)
linx Virtex-6FPGA 內(nèi)嵌的硬核GTX 的參數(shù),使其正確完成高速串行比特的發(fā)射和接收、OOB 信號檢測、時鐘數(shù)據(jù)恢復(fù)、時鐘補(bǔ)償、預(yù)加重、去加重、串并/并串轉(zhuǎn)換和極性檢測等功能;同時基于Xilinx提供的數(shù)字時鐘管理器實(shí)現(xiàn)了時鐘輸出和時鐘倍頻;并通過FPGA 的動態(tài)配置端口實(shí)現(xiàn)GTX 模塊屬性的配置。配置如圖3所示。
圖3 GTX 模塊配置
OOB (out of band)信 號 是 一 種 與 正 常 數(shù) 據(jù) 信 號 峰 峰值不同的差分信號,主要用于物理層鏈路的初始化,由數(shù)據(jù)和空閑兩部分組成,并根據(jù)空閑時間的不同分為COMINIT、COMRESET 和COMWAKE 這3 種 類 型。OOB 控制器通過控制OOB信號的發(fā)送接收,完成如圖4所示鏈路初始化過程,來實(shí)現(xiàn)物理層的上電初始化功能。
(2)鏈路層子模塊
主機(jī)端鏈路層子模塊和設(shè)備端鏈路層子模塊僅在幀發(fā)送沖突時的處理上有差異,其它實(shí)現(xiàn)相同。因?yàn)殒溌穼幼幽K的實(shí)現(xiàn)較為復(fù)雜,本系統(tǒng)將其功能實(shí)現(xiàn)部分與控制部分分開實(shí)現(xiàn),簡化設(shè)計。
圖4 物理層上電初始化
鏈路層子模塊的功能主要分為控制原語的收發(fā)、CRC校驗(yàn)和擾碼生成三部分。其中控制原語是用來控制和維持串行鏈路數(shù)據(jù)傳輸狀態(tài)的一系列信息原語,是由4個字節(jié)組成的鏈路層信息字,包括用于幀定界的SOF和EOF、流量控制的HOLD 和HOLDA、接收反饋的R_OK 和R_ERR 等18種原語。CRC 即循環(huán)冗余校驗(yàn),是一種檢錯能力強(qiáng)、計算開銷小、易于編碼實(shí)現(xiàn)的校驗(yàn)算法。在鏈路層子模塊中,通過采用生成多項(xiàng)式G (X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1,對信息幀中的起始原語SOF 和結(jié)束原語EOF 之間所有的有效數(shù)據(jù)進(jìn)行串行CRC 校驗(yàn),來檢測信息的傳輸錯誤。擾碼是在8b/10b編碼基礎(chǔ)上,通過使用線性反饋移位寄存器來實(shí)現(xiàn)擾碼生成多項(xiàng)式G (X)=X16+X15+X13+X4+1,進(jìn)一步調(diào)整連續(xù)的1或0信號,最大程度地避免連續(xù)信號在傳輸過程中所受到的干擾。鏈路層子模塊通過原語的解析、CRC檢測和解擾,以及原語的生成、CRC 生成和加擾等過程,實(shí)現(xiàn)鏈路信息的接收和發(fā)送。
圖5 鏈路層狀態(tài)遷移
鏈路層子模塊使用狀態(tài)機(jī)來控制其功能實(shí)現(xiàn),使鏈路層子模塊能夠正確有序完成一幀數(shù)據(jù)從SOF 原語、數(shù)據(jù)、CRC 到EOF 原語的發(fā)送與接收,正確完成對數(shù)據(jù)部分CRC校驗(yàn)和數(shù)據(jù)加解擾,以及流量控制實(shí)現(xiàn)等。其根據(jù)接收信息以及路徑選擇子模塊的反饋信息來控制發(fā)送與接收時序,并生成差錯管理相關(guān)的控制信號,來實(shí)現(xiàn)對鏈路狀態(tài)的控制。鏈路狀態(tài)機(jī)的狀態(tài)遷移如圖5所示。
(3)路徑選擇子模塊
路徑選擇子模塊處理的數(shù)據(jù)結(jié)構(gòu)在協(xié)議中稱為幀信息結(jié)構(gòu) (frame information structure,F(xiàn)IS),是協(xié)議鏈路層中幀結(jié)構(gòu)去除幀頭、幀尾以及流量控制原語后的信息。該數(shù)據(jù)結(jié)構(gòu)負(fù)責(zé)陰影寄存器 (shadow register)內(nèi)容、ATA 命令、數(shù)據(jù)傳輸?shù)慕⑿畔?、?shù)據(jù)、自測試啟動指令和固定FIS種類值等信息的傳輸。路徑選擇子模塊通過解析FIS頭部的類型 (type)字段,甄別FIS種類,同時界定FIS中數(shù)據(jù)起始位置;而后根據(jù)主機(jī)到硬盤的Register FIS中的命令(command)字段判斷是否加密。若需加密,則寄存其后Data FIS頭部 (head),并將FIS中數(shù)據(jù)部分送入加密認(rèn)證模塊,加密完成后將數(shù)據(jù)與頭部拼接,送至鏈路層子模塊處理;若無需加密,則直接傳送鏈路層子模塊。同時,在FIFO 中緩存FIS數(shù)據(jù),并生成流量控制信號,完成通路上的流量控制。
2.3.2 加密認(rèn)證模塊
加密認(rèn)證模塊由加密子模塊、身份認(rèn)證子模塊和用戶UKey三部分構(gòu)成。其中加密認(rèn)證子模塊負(fù)責(zé)加密數(shù)據(jù)格式的轉(zhuǎn)換和AES 256 算法的實(shí)現(xiàn);身份認(rèn)證子模塊和用戶UKey共同完成用戶的身份認(rèn)證功能。
(1)加密子模塊
AES算法,是一種使用迭代型分組密碼的對稱加密算法,其分組長度和密鑰長度均可在128位、192位和256位中作選擇,如圖6所示是本系統(tǒng)所使用的128位分組長度、256位密鑰AES 算法加解密過程示意圖。256 位密鑰的AES算法使用14輪迭代運(yùn)算,其中前13輪迭代完全相同,依次經(jīng)過字節(jié)替換 (substitute bytes)、行移位變換 (shift rows)、列混合變換(mix columns)和輪密鑰加(add round keys)4 個步驟,而最后一輪迭代則跳過列混合變換。其加密過程是基于4X4的字節(jié)矩陣運(yùn)作的。其中每一輪迭代使用的子密鑰均是原始密鑰通過Key Expansion密鑰擴(kuò)展算法與字節(jié)矩陣共同生成;字節(jié)替換是使用非線性的替換函數(shù),通過查找表的方式將各個字節(jié)替換;行移位變換將矩陣中的各行進(jìn)行循環(huán)移位;列混合變換則通過線性轉(zhuǎn)換混合矩陣中各個直行。在本系統(tǒng)的加密算法實(shí)現(xiàn)中,對密鑰擴(kuò)展運(yùn)算做出優(yōu)化:對運(yùn)算出的各輪次密鑰做緩存,此后使用不再運(yùn)算,直接查找;同時,將算法的迭代過程分為14段,進(jìn)行14級流水操作[8]。
加密子模塊處理的原始數(shù)據(jù),是經(jīng)過8b/10b解碼和數(shù)據(jù)解擾的加密FIS數(shù)據(jù)部分,也是無加密時最終存儲在硬盤上的數(shù)據(jù)。加密子模塊在實(shí)現(xiàn)加密算法前,使用輸入緩存和輸出緩存,完成存儲控制模塊中的32位位寬數(shù)據(jù),與加密算法中的128位位寬數(shù)據(jù),2種不同位寬數(shù)據(jù)格式的轉(zhuǎn)換;同時,使用2個緩存完成由于加解密延遲所產(chǎn)生的流量控制。
圖6 AES算法加解密流程
(2)身份認(rèn)證子模塊和用戶UKey
身份認(rèn)證子模塊和用戶UKey共同完成基于非對稱密鑰體制的雙向身份認(rèn)證。
非對稱密鑰加密是指對信息的加密和解密使用不同密鑰的加密過程,其由一個公開的公鑰和一個私有的私鑰構(gòu)成一對密鑰,且互為唯一解開對方加密數(shù)據(jù)的密鑰。在加密認(rèn)證模塊中,用戶UKey擁有自己的私鑰Kd1和身份認(rèn)證子模塊的公鑰Ke2,模塊擁有自己的私鑰kd2 和用戶UKey的公鑰Ke1,且Kd1、Ke1、Kd2、Ke2 均不公開。用戶UKey對模塊進(jìn)行認(rèn)證時,首先用戶UKey生成一串隨機(jī)數(shù)X,并用自己的私鑰Kd1 對數(shù)據(jù)加密DKd1 (X),然后將密文發(fā)送給模塊,模塊用用戶UKey的公鑰Ke1解密密文EKe1 (DKd1 (X)),再用自己的私鑰Kd2 進(jìn)行加密DKd2 (Eke1 (DKd1 (X))),并返回給用戶UKey,最后用戶UKey用模塊的公鑰Ke2 解密Eke2 (DKd2 (Eke1(DKd1 (X)))),然后與最初生成的隨機(jī)數(shù)X 進(jìn)行對比,如果Eke2 (DKd2 (Eke1 (DKd1 (X))))=X,則說明模塊身份正確,否則不正確。同樣模塊也對用戶UKey進(jìn)行相同的認(rèn)證過程[9]。其中非對稱加密算法的實(shí)現(xiàn),使用第三方提供的芯片完成。
加密子模塊的密鑰存儲于用戶UKey的ROM 中。當(dāng)身份認(rèn)證子模塊和用戶UKey成功完成上述認(rèn)證過程后,用戶UKey將自己私鑰Kd1加密過的密鑰傳輸給身份認(rèn)證子模塊,身份認(rèn)證子模塊將用戶UKey公鑰Ke1解密后的密鑰傳輸給加密子模塊,完成密鑰的傳輸。至此,數(shù)據(jù)通路連通,加密子模塊激活。
本系統(tǒng)經(jīng)過模塊級和系統(tǒng)級仿真,以及Xilinx ML623開發(fā)板的板級驗(yàn)證。其中模塊與系統(tǒng)級仿真使用Mentor公司開發(fā)的主機(jī)行為模型,及實(shí)驗(yàn)室自主研發(fā)的硬盤行為模型構(gòu)成的仿真環(huán)境,并在Synopsys公司的VCS軟件中進(jìn)行了功能仿真;測試環(huán)境由搭載Virtex-6 FPGA 芯片的ML623開發(fā)板,使用SATA 線纜與ML623開發(fā)板相連的SATA 接口硬盤與計算機(jī)A,以及使用JTAG 線纜與ML623開發(fā)板相連的計算機(jī)B構(gòu)成,計算機(jī)B上ISE 軟件通過JTAG 下載線將生成的BIT 文件下載至FPGA 中,輔助Xilinx推出的用于FPGA 產(chǎn)品的Chipscope在線邏輯分析儀工具以及SATA 協(xié)議分析儀,完成系統(tǒng)的板級驗(yàn)證。
如圖7所示為常用DMA 加密命令,WRITE DMA (用于主機(jī)寫入指定扇區(qū)數(shù)據(jù),加密命令)命令的系統(tǒng)仿真。
圖7 加密命令系統(tǒng)仿真
HDTune軟件對系統(tǒng)進(jìn)行的性能測試結(jié)果如圖8所示。
圖8 系統(tǒng)性能對比
本文在深入分析研究SATA 協(xié)議和存儲安全控制技術(shù)的基礎(chǔ)上,提出并實(shí)現(xiàn)了SATA 接口存儲設(shè)備的安全控制技術(shù)設(shè)計,并通過系統(tǒng)仿真,以及基于ML623 開發(fā)板和virtex-6FPGA 芯片的半實(shí)物驗(yàn)證,詳盡的測試和驗(yàn)證了存儲控制、用戶身份認(rèn)證和數(shù)據(jù)加解密等功能,使得存儲安全控制技術(shù)設(shè)計在確保主機(jī)和硬盤正常進(jìn)行存儲數(shù)據(jù)加密、非存儲數(shù)據(jù)正常交互的同時,降低其對主機(jī)與存儲設(shè)備間數(shù)據(jù)傳輸帶寬的影響,提高SATA接口存儲安全控制技術(shù)的可用性。
[1]ANSI INCITS 397-2005,AT attachment with packet interface-7volume 1 [S].
[2]ANSI INCITS 397-2005,AT attachment with packet interface-7volume 2 [S].
[3]ANSI INCITS 397-2005,AT attachment with packet interface-7volume 3 [S].
[4]Xilinx,inc.Virtex-6family overview [EB/OL]. [2012-01-19].http://www.xilinx.com/support/documentation/data_sheets/ds150.pdf.
[5]Xilinx,inc.Virtex-6packaging and pinout specification [EB/OL].[2011-11-23].http://www.xilinx.com/support/documentation/user_guides/ug365.pdf.
[6]LONG Yu.Design of SATA 2.0interface hard disk encryption and decryption chip data path and implementation on FPGA[D].Chengdu:University of Electronic Science and Technology of China,2009 (in Chinese).[龍羽.SATA 2.0硬盤加解密接口芯片數(shù)據(jù)通路的設(shè)計與FPGA 實(shí)現(xiàn) [D].成都:電子科技大學(xué),2009.]
[7]LIU Yang.Physical layer design and system debugging of SATA II interface encryption and decryption chip [D].Chengdu:University of Electronic Science and Technology of China,2009(in Chinese).[劉洋.SATA II加解密接口芯片的物理層設(shè)計與系統(tǒng)調(diào)試 [D].成都:電子科技大學(xué),2009.]
[8]FENG Zhixing.Research and hardware design of AES in mobile memory encryption system [D].Shanghai:Shanghai Jiao Tong University,2009 (in Chinese). [馮志興.AES算法在移動存儲加密系統(tǒng)中的硬件設(shè)計 [D].上海:上海交通大學(xué),2009.]
[9]Douglas R Stinson.Cryptography theory and practice [M].3rd ed.Beijing:Publishing House of Electronics Industry,2009 (in Chinese). [Douglas R Stinson.密碼學(xué)原理與實(shí)踐[M].3版:北京:電子工業(yè)出版社,2009.]
[10]LI Cui,REN Jie,YU Bin.Design and implementation of USB IP core with identity authentication function [J].Journal of Hefei University of Technology (Natural Science),2013,36 (5):580-585 (in Chinese).[李翠,任杰,郁濱.一種具有身份認(rèn)證功能的USB IP核設(shè)計與實(shí)現(xiàn) [J].合肥工業(yè)大學(xué)學(xué)報 (自然科學(xué)版),2013,36 (5):580-585.]