?

基于漢明碼校驗的AES數據加密記錄器設計*

2015-12-07 06:18魏漢明劉文怡關詠梅張彥軍張國佳
電子技術應用 2015年1期
關鍵詞:校驗碼記錄器漢明

魏漢明,劉文怡,關詠梅,張彥軍,張國佳

(1.中北大學 電子測試國家重點實驗室,山西 太原030051;2.中北大學 儀器科學與動態測試教育部重點實驗室,山西 太原030051;3.北京宇航系統工程研究所,北京100076)

基于漢明碼校驗的AES數據加密記錄器設計*

魏漢明1,2,劉文怡1,2,關詠梅3,張彥軍1,2,張國佳1,2

(1.中北大學 電子測試國家重點實驗室,山西 太原030051;2.中北大學 儀器科學與動態測試教育部重點實驗室,山西 太原030051;3.北京宇航系統工程研究所,北京100076)

以FPGA為硬件設計平臺,實現AES數據加密記錄器,重點講述了AES算法的FPGA實現。利用MATLAB軟件完成算法的密鑰擴展及S盒設計,使其在硬件中的設計簡化為查表操作;整體算法的設計采用流水線技術,提高了加密速度。同時,設計了漢明校驗碼解決由于NAND Flash位翻轉經加密后帶來的誤碼擴散的問題,將最后的糾錯工作設計在計算機上完成,降低對硬件讀數的影響,同時提高了系統的可靠性,該設計具有一定實用價值。

高級加密標準;漢明碼;FPGA;Nand Flash

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

圖1 系統方案框圖

AES加密數據記錄器以 48 kHz的頻率對 6路遙測模擬信號進行采樣,然后將量化后的遙測數據分組加密,加密后的數據及生成的漢明校驗碼寫入NAND Flash芯片中。采樣芯片采用ADS8365芯片,單個芯片可并行實現6路差分通道的轉換,有益于小尺寸系統設計;采樣精度可達16 bit。存儲芯片采用三星公司的4 GB容量NAND Flash芯片K9WBG08U1M。整個加密記錄器的系統設計框架如圖2所示。

圖2 加密記錄器硬件模塊框圖

2 關鍵技術實現

2.1AES加密算法的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的倍數,則有:

(2)若i為4的倍數,則有:

式中T相當與一個復雜的函數,其具體的操作為:

①字循環:將自變量循環左移1個字節。如數組[w0,w1,w2,w3]經過字循環變換為[w3,w0,w1,w2]。

②字節代換:使用S盒對每個字節進行代換。

③輪常量異或:將前兩步的結果與輪常量Rcon[j]進行異或,j表示輪數。輪常數的內容(4個字節)如表1所示,密鑰擴展過程如圖3所示。

用戶定義了初始密鑰后,由密鑰擴展運算就可以得到后續的10輪密鑰。為了簡化硬件工作,密鑰擴展工作可由計算機完成,然后將所有密鑰(共 11×16=176 B)作為初始化文件載入FPGA ROM核中。這樣,FPGA對于密鑰的相對操作可簡化為簡單的查表運算。

表1 10個輪常數

圖3 密鑰擴展

為了加快執行速度,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,則有:

計算機軟件讀取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為單位打包上傳給計算機。

圖4 加密數據源及加密仿真

同時,在加密數據上傳到計算機時,故意將數據中的某一位翻轉,如第17 B(Byte16)的第4位(bit3),那么計算機收到的未校驗的加密數據如圖5(a)所示,其中字節“C0”為誤碼字節,直接對圖5(a)數據進出解密,得到數據如圖5(b)所示。數據分析報告稱出現16 B的錯誤。由此可知,由于一個加密字節的位翻轉錯誤,經過解密后擴散到了原16 B的分組數據中。

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

圖5 加密數據的誤碼擴散

圖6 校驗信息

圖7 數據糾錯及解密還原

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.

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
(1.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)

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.

AES;Hamming code;FPGA;Nand Flash

TH99

A

0258-7998(2015)01-0118-04

10.16157/j.cnki.0258-7998.2014060402031

國家自然科學基金項目(51275491)

2014-11-19)

魏漢明(1988-),男,在讀研究生,主要研究方向:測試計量技術及儀器。

猜你喜歡
校驗碼記錄器漢明
汽車事故數據記錄器數據規范及應用進展綜述
基于Excel實現書號校驗碼的驗證
列車車廂視頻記錄器的應用
媳婦管錢
基于彈載圖像記錄器的壓縮系統設計
基于FPGA的循環冗余校驗碼設計
身份證號碼中的數學
漢明距離矩陣的研究
基于FPGA和NAND Flash的存儲器ECC設計與實現
一種新的計算漢明距方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合