甘志超
(中國刑事警察學(xué)院 公安信息技術(shù)與情報學(xué)院,遼寧 沈陽 110168)
近年來,科技的飛速發(fā)展極大地改變了人們的生產(chǎn)和生活方式,也使我們個人或集體的信息越來越公開化。幾乎生活中的每一個環(huán)節(jié)都面臨著信息數(shù)據(jù)安全性的重大挑戰(zhàn),在確保信息數(shù)據(jù)安全這一要求不斷提高的背景下,對信息數(shù)據(jù)進行加密和解密的技術(shù)及算法正在迅猛發(fā)展。
加密的實現(xiàn)可以通過不同的方式來完成,硬件和軟件皆可實現(xiàn)加密算法,而通過硬件來實現(xiàn)加密同樣能夠保證信息的處理速度和安全性?;贔PGA 平臺的AES 加密算法的實現(xiàn)得益于FPGA 具有消耗內(nèi)存空間小、方便靈活、可重新配置資源等特點,通過算法可以實現(xiàn)加密,通過硬件亦可實現(xiàn)加密,并且相較于基于軟件的AES 加密算法實現(xiàn),基于硬件的AES加密算法實現(xiàn)也不失為一種可行且高效的方式。
本AES 加密算法的設(shè)計采用FPGA 黑金ALINX 開發(fā)板,使用ModelSim-SE 64-10.1c 軟件對該系統(tǒng)的頂層模塊進行了RTL 功能仿真,得到了功能波形圖以驗證其正確性,利用Quartus II 17.1 軟件對整個系統(tǒng)進行邏輯綜合后將sof 文件下載到FPGA 開發(fā)板上,并使用串口調(diào)試助手通過串口通信實現(xiàn)該系統(tǒng)的功能,通過將PC 串口調(diào)試助手顯示屏上顯示的數(shù)據(jù)與測試數(shù)據(jù)做比較,以此來驗證該系統(tǒng)設(shè)計的可行性。
當(dāng)前,對AES 算法的研究主要體現(xiàn)在對其安全性、靈活性、高效性這三方面的研究。
自Rijndael 算法提出以來,世界各國為數(shù)眾多的密碼機構(gòu)和專家便對其展開持續(xù)不斷的猛烈攻擊,其中,最著名的當(dāng)屬該算法設(shè)計者(比利時密碼專家Vincent Rijmen 和Joan Daemen)所提出的Square 攻擊。但是,對Rijndael 算法的攻擊截至目前都沒有成功。
早在AES 加密算法還未著手設(shè)計的時候,方便靈活、安全可靠便已被設(shè)定為其設(shè)計的基礎(chǔ)與目標(biāo),最后結(jié)果也證明,Rijndael算法在通用處理器上能夠?qū)崿F(xiàn)很好的性能。但是,后面的研究漸漸表明,AES 算法在FPGA 上能夠獲得更加優(yōu)越的性能。
在熟悉開發(fā)環(huán)境之后,開始構(gòu)思系統(tǒng)的結(jié)構(gòu)設(shè)計,采用Verilog 硬件描述語言結(jié)合邏輯電路的方式完成系統(tǒng)構(gòu)建。在完成系統(tǒng)的構(gòu)建之后,運用ModelSim SE-64 10.1c 仿真對其核心的加密功能進行仿真,對波形進行驗證之后,我們運用Quartus II 17.1 軟件對工程代碼進行編譯和邏輯綜合,再將生成的.sof 文件下載到FPGA 開發(fā)板上,通過串口調(diào)試助手對其進行功能驗證。
密鑰和明文的位數(shù)不同,AES 加密算法迭代的輪數(shù)也不同。本文采用128 比特的加密方案,下文將具體介紹128 位的AES 加密算法,最后的實現(xiàn)結(jié)果是輸入128 b 的密鑰和明文,一共經(jīng)歷10 輪的迭代加密計算,輸出經(jīng)過加密的128 bit 密文。
AES 加密的過程包括加密核(包括各種轉(zhuǎn)換)和密鑰擴展過程,加密核的各種轉(zhuǎn)換計算包含S 盒變換、行變換、列變換和密鑰異或的變換過程,在128 比特的AES 加密過程中一共需要經(jīng)過10 輪的循環(huán),下一輪的循環(huán)則是在上一輪循環(huán)的基礎(chǔ)上進行迭代。循環(huán)往復(fù)地對上一輪的輸出進行字節(jié)替換(采用一個S 盒進行替換)、行移位變換、列混合變換以及密鑰異或等變換,以產(chǎn)生本輪的輸出。密鑰擴展過程為每一輪的輪變換供給變換所需的128 比特輪密鑰。128 比特的AES 加密算法進行一次完整的計算需要經(jīng)過10 輪的變換,最終產(chǎn)生我們所需的密文。AES 加密算法的流程如圖1所示。
圖1 算法流程圖
該算法的字節(jié)替換用一個S 盒的變換來表示,128 比特的AES 加密算法需要將明文排列組合成一個4×4 的矩陣。AES 加密算法的字節(jié)替換是用一個S 盒實現(xiàn)的,其變換過程就是一個4×4 的矩陣經(jīng)過字節(jié)替換(S 盒變換)之后產(chǎn)生一個新的4×4 矩陣。其本質(zhì)是實現(xiàn)一個數(shù)學(xué)上的代數(shù)轉(zhuǎn)化。S 盒的原理是:S 盒是一個16×16 的矩陣,用明文所生成矩陣的每一個元素來指定S 盒的地址,一個字節(jié)是八位長度的二進制,S 盒的行用一個字節(jié)的前四位表示,列用一個字節(jié)的后四位表示(一個字節(jié)有8 個數(shù)據(jù)位),將四位數(shù)據(jù)所代表的十六進制數(shù)據(jù)作為S 盒元素的行列具體所在位置,由行和列構(gòu)成S 盒位置的元素取代了原明文生成的矩陣中相應(yīng)位置上的元素。本設(shè)計采用組合邏輯電路的方式來實現(xiàn)S 盒變換,并采用16 個S 盒變換函數(shù)對字節(jié)替換進行并行操作。
在進行完S 盒變換操作之后,接下來的操作便是行移位變換。具體的操作就是:對于一個經(jīng)過S 盒變換操作之后的4×4 矩陣來說,首行的數(shù)據(jù)保持不動,對次行的數(shù)據(jù)整體向左移動一位,將第三行的數(shù)據(jù)整體向左移動兩位,將第四行(最后一行)的數(shù)據(jù)整體向左移動三位。例如進行行移位操作之前矩陣的第四行為(1,2,3,4),移動三位之后的數(shù)據(jù)為(2,3,4,1)。
完成行移位變換之后需要進行列混合變換,具體的操作就是以矩陣中的列為單位與固定的矩陣(用十六進制表示)相乘,具體的變換為:
用數(shù)學(xué)的多項式表示是:()=‘03'+‘01'+ ‘01'+‘02'
經(jīng)過列混合變換之后,矩陣中的所有字節(jié)基本上都得到了充分的混合。列混合變換通過組合邏輯中的移位與異或的操作來實現(xiàn),同時加強了加密的安全性。
本設(shè)計采用的是基于FPGA 的128 比特AES 加密算法,可以同時對多個數(shù)據(jù)塊進行計算,一個時鐘周期只完成一輪加密,該設(shè)計總共需要1 輪的初始密鑰擴展、10 輪的運算和另外一個時鐘周期輸出最后得到的密文,由于采用的是內(nèi)部流水線結(jié)構(gòu),所以一個完整的AES 加密過程所需的時鐘周期更長,總共需要12個時鐘周期(從開始到最后輸出密文),我們可以通過提高時鐘頻率的方式來彌補現(xiàn)階段的不足。
本文設(shè)計的AES 加密系統(tǒng)包括以下兩個模塊:
(1)串口通信輸入模塊。通過串口通信接收PC 端輸入的128 位密鑰和明文,并對所接收的128 位數(shù)據(jù)進行串行數(shù)據(jù)向并行數(shù)據(jù)的轉(zhuǎn)換。
(2)AES 加密模塊。該模塊的功能是實現(xiàn)密鑰的擴展過程和加密運算。
(3)串口通信輸出模塊。用于暫存加密單元產(chǎn)生的密文,進行并行數(shù)據(jù)向串行數(shù)據(jù)的轉(zhuǎn)換并通過串口通信傳輸?shù)絇C 端。
AES 加密系統(tǒng)RTL 邏輯模塊結(jié)構(gòu)圖如圖2所示。
圖2 AES 加密系統(tǒng)RTL 邏輯模塊結(jié)構(gòu)圖
頂層模塊輸入輸出端口的定義如表1所示。
表1 輸入輸出端定義
該系統(tǒng)功能實現(xiàn)的過程為:定義好時鐘、復(fù)位、控制信號,運用串口調(diào)試工具通過串口通信在電腦PC 端口輸入128 位待加密的明文和初始密鑰,設(shè)計了一個標(biāo)志信號表示輸入完成的狀態(tài),標(biāo)志信號有效時,串口通信輸入模塊讀取電腦PC 端傳送過來的明文和初始密鑰,AES 加密核模塊開始進行密鑰擴展和加密的工作,經(jīng)過10 輪循環(huán)(一個完整的循環(huán)變換)完成加密之后,經(jīng)過加密的密文數(shù)據(jù)將通過串口通信輸出模塊(通過串口通信)返回到電腦PC 端上的串口調(diào)試工具進行顯示。整個設(shè)計的核心便是AES 加密核的設(shè)計,同時FPGA 與PC 的串口通信也是整個設(shè)計中至關(guān)重要的一部分,決定著數(shù)據(jù)在PC 與FPGA 之間能否正常通信。
該系統(tǒng)設(shè)計的算法代碼分為頂層模塊和子模塊,頂層模塊為整個系統(tǒng)的架構(gòu),子模塊為實現(xiàn)各個分支功能的模塊,AES 加密系統(tǒng)頂層模塊代碼程序存放于AES_top,串口通信輸入模塊代碼程序存放于UART_RX,串口通信輸出模塊代碼程序存放于UART_TX,加密核模塊存放于aes_cipher_top,加密模塊調(diào)用了S 盒變換、列異或變換和密鑰擴展等子模塊,被調(diào)用的各種變換的代碼程序另外儲存。
在進行加密模塊功能仿真的時候,采用的測試數(shù)據(jù)為:明文為9798c4640bad75c7c3227db910174e72;密鑰為00000 000000000000000000000000000;輸出的密文為a9a1631bf49 96954ebc093957b234589。(該數(shù)據(jù)由AES 高級加密標(biāo)準(zhǔn)的資料所提供)
AES 系統(tǒng)加密核的功能仿真波形如圖3所示。
圖3 加密核的功能仿真波形圖
得到輸出結(jié)果之后,為了驗證輸出結(jié)果的正確性,我們需要獲取經(jīng)過AES 加密計算出的數(shù)據(jù),于是采用AES 加密的軟件Rijindael.exe 得到所需的數(shù)據(jù)進行數(shù)據(jù)比對,以驗證本文設(shè)計算法的正確性與可行性,如圖4所示。
圖4 實測數(shù)據(jù)驗證圖
通過對比輸出結(jié)果和測試數(shù)據(jù),得出所設(shè)計的AES 加密系統(tǒng)得出的數(shù)據(jù)與測試數(shù)據(jù)相一致,基于FPGA 的AES加密算法的功能實現(xiàn)準(zhǔn)確無誤。
本文主要介紹了基于FPGA 平臺的AES 加密算法的實現(xiàn),運用Verilog 硬件描述語言結(jié)合邏輯電路的方式來完成系統(tǒng)構(gòu)建。信息技術(shù)的進步和發(fā)展超乎人們的想象,而信息的安全性和秘密性自然也受到人們的高度重視,應(yīng)用范圍不僅僅局限于民生領(lǐng)域,更與國家的政治、經(jīng)濟和軍事安全聯(lián)系緊密。而對于信息加密,自20世紀(jì)以來諸多學(xué)者已經(jīng)提出不少加密方法,AES 加密算法一直以來都表現(xiàn)突出,受到反復(fù)的攻擊仍然屹立不倒。AES 加密算法的實際應(yīng)用場景十分廣闊,為信息安全提供了重大保障,為信息安全的發(fā)展奠定了堅實的基礎(chǔ)。