文獻標識碼: A
文章編號: 0258-7998(2015)01-0118-04
中文引用格式:魏漢明,劉文怡,關詠梅,張彥軍,張國佳.基于漢明碼校驗的AES數據加密記錄器設計[J].電子技術應用,2015,41(01):118-121
0 引言
數據記錄器是遙測系統中重要的組成部分,可為飛行器的質量評估及飛行器的技術改進提供數據依據。近些年半導體技術高速發展,固態記錄器以成為飛行記錄器的發展趨勢,在現有的固態存儲介質中,基于NAND技術的非揮發性存儲器Flash(閃速存儲器)以其體積小、功耗低、密度大、編程和擦除速度快、成本低等優點而被廣泛地運用于各個領域[1]。
同時為了防止數據記錄器中的信息被對手截獲,需要對信息進行保密防護,常用的措施為采用加密編碼[2-3]。加密編碼對基于Nand Flash芯片的數據記錄器會產生一個問題。Nand Flash芯片的物理特性使其在使用中有可能出現位翻轉的問題,即在一定的數據塊中產生了一比特的誤碼,這個誤碼經過加密編碼后會引起誤碼擴散。如數據在采集后以16 B分組,經加密編碼后存入Flash芯片中,若在Flash芯片中出現了位翻轉錯誤,那么該位所在的128 b加密數據在解密后一般得不到原來的明文數據,那么原來出現在1 B的誤碼經加密后擴散到了16 B中。由此可見,在加密存儲系統中,對誤碼的控制設計尤為重要。漢明碼的二元線性分組碼中編碼效率高,簡單實用,在分組數據內能實現錯誤檢測和1比特的誤碼糾正[4]。本文將研究數據記錄器的AES加密設計及基于漢明碼的誤碼控制設計。
1 系統方案設計
AES加密數據記錄器主要完成對遙測模擬信號的采集、加密及存儲,同時嵌入漢明校驗碼增強存儲的可靠性;記錄器中存儲的數據最后被讀取至計算機終端,完成解密與分析。記錄器不能與計算機終端直接通信,配套地面測試臺設備是計算機終端與數據記錄器通信的橋梁。在傳統方案中,誤碼的糾錯工作在記錄器中完成,數據從Flash中讀出時首先要在記錄器中緩存,等到誤碼檢測與糾錯工作完成后才能將糾錯后的數據上傳給計算機,這樣會大大降低了數據傳輸速度。本文設計的方案中將糾錯工作交由計算機完成,這樣不僅能檢測和糾正NAND Flash芯片存儲的位翻轉錯誤,減輕了硬件系統的工作量,保證了數據傳輸的速度,而且利用計算機能夠使糾錯工作結果更直觀[5-6]。系統的工作方案如圖1所示。
AES加密數據記錄器以48 kHz的頻率對6路遙測模擬信號進行采樣,然后將量化后的遙測數據分組加密,加密后的數據及生成的漢明校驗碼寫入NAND Flash芯片中。采樣芯片采用ADS8365芯片,單個芯片可并行實現6路差分通道的轉換,有益于小尺寸系統設計;采樣精度可達16 bit。存儲芯片采用三星公司的4 GB容量NAND Flash芯片K9WBG08U1M。整個加密記錄器的系統設計框架如圖2所示。
2 關鍵技術實現
2.1 AES加密算法的FPGA實現
本文采用的密鑰長度為128 b,狀態矩陣由4×4 B組成,則加密的迭代輪數為10,每一輪的步驟為:(1)字節代換(s盒替換),(2)行移位,(3)列混合(最后一輪沒有),(4)輪密鑰加。
字節代換即通過一個非線性的函數,將原有字節替換成對應字節的過程。其實際運算操作為:首先將字節變換到GF(28)域上的乘法逆元,再對字節進行一個仿射變換。字節代換可以簡化為一個簡單的查表操作,AES定義了一個S盒(及逆S盒),S盒是一個由16×16 B組成矩陣,矩陣共有256個元素(字節)。查表時,字節的高4位作為行地址x,低4位作為列地址y,指向S盒的第x行第y列的字節。為了簡化硬件的工作,本文將采用官方S盒,且將S盒內容初始化至FPGA的IP核ROM中。
行移位是一個簡單的左循環移位操作。對4×4的狀態矩陣,第1行不移位,第2行左移1個字節,第3行左移2個字節,第4行左移3個字節即可。
列混合是將狀態矩陣與一固定矩陣相乘,狀態矩陣每一列的更新方式如下式所示:
式中涉及的操作有加法(異或)和乘法,由于乘法在FPGA中直接實現較為復雜,需要將乘法運算轉換為移位和加法運算。在有限域GF(28)上,{02}乘以一字節b(x)=b7×7+b6×6+b5×5+b4×4+b3×3+b2×2+b1×1+b0×0,若該字節的最高位b7為0,則可直接對b(x)在字節內左移1位,最低位補0即可;若最高位b7為1則需在移位后再與{1B}異或。{03}乘以一字節時則將{03}分解為{02}+{01}再進行運算即可。
輪密鑰加即將狀態矩陣與輪密鑰矩陣逐位異或即可。
輪密鑰由初始密鑰經過密鑰擴展操作得來。初始密鑰由用戶制定,長度為128 b,將其輸入到一個4×4的矩陣中,用數組W[i]表示密鑰中的某一列,則初始密鑰可用W[0]、W[1]、W[2]、W[3]4個數據表示;下一輪的擴展密鑰可用W[4]、W[5]、W[6]、W[7]表示……依次,最后一輪的擴展密鑰數據為W[40]、W[41]、W[42]、W[43]。各數組之間的關系為:
(1)若i非4的倍數,則有:
W[i]=W[i-4]⊕W[i-1](5)
(2)若i為4的倍數,則有:
W[i]=W[i-4]⊕T(W[i-1])(6)
式中T相當與一個復雜的函數,其具體的操作為:
①字循環:將自變量循環左移1個字節。如數組[w0,w1,w2,w3]經過字循環變換為[w3,w0,w1,w2]。
?、谧止澊鷵Q:使用S盒對每個字節進行代換。
③輪常量異或:將前兩步的結果與輪常量Rcon[j]進行異或,j表示輪數。輪常數的內容(4個字節)如表1所示,密鑰擴展過程如圖3所示。
用戶定義了初始密鑰后,由密鑰擴展運算就可以得到后續的10輪密鑰。為了簡化硬件工作,密鑰擴展工作可由計算機完成,然后將所有密鑰(共11×16=176 B)作為初始化文件載入FPGA ROM核中。這樣,FPGA對于密鑰的相對操作可簡化為簡單的查表運算。
為了加快執行速度,FPGA程序中采用流水線設計。根據AES加密算法的原理,把程序主要劃分為輪密鑰加、S盒替換、行變換、列混合、加密輸出等5個模塊。各模塊之間設由握手信號進行通信,每個模塊只需完成自己的任務((1)AES加密步驟;(2)輸出指示信號和加密狀態(數據))即可。
2.2 漢明碼校驗設計
漢明碼的FPGA實現較為簡單,首先需要對數據進行分組設計。由于使用的NAND Flash是4 KB每頁的結構,因此將一頁的4 KB數據分為一組。將4 KB數據看成是4 096(行)×8(列)的矩陣,數據在邊寫入Flash時可邊產生漢明校驗碼,完全不影響存數的速度,最終生成12 bit的行奇校驗碼、12 bit的行偶校驗碼、3 bit的列奇校驗碼、3 bit的列偶校驗碼,只需將這總共30 bit的校驗碼寫入Flash當前頁的備用區即可。
行校驗碼與列校驗碼可以看成是獨立的,而奇校驗碼與偶校驗碼是互補的,行校驗碼最終指示出錯的“行”(字節),列校驗碼最終指示出錯的“列”(位),二者相結合最終能定位到整個分組數據中的某一出錯位且糾錯。
為了方便,以列校驗碼的生成做示例。設列奇校驗碼為L_ECCo,列偶校驗碼為L_ECCe,則有:
L_ECCo[2]=byte_n[7]^byte_n[6]^byte_n[5]^byte_n[4]
(n=0,1……4 095)(7)
L_ECCo[1]=byte_n[7]^byte_n[6]^byte_n[3]^byte_n[2]
(n=0,1……4 095)(8)
L_ECCo[0]=byte_n[7]^byte_n[5]^byte_n[3]^byte_n[1]
(n=0,1……4 095)(9)
L_ECCe[2]=byte_n[3]^byte_n[2]^byte_n[1]^byte_n[0]
(n=0,1……4 095)(10)
L_ECCe[1]=byte_n[5]^byte_n[4]^byte_n[1]^byte_n[0]
(n=0,1……4 095)(11)
L_ECCe[0]=byte_n[6]^byte_n[4]^byte_n[2]^byte_n[0]
(n=0,1……4 095)(12)
計算機軟件讀取Flash中的數據時也會按照同樣的方式生成漢明校驗碼,此時設列奇校驗碼為L_ECCo′,列偶校驗碼為L_ECCe′。計算機在數據分析前對數據進行校驗,那么當L_ECCo與L_ECCo′、L_ECCe與L_ECCe′分別完全相等時才認定數據存儲及傳輸正常(這里只以列校驗作說明);若L_ECCo、L_ECCo′、L_ECCe、L_ECCe′ 4個參數的異或結果所有位都為1,那么數據出現了可糾正的錯誤,出錯的位地址由L_ECCo′與 L_ECCo的異或結果表示。
3 實驗結果
為了驗證設計的正確性,對00~FF的循環遞增數據進行加密存儲,數據源如圖4(a)所示。數據加密過程及漢明校驗碼生成程序仿真如圖4(b)所示。加密數據最后以4 KB為單位打包上傳給計算機。
同時,在加密數據上傳到計算機時,故意將數據中的某一位翻轉,如第17 B(Byte16)的第4位(bit3),那么計算機收到的未校驗的加密數據如圖5(a)所示,其中字節“C0”為誤碼字節,直接對圖5(a)數據進出解密,得到數據如圖5(b)所示。數據分析報告稱出現16 B的錯誤。由此可知,由于一個加密字節的位翻轉錯誤,經過解密后擴散到了原16 B的分組數據中。
查看數據的漢明校驗碼,如圖6所示,根據校驗信息對數據進行糾錯,再解密,數據還原正確,如圖7所示,加密數據中第17 B已經由“C0”糾正為“C8”。
4 結論
本文設計并實現了基于FPGA的AES加密存儲器,利用計算機軟件完成部分設計(如密鑰的擴展和S盒的設計)后直接例化到FPGA ROM核中,簡化了硬件設計;同時采用流水線技術,加快硬件加密速度。另外,為了避免由于存儲芯片NAND Flash出現的位翻轉而造成加密系統的誤碼擴散問題,在加密數據寫入存儲器前設計生成了漢明校驗碼,而數據校驗則在計算機中完成,這樣能幾乎不改變硬件數據讀寫速度,同時有效地提高了系統的可靠性。
參考文獻
[1] 王建勛.基于NAND閃存的固態存儲技術研究與實現[D].長沙:國防科學技術大學,2010.
[2] 龔進.AES加密算法在電子系統中的優化及應用研究[D].太原:中北大學,2012.
[3] 陳鐵明,葛亮,蔡家楣,等.TinyTCSec:一種新的輕量級無線傳感器網絡鏈路加密協議[J].傳感技術學報,2011,24(2):275-282.
[4] 陳鐵明,白素剛,蔡家楣.TinyIBE:面向無線傳感器網絡的身份公鑰加密系統[J].傳感技術學報,2009,22(8):1193-1197.
[5] 陳武.NandFlash糾錯碼的設計研[D].杭州:浙江大學,2011.
[6] 辛英.漢明碼糾錯檢錯能力分析與應用[J].鹽城工學院學報:自然科學版,2008,21(1):34.