背景技術:
:本發明的數據加密方法是由AES算法改進而成,AES算法(即高級加密標準)是由美國國家標準技術研究所(NIST)于2000年10月通過公開招標并從眾多候選算法中選擇出來的一種效率高且加密強度大的對稱加密算法。它具有加密程度強、數據處理速度快,可以在短時間內處理大量數據的特點。AES算法是一個可變數據塊長和可變密鑰長的迭代分組加密算法,數據塊長和密鑰長可分別為128,192或256比特,AES算法中最重要的操作為輪變換操作,改變換過程所應用的各種運算賦予很高的加密強度。而本發明通過創建新的S盒,將原本AES算法中每個輪函數中的字節代換(ByteSub)、行移位(ShiftRow)、列混合(MixColumn)的運算過程簡化查表的過程,在沒有過多增加內存使用量的基礎上,大大減小了計算量,使其可以在微控制器上快速實現,同時沒有改變算法原本的數學結構,使其安全性更高。
技術實現要素:
:
本發明將AES運算過程進行改進優化,提高了在終端微處理器上實現的速度。接下來首先介紹AES算法,然后通過矩陣運算得出其矩陣表示,最后說明了優化后的加密方法的運算過程:
(1)AES算法的簡介
AES算法是一個可變數據塊長和可變密鑰長的迭代分組加密算法,數據塊長和密鑰長可分別為128,192或256比特,AES算法中最重要的操作為輪變換操作,改變換過程所應用的各種運算賦予很高的加密強度。
輪變換操作(解密過程與加密過程大同小異,為加密過程的逆運算):輪變換由4個不同的變換組成(S盒變換,行變換,列變換和輪密鑰加),用偽C代碼描述為:
Round(State,RoundKey)
{
ByteSub(State);
ShiftRow(State);
MixColumn(State);
AddRoundKey(State,RoundKey);
}
最后一輪稍有不同,少了MixColumn(State)函數,即為:
FinalRound(State,RoundKey)
{
ByteSub(State);
ShiftRow(State);
AddRoundKey(State,RoundKey);
}
(2)AES算法輪變換的矩陣表示
AES算法主要由三大模塊組成:加密模塊、解密模塊和密鑰擴展模塊。加密模塊的每次輪變換均由字節代換(ByteSub)、行移位(ShiftRow)、列混合(MixColumn)和密鑰加(AddRoundKey)四種運算構成,而解密模塊也是由相似的四種運算構成,不同的是字節代換、行移位、列混合為加密模塊的逆運算。而密鑰加中每輪使用的擴展密鑰則由密鑰擴展模塊產生。加密模塊和解密模塊是AES算法的核心,它們均為輪變換的重復過程,因此精簡輪函數可以提高AES算法的運算速度。
為便于描述,這里采用128比特分組(16字節),密鑰也是128比特。
在ByteSub變換中,假設輸入為A,A=[ai,j],(0≤i,j≤3),輸出為B,B=[bi,j],(0≤i,j≤3)。可以用:
B=(A) (1)
來表示ByteSub變換,即:
bi,j=B(ai,j) (2)
實際中這個變換可以轉換為查表操作,該表即為AES算法的字節變換表,也成為S盒,字節變換表如表1所示:
表1字節變換表
例如,假設ax,y為字節00,則由上表可得到bx,y=S(ax,y)=63。
在ShiftRow變換中,其原理圖如圖1所示。設輸出為C,C=[ci,j],(0≤i,j≤3)。
則C可以用矩陣表示為
在MixColumn變換中,將ShiftRow中得到的狀態陣列的每個列視為GF(28)上的多項式,再與一個固定的多項式03x3+01x2+01x+02進行模x4+1乘法。
設輸出為D,D=[di,j],(0≤i,j≤3),則MixColumn也可以寫成矩陣乘法:
在AddRoundKey變換中,由密鑰擴展模塊產生的擴展輪密鑰開始作用,將該輪秘鑰設為K,K=[ki,j],(0≤i,j≤3),輸出結果為E,E=[ei,j],(0≤i,j≤3),則AddRoundKey用矩陣可以表示為:
將(2)、(3)、(4)帶入(5)中可以得到
這樣就得出了AES算法每一輪輸入A與輸出E之間的矩陣表示。
(3)優化的AES算法
在式(6)中,計算需要一次xtime運算,一次異或運算。因此,每得到輪變換結果E的一列向量,要進行四次xtime運算,八次異或(不考慮輪密鑰的生成)。而通過觀察可知,與S[a1,(j+1)%4]、S[a1,(j+1)%4]、S[a2,(j+2)%4]、S[a3,(j+3)%4]相乘的列向量中,只有01、02、03這三個元素,故可以創造一個新的S盒,使其可以通過查表直接得到這四個列向量中每一個元素,這樣就能省去四次xtime運算和四次異或運算,每得到輪變換結果E的一列向量只需要就行四次異或運算。通過將表1中數據分別與03,02,01這三個元素進行運算,得到新的字節變換表,如表2所示:
表2優化的AES算法的字節變換表
在使用C語言實現時,將其設為的二維數組Snew[256][3],這樣就可以實現通過查表得到這四個列向量中每一個元素。例如的低四位高四位分別對應上表的橫縱坐標,由此得到二維數組的行坐標,也就相當于在上表中確定了格子,列向量中2,1,1,3分別對應該二維數組列坐標的1,0,0,2,也就相當于上表格子中的第幾個元素。
同樣地,在解密時也可以建立一個相似的新的字節轉換表,以實現解密的優化。
這種優化的AES加密算法,存儲兩個新的字節轉換表需要256×3×2=1536B=1.5KB。而優化前的AES算法儲存兩個字節轉換表需要256×2=512B=0.5KB,在內存資源的占用上并沒有明顯的提高,而速度卻得到了明顯的加快。
【本發明的優點和積極效果】:
本發明通過創建新的S盒,將原本AES算法中每個輪函數中的字節代換(ByteSub)、行移位(ShiftRow)、列混合(MixColumn)的運算過程簡化查表的過程,在沒有過多增加內存使用量的基礎上,大大減小了計算量,使其可以在微控制器上快速實現,同時沒有改變算法原本的數學結構,使其的安全性沒有絲毫降低。
【附圖說明】:
圖1是算法整體框圖;
圖2是ShiftRow變換原理圖。
【實例說明】:
在這里為了說明方便,只演示一輪輪變換中的一段16字節數據為例,并假設該段數據的128位均為0,則用矩陣表示為同時假設該輪輪密鑰為設輸出結果為E,E=[ei,j],(0≤i,j≤3)。則則得到了該輪亂變換的結果,之后再用該結果作為輸入進行下一輪,直至最后一輪最后得出密文。