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