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