AES演算法簡介

2021-10-10 10:45:14 字數 4219 閱讀 2313

本人主要對這篇對s盒的計算過程感興趣。

aes是乙個對稱密碼,旨在取代des成為廣泛使用的標準。

一、aes的加密過程

二、aes的資料結構

加密解密演算法的輸入是乙個128位分組。這些分組被描述成4×4的位元組方陣,這個分組被複製到state陣列中,並在加密和解密的每一階段都被修改。在位元組方陣中,每一格都是乙個字,包含了4位元組。在矩陣中字是按列排序的。

加密由n輪構成,輪數依賴於金鑰長度:16位元組金鑰對應10輪,24位元組金鑰對應12輪,32位元組對應14輪。

三、加密解密的詳細結構

aes未使用feistel結構。其前n-1輪由4個不同的變換組成:位元組代替、行移位、列混淆和輪金鑰加。最後一輪僅包含三個變換。而在第一輪前面有乙個起始的單變換(輪金鑰加),可以視為0輪。

位元組代替(subbytes):用乙個s盒完成分組的位元組到位元組的代替。

行移位(shiftrows):乙個簡單的置換。

列混淆(mixcolumns):利用域gf(28)上的算術特性的乙個代替。

輪金鑰加(addroundkey):當前分組和擴充套件金鑰的一部分進行按位異或xor。

首尾使用輪金鑰加的理由:若將其他不需要金鑰的階段放在首尾,在不知道金鑰的情況下就能計算其逆,這就不能增加演算法的安全性。

加密原理:輪金鑰加實際是一種vernam密碼形式,其本身不難被破解。另外三個階段一起提供了混淆、擴散和非線性功能。這三個階段沒有涉及金鑰,就它們自身而言,並未提供演算法的安全性。然而,該演算法經歷乙個分組的xor加密(輪金鑰加),再對該分組混淆擴散(其他三個階段),再接著又是xor加密,如此交替進行,這種方式非常有效非常安全。

可逆原理:每個階段均可逆。對位元組代替、行移位和列混淆,在解密演算法中用它們相對應的逆函式。輪金鑰加的逆就是用同樣的輪金鑰和分組相異或,其原理就是a⊕b⊕b = a。和大多數分組密碼一樣,aes解密演算法按逆序利用擴充套件金鑰,然而其解密演算法和加密演算法並不一樣,這是由aes的特定結構決定的。圖5.3中加密和解密流程在縱向上是相反的,在每個水平點上,state陣列在加密和解密函式中都是一樣的。

四、aes的變換函式

1、位元組代替變換

位元組代替變換是乙個簡單的查表操作。aes定義了乙個s盒,它是由16×16個位元組組成是矩陣,包含了8位所能表示的256個數的乙個置換。state中每個位元組按照如下方式對映為乙個新的位元組:把該位元組的高4位作為行值,低4位作為列值,以這些數值為索引從s盒的對應位置取出元素作為輸出。如,十六進製制數所對應的s盒行值是9,列值是5。s盒中在此位置的值是,相應的,被對映為。

s盒的構造

(1)按位元組值的公升序逐行初始化s盒(相當於每個值都代表了座標)

(2)把s盒的每個位元組對映為它在有限域gf(28)中的逆

(3)把s盒中的每個位元組的8個構成位記為(b7,b6,b5,b4,b3,b2,b1,b0)。對s盒的每個位元組的每個位作如下變換:

bi』=b(i+4)mod8⊕b(i+5)mod8⊕b(i+6)mod8⊕b(i+7)mod8⊕ci (5.1)

這裡ci 是指值為的位元組c的第i位。

aes標準用矩陣形式描述了這個變換:

逆位元組代替變換則採用逆s盒,

逆s盒的構造

(1)按位元組值的公升序逐行初始化s盒

(2)利用式5.1的逆變換,該逆變換如下:

bi』=b(i+2)mod8⊕b(i+5)mod8⊕b(i+7)mod8⊕di (5.3)

這裡di 是指值為的位元組d的第i位。也可以用矩陣形式描述:

(3)求其在gf(28)內的乘法逆

可逆證明:

令位元組代替變換和逆位元組代替變換中的矩陣分別為x和y,常量c和d的向量表示分別為c和d。對於某個8位的向量b,式5.2變成了b』=xb⊕c。我們需證明y(xb⊕c)⊕d=b

與des加密的s盒的區別:

1、aes的s盒的原理是運用了gf(28)的乘法逆和矩陣的可逆運算來保證加密與解密過程的可逆性。des的s盒設計主要是為了確保非線性關係,並不需要可逆。因而在設計理念上有極大的不同。

2、aes的s盒與des的s盒形式上差別也很大,aes的s盒輸入和輸出的位數相同,均為128位,大小為16×16的位元組矩陣,且只有1組;而des的s盒輸入6位,輸出只有4位,大小是4×16的位矩陣,並且有8組。在輸入的座標選擇規定上亦有不同。

2、行移位變換

操作本身很簡單,將state陣列的第一行保持不變,第二行迴圈左移乙個位元組,第三行迴圈左移兩個位元組,第四行迴圈左移三個位元組。

其逆變換則將移位的幾行執行相反方向的移位操作即可。

基本原理

由於輪金鑰加、位元組代替變換都是逐列地作用在state陣列上,每一輪的行移位變換將會打亂列排列,使得保密性得到很大的提公升。

3、列混淆變換

列混淆變換實際上是使用乘法矩陣(注意:其運算中涉及的加法和乘法都是定義在gf(28)上的加法和乘法,目的就是為了確保運算結果不會溢位定義域),可用以下式子描述。

逆向列混淆變換可由如下矩陣乘法定義

其可逆性可以簡單運算得到證明

基本原理

式5.3中矩陣的係數是基於碼字間有最大距離的線性編碼,這使得在每列的所有位元組中有良好的混淆性。列混淆變換和行移位變換使得經過幾輪變換後,所有的輸入位和所有的輸出位相關。

此外,列混淆變換的係數,即是基於演算法實現角度考慮的。不過,逆向列混淆變換的係數則更加難以實現,然而加密被視為比解密更重要,因為:

1、對於cfb和ofb密碼模式,僅用到加密演算法

2、和任何其他分組密碼一樣,aes能用於構造訊息驗證碼,這僅僅用到了加密過程。

4、輪金鑰加變換

這個比較簡單,沒有太多好說的,金鑰擴充套件的複雜性是確保演算法安全性的重要部分。

以下是描述單輪aes的另乙個視角,強調各變換的機制和輸入。

五、aes的金鑰擴充套件

aes金鑰擴充套件演算法的輸入值是4個字(16位元組),輸出值是乙個由44個字組成(176位元組)的一維線性陣列。以下偽碼描述了這個擴充套件:

keyexpansion(byte key[16], word w[44]){

word temp

for(i=0; i<4; i++) //將輸入的金鑰直接複製到擴充套件金鑰陣列的前四個字

w[i]=word(key[4i],key[4i+1],key[4i+2],key[4i+3]);

temp = w[i-1];

if(i mod 4 == 0) //對w陣列下標為4的倍數的元素採用更複雜的函式來計算

temp = subword(rotword(temp))⊕rcon[i/4];

w[i] = w[i-4] + temp; //每乙個新增的字w[i]依賴於w[i-1] 和w[i-4]

rotword的功能是字迴圈,即使乙個字的4個位元組迴圈左移1個位元組。

subword是利用s盒對輸入字的每個位元組進行位元組代替。

rcon[i]是輪常量,代表乙個字,這個字最右邊三個位元組總是0,因此字與rcon異或,其結果只是與該字最左邊的那個位元組相異或。每一輪的輪常量都不相同,其定義為

rcon[i] = (rc[i],0,0,0),其中rc[1] = 1,rc[i] = 2•rc[i-1] 乘法是定義在域gf(28)上的。

rc[i]的值按照十六進製制表示為

輪常量取不同值就是為了消除不同輪金鑰產生方式上的對稱性或相似性。

金鑰擴充套件演算法的設計規範:

1、找到金鑰或輪金鑰的部分位不足以計算出輪金鑰的其他位;

2、它是乙個可逆的變換(即知道擴充套件金鑰中任何連續的nk個字能夠重新產生整個擴充套件金鑰,nk是構成金鑰所需的字數);

3、能夠在各種處理器上有效地執行;

4、使用輪常量消除對稱性;

5、將金鑰差異性擴散到輪金鑰中的能力,即金鑰的每個位能影響輪金鑰的許多位;

6、足夠的非線性以防止輪金鑰的差異完全由金鑰的差異所決定。

改進–等價的逆演算法

上文所述的標準解密流程與標準加密流程並不完全一致,加密每一輪的流程是:位元組代替–>行移位–>列混淆–>輪密加。而解密每一輪的流程是:逆向行移位–>逆向位元組代替–>輪密加–>逆向列混淆。

可以對解密構成進行改進,使得解密流程與加密流程等效。

1、交換逆向行移位和逆向位元組代替:

由於逆向行移位並不影響state陣列中位元組的內容,而逆向位元組代替也不會影響state陣列中位元組的位置,因而兩者可以交換順序而不影響解密。

2、交換輪金鑰加和逆向列混淆:

這兩種操作均不會改變state中位元組的順序,給定狀態si和給定輪金鑰wi,可證明

逆向列混淆(si⊕wi)= [逆向列混淆(si)]⊕[逆向列混淆(wi)]

這個等式顯然是正確的,因而如果要改變這兩種操作的順序,則必須改進逆向列混淆的操作,即先對輪金鑰應用逆向列混淆(注意,無需對首尾的輪金鑰應用逆向列混淆)。最終,改進後的解密流程如下圖:

AES分組加密簡介

aes 分組加密簡介 1 首先應該明白 aes是基於資料塊的加密方式,也就是說,每次處理的資料是一塊 16位元組 當資料不是 16位元組的倍數時填充,這就是所謂的分組密碼 區別於基於位元位的流密碼 16位元組是分組長度。2 分組加密的幾種方式 ecb 是一種基礎的加密方式,密文被分割成分組長度相等的...

aes演算法的地位 AES演算法介紹

aes 演算法介紹 1.aes 演算法簡介 aes演算法是高階加密標準演算法的簡稱,其英文名稱為 advanced encryption standard 該加密標準的出現是因為隨著對稱密碼的發展 以前使用的 desdata encryption standard 資料加密標準 演算法由於金鑰長度較...

演算法 AES演算法優化

演算法優化主要就是在矩陣相乘中,優化的方式也很簡單,就是空間換時間。aes演算法的矩陣是有特點的,矩陣如下 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 每一豎行都是02 01 01 03 組成。分析矩陣相乘 02 03 01 01 a1 02 a1...