在A(yíng)RM微處理器上實(shí)現Rijndael加密算法
引 言
2000年10月2日,美國國家標準局NIST宣布,比利時(shí)密碼學(xué)家Joat Daemen和Vincent Rijmen設計的“RijndaeI算法”以安全性好、運算速度快、存儲要求低、靈活性強最終當選AES。該算法對目前的各種威脅是免疫的。這標志著(zhù)信息技術(shù)有了新的安全工具,為計算機網(wǎng)絡(luò )和電子商務(wù)的發(fā)展提供了強有力的保障。
在當前數字信息技術(shù)和網(wǎng)絡(luò )技術(shù)高速發(fā)展的后PC時(shí)代,嵌入式系統技術(shù)已經(jīng)廣泛地滲透到科學(xué)研究、工程設計、軍事技術(shù)、各類(lèi)產(chǎn)業(yè)和商業(yè)文化藝術(shù)以及人們的日常生活等方方面面中,成為目前最熱門(mén)的技術(shù)之一。
本文使用北京博創(chuàng )興業(yè)科技有限公司研制的UP-NETARM300嵌入式開(kāi)發(fā)板,在A(yíng)RM SDT 2.51集成開(kāi)發(fā)環(huán)境下,建立基于μC/OS-Il操作系統的工程文件,分別調用ARM匯編程序和C程序在嵌入式微處理器上實(shí)現了Rijndael算法,并比較了兩者的效率。下面以分組長(cháng)度和密鑰長(cháng)度都是128位為例,介紹調用ARM匯編程序實(shí)現加密算法的過(guò)程。本實(shí)現算法可以將密鑰長(cháng)度擴展
到192位或256位。
1 Rijndael加密算法簡(jiǎn)介
1.1 算法流程結構
Rijndael加密算法的128位輸入分組用以字節為單位的正方形矩陣描述。該數組被復制到State數組。加密過(guò)程分為四個(gè)階段:密鑰擴展、輪密鑰加、Nr-1(對應128、192、256位密鑰長(cháng)度,Nr分別為10、12、14)輪變換及最后一輪變換。輪變換包括字節代換、行移位、列混淆和輪密鑰加四個(gè)過(guò)程,最后一輪變換包括字節代換、行移位和輪密鑰加三個(gè)過(guò)程。用偽C代碼表示如下:
Rijndael (State, CipherKey) {
KeyExpansion (CipherKey, ExpandKey); //密鑰擴展
AddRoundKey (State, RoundKey); //輪密鑰加
For (i=1;i<Nr;i++)
Round (State, ExpandKey+4*i); //輪變換
FinalRound (State, ExpandKey+4 * Nr); //最后一輪變換}
Round (State, RoundKey){ //輪變換
SubByte (State); //字節代換
ShiftRow(State); //行移位
MixColumn(State); //列混淆
AddRoundKey(State, RoundKey); 輪密鑰加
FinalRound(State, RoundKey) { //最后一輪變換
SubByte(State);
ShiftRow(State);
AddRoundKey(State,RoundKey);
1. 2算法所使用的主要變換
(1)字節代換SubByte
用一個(gè)簡(jiǎn)單的查表操作代替了基于矩陣乘法的復雜仿射變換。Rijndael定義了一個(gè)16
評論