|
高變異性AES系統-使用可重組性功能核心產生器
義守大學 資訊工程系
指導者:金明浩 教授
學生:劉羽、許佳豪、陳建宏 |
| | |
設計目的:提高AES系統安全性 密碼學的應用在通訊上或資訊安全上是必備的,而AES(Advanced Encryption System)於2000年十月的國際標準技術學會NIST(National Institute of Standard and Technology)上宣布為對稱式加密演算法的標準,採用Rijndael所提的架構,其中的運算模組均建立於有限體(Finite Field)數學上,編碼包含了SubBytes、ShiftRows、MixColumns、AddRoundKey、KeyExpansion五個模組,而也有相對應的解碼模組,在SubBytes及KeyExpansion模組上必須使用到查表(Look-up Table)的方式運作,該表格稱為S-box,一個S-box必須使用256×8 bits記憶體空間。
本作品提出一個彈性的架構,除了包含原AES規格外,更加入額外輸入可變化的Irreducible Polynomial、Affine Transform Matrix及Round Number三種參數,使系統的架構因參數而改變,增強AES的彈性度及變異性,即使是金匙被竊取亦不能直接破解,預估其變異性提昇一千多萬倍。本設計需要軟硬體共同設計和大量的動態表格,正好可以利用SOPC架構,快速實現高變異性AES系統於FPGA上。
利用SOPC Builder快速架構系統,只需要設定一些參數,便可產生所需的NiosII控制元件以供開發,而且Nios II微處理器為RISC核心,可以和各式各樣的週邊設備、自定指令及硬體加速單元做結合,包括了算術邏輯運算、位元(組)操作、資料轉移、流程控制、條件指令…等,軟體設計者只要懂C或C++語言就可撰寫程式;本項作品將加入有限體數學為基礎的基本元件,搭配軟體而建立高速的計算器和功能模組,進而以自定指令(Custom Instruction)執行特殊功能,更以整合發展環境(IDE)建構在GNU C/C++組譯器和Eclipse IDE下,設計者可以進行開發,並立即在發展板上做驗證,相當匹配本作品的需求,故選用之。 |
|
|
設計概念 我們使用「軟硬體共同設計 (Co-design)方法」快速完成AES軟體與硬體資料之間的測試平台,準確掌握AES硬體建構及各模組設計控制程序,見圖一。

圖一 軟硬體共同設計
由於目前工業界開發AES之IP為達到較高的效能及縮小空間,均採用固定的不可分解多項式(Irreducible Polynomial)來設計,但經長期使用固定的不可分解多項式會使系統之金匙流於型式,而使密文被破解的機會提高,至於破解的方法有很多種,如Side channel attack、Time Channel attack及Power side channel…等。何況有些系統是遭內賊所破解。所以我們提出一個具有高變異性之AES系統,見圖二,透過輸入參數即時產生LUT(Look-up Table)提供動態AES核心。當本系統所選用之輸入變數與傳統AES系統不同時,傳統AES系統將無法解我們所加密的密文,見圖三。

圖二 高變異性之AES系統

圖三 傳統AES系統將無法解回本組加密的密文
從Rijndael之AES理論中分成編解碼兩部份,而兩者的運算模組,如表一 (各模組於後文詳細說明),我們發現完成AES理論的關鍵在於產生S-Box表格(詳細說明請參考[2]),而欲產生S-Box必須大量使用以下之有限體的數學運算,例如:乘法器(Multiplier)及平方器(Squarer),我們採用軟體方式來實現,產生所需要的S-Box及(Inv)S-Box,見圖四。本組整合了AES編解碼所需的運算模組,經整合後可以分為(Inv)SubBytes、(Inv)ShiftRows、(Inv)MixColumns、(Inv)AddRoundKey四個主要的元件,每個元件均可以由NiosII純軟體來實現,或者將其中部份的元件設計成硬體來加速整個編解碼的流程(其中(Inv)ShiftRows、(Inv)MixColumns以硬體實現成元件)。
|
Encryption |
Decryption |
Our Implementation |
|
AddRoundKey
for Round=1 to N-1 SubBytes ShiftRows MixColumns AddRoundKey
end for SubBytes ShiftRows AddRoundKey |
InvAddRoundKey
for Round=1 to N-1 InvShiftRows InvSubBytes InvAddRoundKey InvMixColumns
end for InvShiftRows InvShbBytes InvAddRoundKey |
Blue : SW or HW
Red : LUT |
表一 Rijndael之AES理論中編解碼演算法
AES系統運算核心的組成架構可分成以下三類,如圖四: 1、 硬體元件:可加速AES的運算效能 (1) AES理論的運算元件:(Inv)ShiftRows、(Inv)MixColumns。 (2) 選擇加解密的解多工器。 2、 動態表之運算:(Inv)S-Box、(Inv)Key Expansion的產生 。 3、 軟體運算:動態表建立、系統組合、核心元件控制、Operation Control、Data Flow Control 、Interface Control

圖四 AES運算核心組成架構
|
|
|
適用範圍 1. 無線網路資料加密之安全機制(Secure wireless communications) 2. 網路路由器之安全機制(Protected network routers) 3. 電子金融交換機制(Electronic financial transactions) 4. 監視影像的加密系統(Secure video surveillance systems) 5. 資料儲存之加密機制(Encrypted data storage) 6. 網路硬碟之私密功能(Secure network storage system) |
|
|
針對用戶群 1. 具有AES之安全機制之無線網路橋接器、無線網路介面卡製造商 2. 具加密性的虛擬私有網路(VPN)產品或防火牆之製造商 3. 加密手機之晶片製造業者 4. 私密性網路硬碟或高容量硬碟陣列之製造商 5. ATM安全交易之晶片製造業者 6. 可攜式通訊或存儲系統製造業者 7. 具私密性之Sensor Network裝置 |
|
|
發展套件 採用Nios Development Kit Cyclone Edition,包含Cyclone EP1C20FC400 device(含36K byte的M4K RAM)、SRAM (1 Mbyte in two banks of 512 Kbytes, 16-bit wide)、SDRAM (16 Mbytes, 32-bit wide)、Flash (8 Mbytes)、10/100 Ethernet physical layer/media access control (PHY/MAC)、Two serial connectors (RS-232 DB9 port)…等,如圖五。

圖五 Nios Development Kit Cyclone Edition實驗套件[3] |
|
|
預計功能 (一) 以Quartus II v5.0 針對高變異性AES系統,完成各部運算元件(以VHDL設計) (二) LUT(Look-up Table)產生器及輔助運算器之設計 (三) 以SOPC架構出整個系統 (四) 透過UART介面,以鮑率115200速度,達到明文及密文的即時傳輸 (五) 以Builder C++完成128Bit之AES編解碼過程 (六) 具有多變數輸入介面,以產生不同的AES編解碼過程 |
|
|
實現方法 (一) 針對高變異性AES系統,完成各部運算元件(以VHDL設計) 1. 分析AES理論後,我們了解到透過不同的Irreducible Polynomial、Affine Transform Matrix及Round Number的三種輸入,將可產生具有高變異性的AES系統。 2. 依輸入的需求整理出所有的運算元件:乘法器、平方器、反元器、S-Box、KeyExpansion、(Inv)SubBytes、(Inv)ShiftRows、(Inv)MixColumns、(Inv)AddRoundKey。 3. 透過Quartus II v5.0撰寫VHDL Code,並做功能性的驗證。 4. 根據Federal Information Processing Standard Publication 197的規格,以BCB6.0完成軟體的模擬,並做驗證。
(二) LUT(Look-up Table)產生器及輔助運算器之設計 1. 分析出SubBytes及InvSubBytes的運算結構,透過使用者輸入的參數,利用軟體產生S-Box,(Inv)S-Box表格和各個Round 所需的Key。 2. 將生成S-Box、(Inv)S-Box及Key下載並儲存於發展套件中。
(三) 利用SOPC Builder架構出整個系統。 1. 開啟Cyclone Standard CPU的範例。 2. 加入使用者自定腳位PIO,如圖六。各個腳位的設定如表二。

圖六 加入使用者自定腳位
|
名稱 |
大小 |
方向 |
用途 |
|
aes_data0~15 |
8bit |
雙向 |
傳送加密資料 |
|
aes_ctl_out |
32bit |
輸出 |
控制外部AES元件 |
表二 使用者自定腳位規格
(四) 設定UART鮑率:設定為115200bps,None Parity, Data Bit=8 , Stop Bit=1,如圖七。

圖七 UART元件通訊的設定
(五) 以Builder C++完成128Bit之AES編解碼過程 1. 利用Builder C++撰寫後端使用者(GUI)介面程式。

圖八 提供使用者輸入參數的介面
2. 根據Federal Information Processing Standard Publication 197的規格書,逐步完成軟體測試平台,並透過此平台做為整個系統驗證之依據,參考圖九。

圖九 規格書(上)與測試平台(下)相互對照之結果
3. 利用Test Data測試系統的完整性,圖十裡的數據為Federal Information Processing Standard Publication 197規格所提供的Test Pattern,紅色字為編碼完及解碼完之結果。

圖十 輸入Test Pattern正確編碼並正確解碼之結果
(六) 具有多變數輸入介面,以產生不同的AES編解碼過程,如圖十一所示。

圖十一 具有多變數輸入介面
效能參數:請列舉一些該設計所需要達到的效能參數,如果可能的話,請比較使用這些設計參數後,您的設計可達到的實際效能,以及評估Nios處理器在此設計中的功能。
本組作品之主要功能為圖形之編解碼,因AES為對稱式密碼系統,故編碼與解碼的方式幾乎一模一樣,只是差別在順序的不同,故以下效能參數之分析只列舉編碼的過程。本組編碼之圖形為256×256 Pixel 8 bit之點陣圖,而編碼一次能處理128bit之資料量,所以總共需要編碼256×256×8÷128=4096次。每次編碼過程主要進行四個編碼函式:SubBytes、ShiftRows、MixColumns、AddRoundKey,每個函式都需要大量之記憶體讀寫的動作(本組將Data Memory設為外部之SDRAM),效能分析如表三:
|
功能描述 |
記憶體 |
預計Cycle數量(次) |
|
讀取(次) |
寫入(次) |
|
從記憶體載入本次編碼資料(128 bit) |
16 |
16 |
400 |
|
SubBytes |
48 |
16 |
3200 |
|
ShiftRows |
16 |
16 |
5600 |
|
MixColumns |
16 |
16 |
5600 |
|
AddRoundKey |
32 |
16 |
2400 |
|
將編碼完的資料寫入記憶體(128 bit) |
16 |
16 |
400 |
|
流程及週邊控制 |
0 |
0 |
2000 |
表三 編碼運算時效能分析
我們分別進行最小及最大Round數之實驗,最小Round數為3而最大為11,表三紅字部份必須依不同的Round數而進行重覆運算,重覆運算之次數為Round數減一。我們將預計之時間和實驗之時間整理如表四,並加入完全由PC端軟體模擬(Centrino 1.7GMHz)之時間以供比較,我們發現本組所設定之NiosII / Standard之效能已明顯高於PC軟體端。
|
Round數量 |
預計時間(秒) |
實際之花費時間(秒) |
PC軟體模擬(秒) |
|
3 |
[400+(3200+5600+5600+2400)×2+400+2000]×20ns × 4096 ≒ 2.98 |
3 |
4 |
|
11 |
[400+(3200+5600+5600+2400)×10+400+2000]×20ns × 4096 ≒13.99 |
13 |
27 |
表四 時間分析 |
|
|
系統設計 (一) 系統設計方塊圖

圖十二 系統設計方塊圖
(二) 系統端User程式庫:各程式如表五所示。
|
函數名稱 |
函數說明 |
|
Load Parameters |
從PC端載入參數 |
|
Receive Image From PC |
從PC端載入圖片 |
|
Encryption |
加密 |
|
Decryption |
解密 |
|
Send Cipher to PC |
完整回傳編碼Buffer至PC |
|
Send PlainText to PC |
完整回傳解碼Buffer至PC |
|
Text Device |
測試裝置 |
|
Change Mode |
切換自動模式及除錯模式(Debug) |
|
Print Source Buffer |
逐步回傳來源Buffer至PC |
|
Print Cipher Buffer |
逐步回傳編碼Buffer至PC |
|
Print Plaintext Buffer |
逐步回傳解碼Buffer至PC |
表五 系統端程式說明
(三) 系統端方塊圖

圖十三 系統端方塊圖 |
|
|
硬體設計方塊圖 以下為各運算元件之設計方塊圖 (一)乘法器:分為Product及Modulation兩部分,如圖十四。

圖十四 乘法器設計方塊圖
1.Product:計算兩個8bits運算元a和b之乘積,結果為C(15 bits),原理如圖十五,而波形圖如圖十六。

圖十五 Product設計原理圖

圖十六 Product模擬波形圖
2. Modulation:輸入為C(15 bits),根據不同的f(x)輸入來做降階的動作(f(x)必須為Irreducible Polynomial),結果為M(8 bits) ,擷取其中的硬體線路如圖十七,圖中之f7及f6為f(x)最高位元及次高位元的位元,為該層AND閘之一端輸入。

圖十七 Modulation硬體線路圖
(二)(Inv)ShiftRow:把ShiftRow元件以及(Inv)ShiftRow元件合併,利用多工器來選擇所需要使用的部份,sel=0為編碼所需的部份,而sel=1則是解碼,如圖十八及圖十九所示。

圖十八 (Inv)ShiftRow設計方塊圖

圖十九 (Inv)ShiftRow Simulation
(三) (Inv)MixColumns:將MixColumns及InvMixColumns元件合併設計,其中依輸入的MixColumns Polynomial之不同而產生不同之Word_MixC,這個Word_MixC將會同時產生編解碼的輸出,當sel=0時為編碼,而sel=1時為解碼,如圖二十及二十一所示。

圖二十 (Inv)MixColumns設計方塊圖

圖二十一 (Inv)MixColumn Simulation |
|
|
軟體設計流程圖 (一)功能流程圖: 1.自動軟體模擬:利用基本原件做運算,產生出S-Box,完成加密、解密模擬,以及影像加密、解密流程,如圖二十二。 2.硬體加密解密:以RS-232為通訊媒介,做參數傳遞、資料傳遞、接收資料驗證,如圖二十三。

圖二十二 自動軟體模擬示意圖

圖二十三 硬體加解密流程圖
(二)軟體虛擬碼及函式說明:
|
DAES Encryption |
DAES Decryption |
|
Load_Parameter Generate_Encrypt_SBox Key_Schedule
for Image_rowcount=1 to row for Image_colcount=1 to column
AddRoundKey
for round=1 to N-1 SubBytes ShiftRows MixColumns AddRoundKey
end for SubBytes ShiftRows AddRoundKey
end for end for |
Load Parameter Generate_Decrypt_SBox Key_Schedule
for Image_rowcount=1 to row for Image_colcount=1 to column
InvAddRoundKey
for round=1 to N-1 InvShiftRows InvSubBytes InvAddRoundKey InvMixColumns
end for InvShiftRows InvShbBytes InvAddRoundKey
end for end for |
表六 軟體虛擬碼
|
依需求整理出所有的function: |
|
基本 function: |
|
|
Multiplication |
運算有限體的乘法 |
|
Inverse |
運算有限體的反元素 |
|
Matrix Inverse |
計算Affine Transform Matrix 之 反矩陣 |
|
Image Process |
影像處理之副程式 |
|
RS232 communication debug |
UART傳送的副程式 |
|
AES function: |
|
|
Load Parameter |
載入參數,使用者可改變原始參數 |
|
Generate_Encrypt_SBox |
Generate_Encrypt_SBox:產生出加密時,需使用的S-Box |
|
Key Schedule |
將Key展開,供AddRoundkey使用 |
|
Create Encrypt S-Box |
產生S-Box的表格 |
|
Create Decrypt S-Box |
產生 (Inv)S-Box的表格 |
|
Key Expansion |
產生各個Round的Key |
|
Encrypt |
加密的副程式 |
|
Decrypt |
解密的副程式 |
表七 軟體各函式說明
(三)主要功能介紹: 1.參數輸入:使用者可自行輸入參數,增加可變異性功能

圖二十四 參數輸入介面
2.資料驗證:提供完善的加解密過程

圖二十五 資料驗證介面
3.影像處理:載入一個256 * 256 8bit 點陣圖影像,執行加解密動作

圖二十六 影像處理介面
4.通訊除錯:利用RS-232通訊傳送控制碼,硬體回傳資料讓使用者易於除錯

圖二十七 通訊除錯介面 |
|
|
實現方法 (一)定義系統:包含處理器、記憶體、周邊元件及與外部元件連結之pin腳。 (二)產生系統:利用SOPC Builder產生sof檔。 (三)硬體設計:利用VHDL Code撰寫建立所需元件,並進行電路的合成並編譯及模擬。 (四)軟體設計:利用Nios II IDE產生相關的Header檔及Driver並撰寫應用程式,並編譯至elf檔。 (五)模擬:利用ModelSim進行模擬,如果發生問題,回到(二)修改系統再進行軟硬體的設計。 (六)驗證:將軟、硬體透過JTAG下載至Cyclone發展板上之RAM上做實體驗證。 (七)測試:結合PC端發展的使用者介面軟體,送入大量待測資料做產品測試。 |
|
|
設計步驟 我們了解到SOPC可提供一個軟硬體集合平台及共同發展的環境,主要分為三部分,邏輯部分(IP設計),儲存部份(RAM),計算核心(CPU或DSP)。設計的步驟如下: (一)演算法與核心之選用: 我們採用Rijndael之AES演算法,加入輸入變數後,產生動態表格儲存於晶片內的RAM上,再透過Nios II之CPU控制整個AES運算流程.
(二)選擇IP及自定IP元件: 本作品選用通用的IP元件,在Altera公司網站上均可下載詳細的說明文件,以供軟硬體之設計需求。而根據作品之需求也開發了自定之IP元件,連結於Avalon的匯流排上。
(三)軟硬體系統設計 我們在設計中進行軟硬體共同設計,由於軟硬體共同設計可以說是一個挑戰,因為軟體開發涉及到硬體資源的規劃和分配,並且關係到整個系統性能的表現,但由於SOPC Builder及Nios II IDE提供了一個整合性的軟硬體設計系統,所以加速了整個開發的流程。 |
|
|
設計特性 一、動態表格產生器: 根據三種輸入變數,產生動態的S-Box及MixColumns Matrix等表格,並存於RAM中,由於SOPC的架構,使得Nios II之CPU可以控制各AES運算元件,並透過Avalon Bus做資料搬移、存取、運算…等動作,成功實現高變異性的AES密碼系統於FPGA上。
二、100%軟硬體呈現: 本組完整的設計出Diversity AES的軟硬體平台,讓AES的安全性大大的提高。
三、人性化的Demo程式: 本組在軟體端以AutoRun的方式,呈現整套 Diversity AES的流程,能夠讓使用者,快速了解到本組設計的用心。
四、在NiosII核心外連結了三個自製IP: 正因NiosII可以彈性化的設定,所以可依自己的需求而輕易地設計出對外溝通之PIO腳位,本組亦結合了(Inv)ShiftRow、(Inv)MixColumn、解多工器,加速整體AES編解碼之效能。
五、解決大量UART封包傳輸問題: 由於開發套件上面UART之IC是接於25MHz的石英振盪器,故會發生鮑率不準的問題,在大量連續的傳輸中會發少一些封包錯誤的問題,本組將大量之封包切成小量的封包進行傳輸,成功解決了封包錯誤之問題,讓UART能正確無誤地進行大量的傳輸。 |
|
|
總結 本組在參加這次Altera所舉辦的2005 NiosII 竸賽中,獲得相當多的收獲,本組之工作分配是分成系統整合、硬體開發及軟體設計,以下分成這三個部分來說明:
一、 系統方面: 由於NiosII所提供的IDE開發環境及SOPC Builder的便利性,讓Soft CPU能以彈性化的設計快速實現於原型機上,加速開發的流程,這次比賽讓本組熟悉了整個流程,讓越來越短的消費性電子產品有了更快速的開發流程,也大大降低了開發時人力物力的成本,相信在不久的將來,彈性化的系統設計必是未來之主流。雖然還有很多元件沒有加入,不過藉此機會,讓我們能夠有更多系統整合的能力,除此之外,也希望貴公司能夠提供各種不同Demoboard的範例程式,讓有興趣的學子能夠更快進入SOPC的開發流程。
二、 硬體方面: 在這次的比賽中,從一開始的規劃設計到整體硬體部分完成,讓我對一個project的開發有深深的體會,不論是在一開始規劃的部份,需要和大家先訂定出一套資料流的規則,如果沒有去訂定規則的話,大家各做各的到時後產生出的問題會更大,所以我們設計的方式比較偏向Top-Down的設計,這都需要TEAM裡大家的配合協調才能完成的,而在硬體設計部分我利用Quartus II的工具來開發 因為其較彈性的設計方式讓我不論在作硬體規劃設計或實現方面都能比較有好的環境去將遇到的問題解決,不過在某些問題上真的是很需要經驗,像是在RAM的存取方面需要使用不同時脈等等,這都是在當初不知道也沒想到的,所以在藉這次的比賽的機會讓我學到很多東西也是一種很難得的經驗,也讓我了解一套system或project的開發,極其不易和所會面臨到的問題等等,更學習到當面對到這些困境時,該以何種心態去面對、處理,和TEAM的溝通協調如何一起解決問題都是很大的收穫。
三、 軟體方面: 非常榮幸這次能參加Nios設計大賽,我負責的是軟體介面方面,重點在於與Nios互相溝通,彼此交換訊息,我們利用RS-232擔任此項工作,從中學習如何來達到訊息傳遞,而視窗介面我利用Builder C++來達成軟體設計,當成一個驗証工具,由軟體來驗証正確性,並且達成Nios Communication Debug來做階段測試,從這些過程中去了解Nios 內部溝通,訊息交換! 這次的比賽讓我對Nios 有更深一層的認識,希望有機會能了解到更有相關資訊,繼續發展下去! |