《電子技術(shù)應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于漢明碼校驗的AES數(shù)據(jù)加密記錄器設計
基于漢明碼校驗的AES數(shù)據(jù)加密記錄器設計
2015年電子技術(shù)應用第1期
魏漢明1,2,劉文怡1,2,關詠梅3,張彥軍1,2,張國佳1,2
1.中北大學 電子測試國家重點實驗室,山西 太原030051; 2.中北大學 儀器科學與動態(tài)測試教育部重點實驗室,山西 太原030051; 3.北京宇航系統(tǒng)工程研究所,北京100076
摘要: 以FPGA為硬件設計平臺,實現(xiàn)AES數(shù)據(jù)加密記錄器,重點講述了AES算法的FPGA實現(xiàn)。利用MATLAB軟件完成算法的密鑰擴展及S盒設計,使其在硬件中的設計簡化為查表操作;整體算法的設計采用流水線技術(shù),提高了加密速度。同時,設計了漢明校驗碼解決由于NAND Flash位翻轉(zhuǎn)經(jīng)加密后帶來的誤碼擴散的問題,將最后的糾錯工作設計在計算機上完成,降低對硬件讀數(shù)的影響,同時提高了系統(tǒng)的可靠性,該設計具有一定實用價值。
中圖分類號: TH99
文獻標識碼: A
文章編號: 0258-7998(2015)01-0118-04
中文引用格式:魏漢明,劉文怡,關詠梅,張彥軍,張國佳.基于漢明碼校驗的AES數(shù)據(jù)加密記錄器設計[J].電子技術(shù)應用,2015,41(01):118-121
Design of AES encryption of data recorder with Hamming code for error-check-correct
Wei Hanming1,2,Liu Wenyi1,2,Guan Yongmei3,Zhang Yanjun1,2,Zhang Guojia1,2
National Key laboratory for Electronic Measurement Technology,North University of China,Taiyuan 030051,China; 2.Key Laboratory of Instrumentation Science & Dynamic Measurement of Ministry of Education,North University of China, Taiyuan 030051,China; 3.Beijing Insitute of Astronautical Systems Engineering,Beijing 100076,China
Abstract: Implemented with FPGA, the paper proposes a method to design data recorder with AES encryption, which is simplified with the encryption work partly done by MATLAB that is the key expansion and Subbyte box, and which is accelerated with Pipelining design. Also, Error-Check-Correct scheme is implemented in the system to resistance the error propagation problem and strengthen reliability. The final data correct work is finished on the PC to reduce its influence on the hardware reading speed.
Key words : AES;Hamming code;FPGA;Nand Flash

  

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所示。

001.jpg

  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所示。

002.jpg

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)矩陣每一列的更新方式如下式所示:

  XTLM)E{V[SW0$QSC1TI(S6D.png

  式中涉及的操作有加法(異或)和乘法,由于乘法在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為單位打包上傳給計算機。

004.jpg

006.jpg

  同時,在加密數(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ù)中。

005.jpg

  查看數(shù)據(jù)的漢明校驗碼,如圖6所示,根據(jù)校驗信息對數(shù)據(jù)進行糾錯,再解密,數(shù)據(jù)還原正確,如圖7所示,加密數(shù)據(jù)中第17 B已經(jīng)由“C0”糾正為“C8”。

007.jpg

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.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。