您好,歡迎來電子發(fā)燒友網! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網>源碼下載>C/C++語言編程>

實例分析C語言描述AES256 加密算法

大小:0.3 人氣: 2017-10-13 需要積分:1
 用C 語言描述AES256 加密算法,然后在硬件中加速性能。
  高級加密標準 (AES) 已經成為很多應用(諸如嵌入式系統(tǒng)中的應用等)中日漸流行的密碼規(guī)范。自從 2002 年美國國家標準技術研究所 (NIST) 將此規(guī)范選為標準規(guī)范以來,處理器、微控制器FPGA和 SoC 應用的開發(fā)人員就開始利用 AES 來保護輸入、輸出及保存在系統(tǒng)中的數(shù)據。我們可在更高抽象層上非常高效地描述算法,就像用于傳統(tǒng)軟件開發(fā)中那樣;但由于涉及到的操作,該算法在 FPGA中實現(xiàn)起來最為高效。開發(fā)人員甚至可在布線中“免費”獲得一些操作。
  基于這些原因,AES 是個絕佳的例子,即開發(fā)人員可利用 C 語言描述算法,然后在硬件中加速實現(xiàn),從而受益于賽靈思 SDSoC ? 開發(fā)環(huán)境。本文中我們就是要這樣做,首先熟悉一下 AES 算法,然后在賽靈思 Zynq?-7000 All Programmable SoC 的處理系統(tǒng) (PS) 上實現(xiàn) AES256(256 位秘鑰長度)以建立軟件性能基準,然后再在片上可編程邏輯 (PL)中進行加速。為了完全了解可獲得的優(yōu)勢,我們將在 SDSoC 環(huán)境所支持的全部三個操作系統(tǒng)中執(zhí)行這幾個步驟,三個操作系統(tǒng)為:Linux、FreeRTOS 和裸機。
  
  算法
  AES 屬于對稱塊密碼,可采用 128、192 和 256位不同的秘鑰長度。秘鑰長度決定加密或解密數(shù)據所需的處理步驟數(shù)。顧名思義,塊密碼算法采用的是數(shù)據塊。AES 算法一次處理 16 字節(jié)的固定模塊。因此,如果我們密碼內容少于 16 字節(jié),就必須將未使用的字節(jié)進行填充。
  由于 AES 是對稱密碼,信息加密和解密都采用相同的做法和秘鑰。相反,非對稱算法(例如RSA)則使用不同秘鑰進行數(shù)據加密和解密。
  AES 算法中四個階段中每個階段都代表一個狀態(tài)。四個 AES 階段的組合稱為一個循環(huán)。所需循環(huán)的數(shù)量取決于秘鑰長度。
  很簡單,AES 狀態(tài)起始于我們要加密的 16 個字節(jié)。每個新步驟都會對狀態(tài)進行更新。處理狀態(tài)之前,我們需要將輸入字節(jié)串變?yōu)槌跏紶顟B(tài),即 4 x 4矩陣(圖 1)。
  實例分析C語言描述AES256 加密算法
  圖 1 — 16 字節(jié)的初始狀態(tài)轉換為 4 x 4 矩陣
  現(xiàn)在,我們將最初的 16 個字節(jié)重新編排為 4 x4 矩陣形式的初始狀態(tài),便可研究每個步驟如何操縱它的輸入狀態(tài)。
  輪密鑰加(AddRoundKey) : 這是唯一使用加密秘鑰的步驟。我們已經注意到,所需的加密算法循環(huán)的數(shù)量取決于秘鑰長度(128、192 或 256 位)。必須對加密秘鑰進行秘鑰擴展,以確保在每個循環(huán)中不會重新使用秘鑰中的字節(jié)。果然,對于不同的秘鑰長度而言擴展秘鑰長度并不相同。擴展秘鑰長度為:
  擴展秘鑰長度(字節(jié))= 16 *(循環(huán) + 1)
  這個步驟中的操作很簡單。輸入狀態(tài)字節(jié)與擴展秘鑰的 16 個字節(jié)進行異或運算。每個循環(huán)使用擴展秘鑰的不同部分;循環(huán) 0 使用字節(jié) 0 至 15,循環(huán)1 使用字節(jié) 16 至 31,以此類推。對于每個循環(huán),狀態(tài)的字節(jié) 1 與擴展秘鑰的最低有效字節(jié)進行異或運算,字節(jié) 2 與“最低有效字節(jié)+1”進行異或運算,以此類推。
  字節(jié)替換 (SubBytes) : 該步驟利用字節(jié)替換將狀態(tài)值用另一個值替換出去。替換盒中的值是預先設定的,而且輸入位于輸出位之間的關聯(lián)較小。替換盒 (S-box) 是一個 16 x 16 矩陣。我們使用被替代字節(jié)的高四位和低四位作為替代表格中的索引。例如,使用圖 2 中的 S-box 加密,如果第一個初始狀態(tài)字節(jié)為 0 x 69,那么用替代值 0 x F9 代替。狀態(tài)字節(jié)的高四位選擇替代表格的行; 低四位選擇列。注意在圖 2 中,加密和解密使用不同的替換盒,而且盒中內容不同。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?