文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2015.11.009
中文引用格式: 王善明,嚴迎建,郭朋飛,等. 基于國產(chǎn)SOC的數(shù)據(jù)加密存儲系統(tǒng)設計[J].電子技術應用,2015,41(11):34-37.
英文引用格式: Wang Shanming,Yan Yingjian,Guo Pengfei,et al. Design of data encryption and storage system based on domestic SOC[J].Application of Electronic Technique,2015,41(11):34-37.
0 引言
現(xiàn)在市面上有很多的數(shù)據(jù)加密產(chǎn)品,按照加密方式主要分為軟件加密和硬件加密。軟件加密的特點是:成本低、效率低、安全性低。硬件加密的特點是:成本高、效率高、安全性高。但是很多硬件加密產(chǎn)品的可擴展性比較差、沒有豐富的外圍接口。另外,如果要將數(shù)據(jù)加密產(chǎn)品應用于軍事、政府等敏感部門,國外的產(chǎn)品不可信,而國內(nèi)產(chǎn)品可選擇范圍又比較小。
由于經(jīng)濟和政治等多方面數(shù)據(jù)安全的重要性,最近幾年國家大力支持國產(chǎn)IC的研發(fā)與推廣。在此背景下,本單位研發(fā)了一款具有自主知識產(chǎn)權的密碼SOC(System On Chip)芯片HX680。該芯片最主要的特點是內(nèi)部集成了一個具有完全自主知識產(chǎn)權的協(xié)處理器,具有對稱和非對稱密碼服務功能。該芯片還有相對比較豐富的外圍接口,可以進行擴展和外部通信。
SD卡作為存儲設備,具備很多其他存儲設備沒有的特點,如體積小、功耗低、容量大等[1],其應用范圍日益擴展,因此在本設計中使用SD卡作為存儲設備。FatFs是一個為小型嵌入式系統(tǒng)設計的通用FAT系統(tǒng)模塊,具有開源、不依賴于平臺、易于移植、代碼和工作空間非常小等特點,作為本設計的文件系統(tǒng)是一個很好的選擇[2]。
主控芯片內(nèi)部沒有集成實時時鐘(Real-Time Clock,RTL),需通過外掛時鐘芯片DS3231來解決文件系統(tǒng)獲取時間信息的問題。主控芯片沒有時鐘芯片DS3231需要的I2C通信接口,需通過GPIO口的模擬來實現(xiàn)。
1 系統(tǒng)硬件設計
HX6801具有完全的自主知識產(chǎn)權,集成了國產(chǎn)32 位RISC結(jié)構嵌入式處理器CK520[3],具有專用軟件集成開發(fā)環(huán)境和可擴展指令。協(xié)處理器具有硬件資源可配置、功能單元可重構、高性能、二次開發(fā)簡便靈活等特點,HX6801適用于數(shù)字簽名與身份認證、存儲保護、數(shù)據(jù)傳輸、嵌入式控制等多種領域。系統(tǒng)采用HX6801作為主控芯片,SD作為存儲設備,由DS3231提供文件系統(tǒng)需要的時間信息。HX6801芯片總體架構如圖1所示。
1.1 DS3231接口電路
DS3231是一款高精度I2C RTC器件,具有集成的溫度補償晶體振蕩器(TCXO)。該器件包含電池輸入端,斷開主電源時仍可保持精確計時。集成的晶體振蕩器可提高器件的長期精確度。DS3231的寄存器能保存秒、分、時、星期、日期、月、年和鬧鐘設置等信息。少于31天的月份,可自動調(diào)整月末日期,包括閏年補償。時鐘的工作格式為24小時或帶AM/PM指示的12小時格式。DS3231與主控芯片通過I2C雙向串行總線傳輸?shù)刂放c數(shù)據(jù)。DS3231的年誤差小于1分鐘[4]。
主控芯片HX6801沒有I2C接口,所以使用GPIO口模擬I2C的時序,DS3231接口電路如圖2所示,圖中工作電壓VCC的工作范圍是2.3 V~5.5 V,典型的工作電壓為3.3 V,TR表示信號SDA和SCL的上升時間,CB表示總線負載電容。
1.2 SD卡接口電路
SD卡支持SD模式和SPI模式兩種通信模式。在綜合考慮速度和設計復雜度的基礎上,本設計選用SPI通信模式。SPI通信模式只需要將片選引腳、數(shù)據(jù)輸入引腳、數(shù)據(jù)輸出引腳、時鐘引腳與主控芯片上對應的引腳連接即可[5]。
2 軟件設計
軟件部分采用了分層設計。主要包括4個部分:應用層、加/解密層、文件系統(tǒng)層、硬件驅(qū)動層(包括DS3231驅(qū)動程序和SD卡驅(qū)動程序)。應用層用來產(chǎn)生需要加密及解密的數(shù)據(jù);加/解密層主要依據(jù)密碼算法編程手冊及編程工具,采用專用的密碼指令編寫相應的密碼算法并配置協(xié)處理器;文件系統(tǒng)層主要實現(xiàn)FatFs文件系統(tǒng)的移植;硬件驅(qū)動層主要實現(xiàn)對最底層硬件的控制。層次結(jié)構如圖3所示。
2.1 加解密層
可重構安全算法協(xié)處理器遵循了超長指令字的計算機體系結(jié)構,針對密碼運算,提取了密碼算法共性邏輯,提出并設計具有指令級可重構能力的專用指令系統(tǒng)和具有指令級并行處理能力的協(xié)處理器體系結(jié)構。該協(xié)處理器具有對稱和非對稱密碼服務功能;具有專用密碼處理指令,支持密碼算法軟件編程,能夠靈活實現(xiàn)分組密碼、序列密碼與對稱密碼算法;可動態(tài)加載算法程序、參數(shù),實現(xiàn)密碼算法的重構與更換。下面以高級加密標準(Advanced Encryption Standard,AES)算法為例,介紹完整的算法處理流程,如圖4所示。
2.2 文件系統(tǒng)層
FatFs是一個專門為小型嵌入式系統(tǒng)而設計的Fat文件系統(tǒng),完全兼容ANSIC,而且不依賴于任何的平臺。 FatFs的設計像很多軟件一樣采用了分層設計[6],最頂層的應用層為用戶提供了操作底層硬件的API接口函數(shù);中間層實現(xiàn)FatFs文件系統(tǒng)的協(xié)議;最底層是和具體的硬件相關的模塊,需要用戶編寫代碼。
FatFs移植包括SD卡disk I/O編寫,RTC時鐘函數(shù)編寫,interger.h文件中數(shù)據(jù)類型和工程中數(shù)據(jù)類型的匹配,ff.h中條件編譯的配置[6]。
FatFs支持Fat12、Fat16、Fat32文件系統(tǒng)。Fat32文件系統(tǒng)將SD卡劃分為4個連續(xù)的邏輯結(jié)構:主引導記錄、磁盤操作系統(tǒng)引導記錄、文件分配表、數(shù)據(jù)區(qū)。
主引導記錄(Master Boot Record,MBR)讓硬盤具備可以引導的功能。
分區(qū)表(Disk Partition Table,DPT)用來表示磁盤可以分多少個分區(qū)。DPT部分共有64 B,DPT1~DPT4代表4個分區(qū),每個分區(qū)16 B。
磁盤操作系統(tǒng)引導記錄(DOS Boot Record,DBR)包含了文件系統(tǒng)相關的詳細信息。
磁盤分區(qū)的數(shù)據(jù)區(qū)空間是以簇為單位尋址的。簇的大小一般是2N個扇區(qū)(本設計中N=3),一個文件可以占用多個簇,有可能同一個文件占用的簇是不連續(xù)的,這就體現(xiàn)了FAT的價值。FAT就是用于存儲文件占用的所有簇的序號。Fat32和Fat12、Fat16的一個重要區(qū)別就是根目錄(File Directory Fable,F(xiàn)DT)是數(shù)據(jù)區(qū)的一個子集,被當成文件對待[7]。
DPT、DBR、FAT及數(shù)據(jù)區(qū)四個區(qū)域首地址之間存在一定的邏輯關系,如圖5所示。邏輯推導過程如下:
DBR_ADDR=135sector*512byte/sector=0x10e00
FAT_ADDR= DBR_ADDR +38sector*512
byte/sector=0x15a00byte
DATA_ADDR=FAT_ADDR+2*3761sector/FAT*512byte/
sector=0x3c1e00byte
數(shù)據(jù)區(qū)第3簇首地址
DATA_CLUSTER_ADDR=DATA_ADDR+(3-2)*8sector/cluster*512byte/sector=0x3c2e00byte
文件、文件分配表、文件目錄、數(shù)據(jù)區(qū)的簇之間的關系決定了文件的存儲方式。如圖6所示,兩個文件對應FAT表中兩個鏈表0x00000004-0x00000007-0x00000001-0xFFFFFFFF(file1)和0x00000005-0x00000003-0x00000008-0xFFFFFFFF(file2)。
2.3 DS3231驅(qū)動
DS3231芯片采用I2C作為通信接口,設計中用GPIO口模擬I2C時序。I2C總線上傳輸?shù)牡刂穾L度為9位,它包括7個地址位、1個R/W位和1個應答位。如果R/W為1,則執(zhí)行讀操作,如果R/W為0,則執(zhí)行寫操作。I2C總線上傳輸?shù)臄?shù)據(jù)幀長度為9位,它包括8個數(shù)據(jù)位,1個應答位。
DS3231寄存器地址為00H~12H,數(shù)據(jù)在寄存器中的存儲格式為BCD碼,每個存儲單元大小為1 B。DS3231的寄存器00H~06H存儲時間信息[8],存儲格式如表1所示。DS3231的操作主要包括時間的讀和寫如圖7所示。
FatFs系統(tǒng)中時間對應的數(shù)據(jù)結(jié)構存儲在一個32位的無符號整數(shù)當中,數(shù)據(jù)存儲格式如表2。時間信息從DS3231存儲格式到FatFs存儲格式要經(jīng)過從BCD碼到十進制數(shù)的轉(zhuǎn)換。
2.4 SD卡驅(qū)動
SD卡經(jīng)過多年的發(fā)展,經(jīng)歷了好幾次升級,如果驅(qū)動程序要兼容各個版本,就要考慮到各個版本的特殊性,從初始化流程圖可以看出版本1.x和2.0在初始化階段的不同點。SD卡根據(jù)容量的大小可分為不同的等級,2 GB以內(nèi)(包括2 GB)稱為標準卡,大于2 GB小于等于32 GB稱為大容量卡,不同等級的卡操作細節(jié)也不盡相同。SD卡在初始化階段會判斷是否支持大容量卡[4]。
SD卡的驅(qū)動主要包括SD卡的初始化及數(shù)據(jù)塊的讀寫等幾個部分。SD卡的SPI模式初始化流程如圖8所示。
從流程圖可以看出,該設計對SD卡2.0版本向上兼容,同時支持大容量SD卡。SD卡上電的時候默認的是SD模式,當主控芯片發(fā)送復位命令(CMD0)的時候,保持片選信號足夠的時鐘周期(74個以上),SD卡可以進入SPI模式。CMD8命令向SD卡發(fā)送接口狀態(tài)(主控芯片提供的電壓是否滿足SD卡的需求),ACMD41向SD卡發(fā)送主控芯片支持的SD卡容量并獲取相應的回復。CMD58命令獲取SD卡操作狀態(tài)寄存器(Operating Condition Register,OCR)的值并讀取CCS位(Card Capacity Status)判斷是否支持大容量的SD卡。
SPI模式支持塊讀(CMD17)和多塊讀(CMD18)操作。SD卡接受到有效的讀取命令后,要回復一個應答信號和相應的數(shù)據(jù)。需要注意的是,標準容量的卡讀取的數(shù)據(jù)長度可以通過CMD16來設定(大小為1 B到512 B之間),大容量卡的數(shù)據(jù)長度固定為512 B。SPI模式同樣支持塊寫(CMD24)和多塊寫(CMD25)操作,數(shù)據(jù)長度要求同讀要求相同。每個數(shù)據(jù)塊開始都應該有1個塊起始位(大小為1位)。其中讀操作采用的是命令(主機)-應答(SD卡)-數(shù)據(jù)(SD卡)的模式讀取數(shù)據(jù)。寫操作采用的是命令(主機)-應答(SD卡)-數(shù)據(jù)(主機)-應答(SD卡)的模式。
3 測試結(jié)果
協(xié)處理器的性能及接口的速度是影響本設計的關鍵,鑒于各種密碼算法自身的特點,處理器表現(xiàn)的性能有所差別,經(jīng)測試以下幾種算法性能如表3所示。
在將主控芯片的外設總線(Advanced Peripheral Bus,APB)設為40 M的情況下,加密并存儲10 MB的數(shù)據(jù)需要的時間為3.4 s,讀取并解密10 MB的數(shù)據(jù)需要的時間為3.9 s。
4 結(jié)論
經(jīng)過多方面的理論分析和實驗驗證,本設計可以很好的實現(xiàn)數(shù)據(jù)的加/解密及數(shù)據(jù)的存儲。在試驗中可注意到,系統(tǒng)在處理大批量數(shù)據(jù)的時候效率不是太理想。所以為了進一步優(yōu)化性能,下一步將研究如何優(yōu)化加密算法,在SD卡及主控芯片允許頻率范圍內(nèi),盡可能提高APB時鐘頻率。
參考文獻
[1] 蘇義鑫,程敏,何力.基于AT89C52單片機的SD卡讀寫設計[J].世界電子元器件,2008(5):65-68.
[2] 陳祖爵,蔣仕俊.智能遙控器SD卡文件系統(tǒng)的設計與實現(xiàn)[J].計算機工程與設計,2007(10):4716-4718.
[3] 陽曄.面向嵌入式處理器的代碼壓縮研究[D].杭州:浙江大學,2007.
[4] DS3231 Extremely Accurate I2C-IntegratedRTC/TCXO/.[DB/OL].http://www.Maximintegrated.com/cn/prod-ucts/digital/real-time-clocks/DS3231.html#popuppdf.
[5] 葛建,董浩斌,鄭海兵.嵌入式SD卡存儲器的設計[J].電子技術應用,2010(5):139-142.
[6] 程小燕.嵌入式STM32F107VCT6微處理器接口模塊開發(fā)及應用研究[D].合肥:合肥工業(yè)大學,2012.
[7] 劉思伽.基于SD卡的數(shù)據(jù)恢復技術研究[D].成都:電子科技大學,2010.
[8] Secure digital card product manual revision 1.7 9/2003[DB/OL].http://wenku.baidu.com/view/9d1fb307cc175527072208e7.html.