前言
在密碼學中,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取代。
字節替換SubBytes
字節代替的主要功能是通過S盒完成一個字節到另外一個字節的映射。
步驟SubBytes,又稱作S盒,它是AES加密過程中唯一的非線性變換。他是一個磚匠置換,該置換包含一個作用在狀態字節上的S盒,用Srd表示AES中特使用的特定的S盒。
1.非線性度:
輸入輸出之間最大相關幅度必須盡可能小。
差分傳播概率最大值必需盡可能小。
2.數復雜度
在GF(2^8)中Srd應當具有復雜的代數表達式
字節代替最主要的運算就是根據表2-1進行加密。
例:
上圖為需要加密的密碼塊其中可以直接查表:如19就對應著0xd4;a0對應0xe0;…
行移位ShiftRows
行移位是一個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,用公式表示如下:
state’[i][j] = state[i][(j + i) % 4]
其中i、j屬于[0,3]2) 逆向行移位,逆向行移位即是相反的操作,即:第一行保持不變,第二行循環右移8比特,第三行循環右移16比特,第四行循環右移24比特。
用公式表示如下:
state’[i][j] = state[i][(4 + j -i) % 4]
其中i、j屬于[0,3]列混淆MixColumns。
列混淆:利用域GF(2^8)上算術特性的一個代替,同樣用于提供算法的擴散性。
在MixColumns步驟,每一列的四個字節通過線性變換互相結合。
每一列當做上元素的系數合并成為一個一個多項式,接著將此多項式和一個固定的多項式在模下
乘起來,若兩個多項式進行乘法運算,運算的方法為兩個多項式相乘,若運算的結果超過8次方,則必須對此結果對一個多項式m(x)進行模運算。AES算法中,這個8次不可約多項式確定為m(x)=x^8+x^4+x^3+x+1。
輪密鑰相加AddRoundKey
該部分就是把上一步的結果和密鑰進行異或;得到的結果作為初始值,重復以上操作9次。第10次的時候不執行MixColumns直接和密鑰求異或操作,得到的最終結果就是密文。
第n組第i列 為 第n-1組第i列 與 第n組第i-1列之和(模2加法,1<= i <=3)
對于每一組 第一列即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 位密鑰。
1024你懂的国产日韩欧美_亚洲欧美色一区二区三区_久久五月丁香合缴情网_99爱之精品网站
責任編輯:韓希宇
免責聲明:
中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。