當前位置:
首頁 > 最新 > 高級加密標準分析

高級加密標準分析

0×00 前言

在密碼學中,block(分組)密碼的工作模式被廣泛使用,使用同一個分組密碼密鑰對很多稱之為塊的數據加密,在優於很多諸如RSA、ECC密碼的性能的情況下,也不失為一種安全的加密演算法,今天我們將要來詳細認識一下在密碼學中佔據重要位置的AES加密標準,在密碼學中又稱為Rijindael加密法。首先AES是用來替代原先的DES,是美國NIST發布,儼然已經成為對稱密鑰中最流行的演算法之一。


AES 又稱「矩陣加密演算法」其原理採用位元組矩陣上進行「或與非」的操作(置換和替代),達到數據被重新排列、或者替換成為另一個完全不相同的數據;從而達到可以採用相同的密鑰進行「迴轉」。 AES 加密的區塊長度固定為 128、192、256 位(bit).

加密會先將需要加密的明文拆分為許多明文塊然後採取下面的加密圖種的4種方式加密最後得到許多密文塊。其次AES也不是一次性將明文轉變為密文的演算法,而是經過許多輪的加密而成的。具體分成多少輪呢?

初始輪(Initial Round) 1次

普通輪(Rounds) N次

最終輪(Final Round) 1次

上面我們提到AES的Key支持三種長度:AES128,AES192,AES256。Key的長度決定了AES加密的輪數。除去初始輪,各種Key長度對應的輪數如下:

AES128:10輪

AES192:12輪

AES256:14輪

不同階段的Round有不同的處理步驟。AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為「體(state)」,其初值就是一個明文區塊(矩陣中一個元素大小就是明文區塊中的一個Byte)。(Rijndael加密法因支持更大的區塊,其矩陣行數可視情況增加)加密時,各輪AES加密循環(除最後一輪外)均包含4個步驟。

初始輪只有一個步驟:

加輪密鑰(AddRoundKey)

普通輪有四個步驟:

位元組代替(SubBytes)

行移位(ShiftRows)

列混淆(MixColumns)

加輪密鑰(AddRoundKey)

最終輪有三個步驟:

位元組代替(SubBytes)

行移位(ShiftRows)

加輪密鑰(AddRoundKey)

AddRoundKey—矩陣中的每一個位元組都與該次回合密鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案產生。

SubBytes—通過一個非線性的替換函數,用查找表的方式把每個位元組替換成對應的位元組。

ShiftRows—將矩陣中的每個橫列進行循環式移位。

MixColumns—為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每內聯的四個位元組。最後一個加密循環中省略MixColumns步驟,而以另一個AddRoundKey取代。


位元組代替的主要功能是通過S盒完成一個位元組到另外一個位元組的映射。

步驟SubBytes,又稱作S盒,它是AES加密過程中唯一的非線性變換。他是一個磚匠置換,該置換包含一個作用在狀態位元組上的S盒,用Srd表示AES中特使用的特定的S盒。

非線性度:

輸入輸出之間最大相關幅度必須儘可能小。

差分傳播概率最大值必需儘可能小。

2.數複雜度

在GF(2^8)中Srd應當具有複雜的代數表達式

位元組代替最主要的運算就是根據表2-1進行加密。


上圖為需要加密的密碼塊其中可以直接查表:如19就對應著0xd4;a0對應0xe0;…


行移位是一個4×4的矩陣內部位元組之間的置換,用於提供演算法的擴散性。在ShiftRows步驟中,矩陣中每一行的各個位元組循環向左方位移。位移量則隨著行數遞增而遞增。ShiftRows描述矩陣的行操作。在此步驟中,每一行都向左循環位移某個偏移量。在AES中(區塊大小128位),第一行維持不變,第二行里的每個位元組都向左循環移動一格。同理,第三行及第四行向左循環位移的偏移量就分別是2和3。128位和192比特的區塊在此步驟的循環位移的模式相同。經過ShiftRows之後,矩陣中每一豎列,都是由輸入矩陣中的每個不同列中的元素組成。Rijndael演算法的版本中,偏移量和AES有少許不同;對於長度256比特的區塊,第一行仍然維持不變,第二行、第三行、第四行的偏移量分別是1位元組、2位元組、3位元組。除此之外,ShiftRows操作步驟在Rijndael和AES中完全相同。

如下圖:行移位變換完成基於行的循環移位操作,變換方法為:第0行不變,第1行循環左移1個位元組,第2行循環左移兩個位元組,第3行循環左移3個位元組

正向行移位:

正向行移位用於加密,其原理圖如下。其中:第一行保持不變,第二行循環左移8比特,第三行循環左移16比特,第四行循環左移24比特。

假設矩陣的名字為state,用公式表示如下:

其中i、j屬於[0,3]2) 逆向行移位,逆向行移位即是相反的操作,即:第一行保持不變,第二行循環右移8比特,第三行循環右移16比特,第四行循環右移24比特。

用公式表示如下:

其中i、j屬於[0,3]列混淆MixColumns。

列混淆:利用域GF(2^8)上算術特性的一個代替,同樣用於提供演算法的擴散性。

在MixColumns步驟,每一列的四個位元組通過線性變換互相結合。

每一列當做上元素的係數合併成為一個一個多項式,接著將此多項式和一個固定的多項式

在模下

乘起來,若兩個多項式進行乘法運算,運算的方法為兩個多項式相乘,若運算的結果超過8次方,則必須對此結果對一個多項式m(x)進行模運算。AES演算法中,這個8次不可約多項式確定為m(x)=x^8+x^4+x^3+x+1。


該部分就是把上一步的結果和密鑰進行異或;得到的結果作為初始值,重複以上操作9次。第10次的時候不執行MixColumns直接和密鑰求異或操作,得到的最終結果就是密文。

第n組第i列 為 第n-1組第i列 與 第n組第i-1列之和(模2加法,1

對於每一組 第一列即i=0,有特殊的處理:

將前一列即第n-1組第3列的4個位元組循環左移1個位元組,

並對每個位元組進行位元組替代變換SubBytes。

將第一行(即第一個位元組)與輪常量rc[n]相加 ,

最後再與前一組該列相加。

這裡的rc[n]是個定值:

在AddRoundKey步驟中,將每個狀態中的位元組與該回合密鑰做異或(⊕)。AddRoundKey步驟,回合密鑰將會與原矩陣合併。在每次的加密循環中,都會由主密鑰產生一把回合密鑰(通過Rijndael密鑰生成方案產生),這把密鑰大小會跟原矩陣一樣,以與原矩陣中每個對應的位元組作異或(⊕)加法。


AES解密演算法與加密不同,基本運算中除了AddRoundKey(輪密鑰加)不變外,其餘的都需要進行逆變換即

InvSubBytes(逆位元組替代)

InvShiftRows(逆行移位)

InvMixColumns(逆列混淆)


截至2006年,針對AES唯一的成功攻擊是旁道攻擊,新的 AES 將無疑成為加密所有形式電子信息的事實上的標準,取代 DES。AES 加密的數據在某種意義上是安全的,因為沒有已知的密碼分析攻擊可以解密 AES 密文,除非強行遍歷搜索所有可能的 256 位密鑰。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 瘋貓網路 的精彩文章:

PowerView:一個可以幫助你躲避檢測的內網信息收集腳本
登錄框之另類思考:來自客戶端的欺騙

TAG:瘋貓網路 |