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