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