基于FPGA 的AES 加密算法的高速實(shí)現(xiàn)
摘要:介紹AES 算法的原理以及基于FPGA 的高速實(shí)現(xiàn)。結(jié)合算法和FPGA 的特點(diǎn),采用查表法優(yōu)化處理了字節(jié)代換運(yùn)算、列混合運(yùn)算。同時(shí),為了提高系統(tǒng)工作速度,在設(shè)計(jì)中應(yīng)用了內(nèi)外結(jié)合的流水線技術(shù),并應(yīng)用Altera 公司的開發(fā)工具及芯片進(jìn)行實(shí)際開發(fā)。
1 引言
隨著信息技術(shù)的迅速發(fā)展,信息已成為當(dāng)今社會(huì)的一種重要資源。但當(dāng)人們享受信息資源帶來(lái)的巨大便利的同時(shí),也承受著信息被篡改、泄漏、偽造的威脅,安全問題日益嚴(yán)重。安全風(fēng)險(xiǎn)制約著信息的有效使用,信息安全對(duì)現(xiàn)代社會(huì)健康有序的發(fā)展,保障國(guó)家安全和社會(huì)穩(wěn)定有著重要作用。加密技術(shù)是信息安全技術(shù)的核心,是保證信息資源安全的關(guān)鍵。
高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard, AES)作為傳統(tǒng)對(duì)稱加密算法標(biāo)準(zhǔn)DES 的替代者,由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所(NIST)于1997 年提出征集該算法的公告,2000 年最終選定了Rijndael 算法,并于2001 年正式發(fā)布了AES標(biāo)準(zhǔn)[1]。Rijndael 算法本質(zhì)上是一種對(duì)稱分組密碼體制,該算法匯聚了安全性能、效率、可實(shí)現(xiàn)性和靈活性等優(yōu)點(diǎn),已經(jīng)成為工業(yè)界、銀行業(yè)、政府部門的事實(shí)上的密碼標(biāo)準(zhǔn)[2]。
隨著網(wǎng)絡(luò)傳輸速度的快速提升,業(yè)界對(duì)算法的執(zhí)行速度的要求也越來(lái)越高,基于軟件的密碼算法便顯得性能不足,需要采用硬件加密的方式。另外,用硬件實(shí)現(xiàn)加密算法具有較更高的物理安全性。而FPGA 芯片兼有硬件的安全性和高速性以及軟件的靈活性和易維護(hù)性,從而成為研究和實(shí)現(xiàn)AES 算法的理想硬件平臺(tái)。
2 AES 加密算法簡(jiǎn)介
AES 是一種分組迭代密碼,明文分組長(zhǎng)度固定為128 b,而且僅支持128,196 或256b 的密鑰長(zhǎng)度,本文著重對(duì)密鑰長(zhǎng)度為128 b 的情況進(jìn)行討論。AES 加密算法的實(shí)現(xiàn)流程如圖1 所示,將輸入的明文填入一個(gè)4X4 的矩陣(16 進(jìn)制),并將其稱為狀態(tài)矩陣。算法的前round-1 輪包含四種變換,分別是:字節(jié)替換、輪密鑰加、行移位、列混合。對(duì)于每一輪,都有對(duì)應(yīng)的子密鑰。子密鑰由初始密鑰通過密鑰擴(kuò)展得到。最后一輪由字節(jié)替換、行移位和輪密鑰加組成。AES 解密過程為上述過程的逆過程。
字節(jié)替換:字節(jié)替換(SubBytes)是一個(gè)基于S 盒的非線性置換,它通過一個(gè)簡(jiǎn)單的查表操作將輸入或中間狀態(tài)的每一個(gè)字節(jié)映射為另一個(gè)字節(jié)。查表的方法為:將輸入字節(jié)的高4 位作為S 盒的行值,低4 位作為列值,然后取出S 盒中對(duì)應(yīng)行和列的元素作為輸出。
行移位:行移位(ShiftRows)完成基于行的循環(huán)移位操作。具體的操作為:第0 行不動(dòng),第1 行循環(huán)左移1 個(gè)字節(jié),第2 行循環(huán)左移2 個(gè)字節(jié),第3 行循環(huán)左移3 個(gè)字節(jié)。
列混合:列混合(MixColumns)是對(duì)狀態(tài)矩陣中的列做線性變換,進(jìn)行四字節(jié)乘運(yùn)算。具體定義如下:將狀態(tài)矩陣的列看作有限域G(28)上的多項(xiàng)式,并在模x4+1 下與一個(gè)給定的多項(xiàng)式c(x)相乘,其中c(x)=03x3+01x2+01x+02。假設(shè)該步變換狀態(tài)的一列輸入為a,輸出為b,即b(x)=c(x)·a(x)mod(x4+1)。
密鑰加:密鑰加(AddRoundKey)是將輪密鑰的各字節(jié)和狀態(tài)矩陣中相應(yīng)位置的字節(jié)分別模2 加,實(shí)現(xiàn)狀態(tài)和密鑰的混合。輪密鑰的長(zhǎng)度和狀態(tài)的長(zhǎng)度是一樣的。該步驟的逆變換是其自身[3]。
3 算法實(shí)現(xiàn)的優(yōu)化
3.1 對(duì)算法本身的優(yōu)化
用查找表和組合邏輯的方式代替了復(fù)雜的乘法運(yùn)算[3],大大減少了芯片資源的占用,提高了加、解密步驟的執(zhí)行速度。字節(jié)替換是 Rijndael 密碼中唯一的非線性變換。該步驟是一種非線性面向字節(jié)的變換,是將一個(gè)8 位二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為另一個(gè)不同的8 位二進(jìn)制數(shù)據(jù),這里要求一一對(duì)應(yīng),并且替換結(jié)果不能超出8 位,可以通過構(gòu)造可逆的S-盒來(lái)實(shí)現(xiàn)。
由于有限域GF(2)中總共有256 個(gè)元素,則可預(yù)先通過一定的算法計(jì)算出每個(gè)元素的逆元,再進(jìn)行對(duì)應(yīng)的仿射變換求出有限域GF(28)中每個(gè)元素經(jīng)過字節(jié)代換后所對(duì)應(yīng)的值,并將這個(gè)計(jì)算出的替代值寫入一個(gè)16×16 字節(jié)的置換表中相應(yīng)的位置作為步驟SubBytes 的S-盒。具體實(shí)現(xiàn)時(shí),根據(jù)狀態(tài)的每一個(gè)字節(jié)的數(shù)值檢索出S-盒中對(duì)應(yīng)的替代值,即通過查表即可實(shí)現(xiàn)該步變換,避免復(fù)雜的乘法運(yùn)算[4]。
對(duì)于列混合變換,由于GF(28)有限域中的每一個(gè)元素都能夠?qū)懗?2 的不同冪次的和,因此,乘以任何常數(shù)的乘法都可以通過反復(fù)的乘以02 和異或運(yùn)算來(lái)實(shí)現(xiàn)??蓪⒕仃嚦朔ㄖ械某?shù)因子分解為 02 的不同冪次和,矩陣乘法轉(zhuǎn)換為與02 的乘法和異或運(yùn)算。將GF(28)域中的每一個(gè)元素與02 的乘積存儲(chǔ)在一張16×16 字節(jié)查找表中,記作xtime(·)。所以,該步驟可以通過查表和異或運(yùn)算實(shí)現(xiàn)。
3.2 加密模塊結(jié)構(gòu)的優(yōu)化
加密模塊結(jié)構(gòu)直接影響 AES 算法的加解密速度,AES 算法加解密系統(tǒng)的速度是指單位時(shí)間內(nèi)完成的加密(解密)的比特?cái)?shù),也稱為吞吐量(throughput),單位為兆比特每秒(Mbit/s)。其基本結(jié)構(gòu)可分為以下三種:外部流水線結(jié)構(gòu)、內(nèi)部流水線結(jié)構(gòu)和循環(huán)展開結(jié)構(gòu)[5]。其中循環(huán)展開結(jié)構(gòu)的速度是以芯片面積增加為代價(jià)的,而外部流水線結(jié)構(gòu)和內(nèi)部流水線結(jié)構(gòu)在反饋模式中速度受到限制,面積的增加并不能增加速度,所以這兩種結(jié)構(gòu)只適用于非反饋模式。內(nèi)部流水線結(jié)構(gòu)的速度在非反饋模式下隨著內(nèi)部流水線站數(shù)的增加而增加,但面積的相應(yīng)增長(zhǎng)極小,具有很好的速度面積比。但在反饋模式下其速度面積比不具優(yōu)勢(shì)。因此,在外部應(yīng)用流水線結(jié)構(gòu)設(shè)計(jì)的同時(shí),在內(nèi)部劃分流水線站,可以在外部流水線結(jié)構(gòu)的速度基礎(chǔ)上進(jìn)一步提高速度,而面積的增長(zhǎng)極小,從而提高吞吐量和速度面積比?;谝陨戏治?,在本設(shè)計(jì)中采取了非反饋模式和內(nèi)外混合的流水線結(jié)構(gòu)。
4 硬件測(cè)試及應(yīng)用
本設(shè)計(jì)采用 ALTERA 公司的開發(fā)工具QuartusII,以VerilogHDL 為實(shí)現(xiàn)語(yǔ)言,在綜合仿真并測(cè)試無(wú)誤后,下載至ALTERA 公司的Cyclone 系列芯片上。該系列芯片具有相當(dāng)?shù)男詢r(jià)比,非常適合于大批量、低成本的應(yīng)用本設(shè)計(jì)方案。本設(shè)計(jì)既可以作為單獨(dú)的專用加密芯片完成加密任務(wù),也可以嵌入到復(fù)雜的數(shù)字系統(tǒng)中。具有非常廣闊的應(yīng)用市場(chǎng)。
參考文獻(xiàn):
[1].NISTdatasheethttp://www.dzsc.com/datasheet/NIST_2562226.html.
來(lái)源:lele0次