,aes的基本要求是:比三重des快、至少與三重des一樣安全、資料分組長度為128-bit、金鑰長度為128/192/256-bit,對應於金鑰的不同長度,加密輪的次數也不盡相同。選定rijndael演算法為新的aes演算法。演算法的原型是square演算法,其設計策略為寬軌跡策略(針對差分分析和線性分析提出的,最大優點是可以給出演算法的最佳差分特徵的概率以及最佳線性逼近的偏差的界;由此可以分析演算法抵抗差分密碼分析以及線性密碼分析的能力。)
aes加密標準是當下最廣泛使用的對稱金鑰加密體系。aes加密標準已經廣泛應用在網際網路安全領域,譬如ipsec、tls、wi-fi加密標準ieee 802.11i、ssh、skype等領域。
rijndael沒有feistel結構,其輪函式是由三個不同的可逆均勻變換(每個位元都是用類似的方法進行處理的)組成的,稱它們為3個「層」。不同的層選擇的大部分是建立在「寬軌跡策略」的應用基礎之上。
在第一輪之前,用了乙個初始金鑰加層(其目的為在不知道金鑰的情況下,對最後乙個金鑰加層以後的任一曾可簡單地剝去,因此初始金鑰加層對密碼的安全性無任何意義。為了使加密演算法和解密演算法在結構上更加接近,最後一輪的線性混合曾與前面各輪的線性混合層不同,這類似於des的最後一輪不做左右交換(這種設計不以任何方式提高或降低該密碼的安全性)
該演算法是乙個迭代型分組密碼,分組長度和金鑰長度都可改變,各自可以獨自地制定為128-bit、192-bit、256-bit
演算法的中間結果需要進行分組,稱該分組為狀態。所有的操作都在狀態上進行。狀態可以用以位元組為元素的矩陣陣列表示,該陣列有4行,列數計為nb。nb等於分組長度除以32。
種子金鑰類似地用乙個以位元組為元素的矩陣陣列表示,該陣列有4行,列數記為nk,nk等於分組長度除以32。
當然,可以將這些分組看成一維陣列,陣列中的每乙個元素是上述陣列中的四個位元組元素組成的列向量,顯然,陣列的長度可以分為4,6,8三種。四個位元組的元素構成的列向量有時也稱為字。
演算法的輸入和輸出被看作是由8-bit位元組構成的一維陣列,其元素的下標範圍為0(4nb-1),因此,輸入和輸出以位元組為單位的分組長度分別為16,24和32。輸入的種子金鑰也堪稱是由8-bit位元組構成的一維陣列,其下標的範圍為0(4nb-1)。因此,種子金鑰以位元組為單位的分組長度也分別為16,24和32。
演算法的輸入是以位元組為單位,按照列優先的順序依次填入矩陣中。金鑰也是一樣。而輸出也同樣是依照相同的順序取出。
迭代的輪數計為nr,該數值與nb和nk相關
nrnb=4
nb=6
nb=8
nk=4
1012
14nk=6
1212
14nk=8
1414
14rijndael的輪函式由4個不同的計算部件組成:位元組代換(bytesub)、行移位(shiftrow)、列混合(mixcolumn)、金鑰加(addroundkey)
位元組代換
位元組代換是非線性變換,獨立地對狀態的每個位元組進行。代換表(s-box)是可逆的。
將位元組看作gf(2^8)上的元素,對映到自己的乘法逆元,'00'對映到自己。(可以通過矩陣計算得出)
對位元組做仿射變換
行移位將狀態陣列的各行進行迴圈移位,不同用的狀態行的位移量不同。第0行不移動,第1行迴圈左移c1個位元組,第二行迴圈左移c2個位元組,第三行迴圈左移c3個位元組。
nbc1
c2c341
2361
2381
34列混合金鑰加
金鑰加時將輪金鑰簡單地與狀態進行逐行比特異或。輪金鑰由種子金鑰通過金鑰編排演算法得到,輪金鑰長度等於分組長度nb
由金鑰擴充套件和輪金鑰選取兩部分組成,其基本原則如下
金鑰擴充套件
擴充套件金鑰以4位元組為元素的一維陣列
擴充套件演算法會根據nk<=6和nk>6有不同
當nk<=6時,擴充套件演算法如下:
keyexpansion(byte key[4 * nk], w[nb * (nr + 1]){
for(i = 0; i < nk; i++){
w[i] = (key[4 * i], key[4 * i + 1], key[4 * i + 2], key[4 * i + 3]);
for(i = nk; i < nb * (nr + 1); i++){
temp = w[i - 1];
if(i % nb == 0) temp = subbyte(rotbyte(temp))^rcon[i / nk];
w[i] = w[i - nk] ^ temp;
其中key[4 * nk]為種子金鑰。函式subbyte返回4位元組字,其中每乙個位元組都是用rijndael的s盒作用到輸入字對應的位元組得到。函式rotbyte也返回4位元組字,由輸入的字迴圈移位得到。
當nk>6時,擴充套件演算法如下:
keyexpansion(byte key[4 * nk], w[nb * (nr + 1]){
for(i = 0; i < nk; i++){
w[i] = (key[4 * i], key[4 * i + 1], key[4 * i + 2], key[4 * i + 3]);
for(i = nk; i < nb * (nr + 1); i++){
temp = w[i - 1];
if(i % nb == 0) temp = subbyte(rotbyte(temp))^rcon[i / nk];
w[i] = w[i - nk] ^ temp;
AES加密演算法
aes加密演算法 加密模式 ecb模式 優點 1.簡單 2.有利於平行計算 3.誤差不會被傳送 缺點 1.不能隱藏明文的模式 2.可能對明文進行主動攻擊 cbc模式 優點 1.不容易主動攻擊,安全性好於ecb,適合傳輸長度長的報文,是ssl ipsec的標準。缺點 1.不利於平行計算 2.誤差傳遞 ...
AES加密演算法
aes對稱加密演算法下有好多種演算法,往往很難做到垮語言的加密解密,本文提供一套c 和node.js可以相互加密解密通用的 之aes 256 cbc演算法 1 aes所有的鑰匙必須 128位 16位元組 192位 24位元組 或256位 32位元組 長 2 有幾種操作模式,每個都有不同的優點和缺點。...
AES加密演算法 C
先搞定aes演算法,基本變換包括subbytes 位元組替代 shiftrows 行移位 mixcolumns 列混淆 addroundkey 輪金鑰加 其演算法一般描述為 明文及金鑰的組織排列方式 bytesubstitution 位元組替代 非線性的位元組替代,單獨處理每個位元組 求該位元組在有...