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