【密碼學(xué)系列】 || 揭秘AES算法的神秘之處!

微信公眾號:龍躍十二
持續(xù)更新,歡迎關(guān)注!

用心分享,共同成長

沒有什么比你每天進步一點點更實在了

本文已經(jīng)收錄至我的GitHub,歡迎大家踴躍star??。
GitHub
哎,在這一周被迫營業(yè)的日子里呢,發(fā)生了一些讓人匪夷所思、琢磨不透的事情,你說我這么一個女孩子,除了看過李佳琪的直播,還沒著迷過別的男主播,這不,夢想照進現(xiàn)實,是什么逼迫我的老師們也成了主播,而我成了在直播間刷禮物的<font face="黑體" color=orange size=3>精神小伙</font>。

<img src="https://tva1.sinaimg.cn/large/00831rSTly1gci2h5o0daj307s06v3yl.jpg" style="zoom:67%;" />

雖然學(xué)校得要正常營業(yè),但是日常輸出也必不可少,今天分享的是一個對于密碼學(xué)界來說非常重要的算法,這么說你是不是還是體會不到它的重要性,那就比如說,它就像是口紅里的Dior,包包里的愛馬仕......不說了,錢包疼

AES算法:(Advanced Encryption Standard)

??介紹:

AES(Advanced Encryption Standard)算法,高級加密標(biāo)準(zhǔn),在密碼學(xué)中又稱Rijndael加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。

在對 AES 設(shè)計之初呢,就有三個基本要求:

  • 比三重DES 快

  • 至少與三重 DES 一樣安全

  • 數(shù)據(jù)分組長度為 128 比特、密鑰長度為 128/ 192/ 256 比特。

對DES還有疑問的朋友可以看看我之前的文章 聊聊密碼學(xué)中的DES算法二重DES、三重DES詳解

??說明:

其實,從嚴格意義上講,AES和Rijndael加密法又不完全一樣,但是在實際應(yīng)用中,我們常常將兩者交換使用。

我們來看一組對比數(shù)據(jù):

  • AES的分組長度為128 比特,密鑰長度則可以是128,192或256比特;
  • 而Rijndael算法的分組長度和密鑰長度可以是32比特的整數(shù)倍(下限:128bit,上限:256bit)

相對于AES來說,Rijndael算法使用更加不受約束。Rijndael算法可以支持更大范圍的分組長度和密鑰長度。

類似于明文分組和密文分組,算法的中間結(jié)果也須分組,將這種分組成為“狀態(tài)”, 所有的操作都在狀態(tài)上進行。例如:AES加密過程是在一個4×4的字節(jié)矩陣上運作,這個矩陣就稱為“狀態(tài)”,其初值就是一個明文分組(矩陣中一個元素大小就是明文分組中的一個Byte)。對于Rijndael算法來說,其加密時明文分組長度不定,其矩陣的大小需要根據(jù)具體情況來定。

加密時,AES算法的加密過程都包含4個步驟:

  • SubBytes(字節(jié)代替):通過非線性替換函數(shù),用查找表的方式,獨立的對每個字節(jié)進行替換。代換表 (也就是S-盒) 都是可逆(也就是說替換以后的字節(jié)可以通過查表找到原始的字節(jié))。

  • ShiftRows(行移位):目的就是將矩陣中的橫和列,進行循環(huán)式移位。

  • MixColumns(列混淆):列混淆的方法就是使用線性轉(zhuǎn)換將每列的四個字節(jié)進行混合。為了充分混合矩陣中各個行,而進行的一步。

  • AddRoundKey(輪密鑰加):矩陣中的各個字節(jié)都要與輪秘鑰進行異或(XOR)運算,從而生產(chǎn)子密鑰。

最后一個加密循環(huán)中略微有所不同。

綜上所述,組成 Rijndael 輪函數(shù)的計算部件簡捷快速,功能互補。輪函數(shù)的偽 C 代碼如下:

Round (State , RoundKey) 
{ 
ByteSub (State ) ; 
ShiftRow (State ) ; 
MixColumn (Sta te) ; 
AddRoundKey (State , RoundKey) 
}

最后一個加密循環(huán)的輪函數(shù)與前面各輪不同,需要將 MixColumn 這一步去掉,其偽 C 代碼如下:

FinalRound ( State , RoundKey) 
{ 
ByteSub (State ) ; 
ShiftRow (State ) ; 
AddRoundKey (State , RoundKey) 
}

注:在以上偽 C 代碼記法中, State、RoundKey 可用指針類型,函數(shù) Round、FinalRound、 ByteSub、Shift Row、MixColumn、AddRoundKey 都在指針 State、RoundKey 所指向的陣列上進行運算。

加密標(biāo)準(zhǔn):

AES為分組密碼,在加密時需要把明文分成長度相等的小組,每次對一組數(shù)據(jù)進行加密。在AES標(biāo)準(zhǔn)規(guī)范中,分組長度只能是128位,也就是說,每個分組為16個字節(jié)(每個字節(jié)8位)。AES的密鑰長度可以是128bit、192bit或256bit。密鑰的長度不同,所需要的加密輪數(shù)也會不相同,具體情況如下圖所示:

AES 密鑰長度(32位比特字) 分組長度(32位比特字) 加密輪數(shù)
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14

密鑰編排

密鑰編排指從種子密鑰得到輪密鑰的過程, 它由密鑰擴展和輪密鑰選取兩部分組成。

其基本原則如下:

  • 輪密鑰的比特數(shù)等于分組長度乘以輪數(shù)加 1。

  • 種子密鑰被擴展成為擴展密鑰。

加密算法:

加密算法的操作順序:初始的密鑰加,( Nr-1) 輪迭代,一個結(jié)尾輪。即:

Rijndael (State , Ciphe rKey) 
{ 
KeyExpansion (Ciphe rKey , ExpandedKey) ; 
AddRoundKey (State , ExpandedKey) ; 
for ( i=1; i< Nr; i++) Round (State , ExpandedKey + Nb*i) ;
FinalRound (State, ExpandedKey + Nb*Nr)
} 

其中 CipherKey 是種子密鑰,ExpandedKey 是擴展密鑰。密鑰擴展可以事先進行 ( 預(yù)算) ,且 Rijndael 密碼的加密算法可以用這一擴展密鑰來描述, 即 :

Rijndael (State , ExpandedKey) 
{ 
AddRoundKey (State , ExpandedKey) ; 
for ( i=1; i< Nr ; i++) Round (State , ExpandedKey+Nb*i) ;
FinalRound (State, ExpandedKey + Nb*Nr)
}

解密算法:

解密算法的操作順序: 初始的密鑰加,( Nr-1) 輪迭代, 一個結(jié)尾輪。

其中解密算法的輪函數(shù)為 :

InvRound (Sta te, RoundKey) 
{ 
InvByteSub ( State ) ; 
InvShiftRow ( State ) ; 
InvMixColumn (State ) ; 
AddRoundKey (State , RoundKey) 
} 

解密算法的結(jié)尾輪為 :

InvFinalRound (State, RoundKey) 
{ 
InvByteSub ( State ) ; 
InvShiftRow ( State ) ; 
AddRoundKey (State , RoundKey) 
}

關(guān)于AES算法最主要的就是要明白它的加密步驟,明文分組,以及密鑰的使用,給大家貼了很多關(guān)于輪函數(shù)在AES算使用所需的代碼塊,需要的小伙伴自取哦!

關(guān)于文章中有任何問題,都可以關(guān)注公眾號【龍躍十二】,在后臺聯(lián)系作者!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄一、對稱加密?1、對稱加密是什么?2、對稱加密的優(yōu)點?3、對稱加密的問題?4、對稱加密的應(yīng)用場景?5、對稱加密...
    意一ineyee閱讀 62,620評論 8 110
  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 3,057評論 0 6
  • 昨天一天都在沉迷于英語課文的翻譯以及課后習(xí)題的理解記憶。 其實在這個過程中,絲毫不去想是不是會考到?是否是在做無用...
    夜景_Y閱讀 100評論 0 1
  • 超時空的爸爸: 你好呀! 1988年,我們的關(guān)系應(yīng)該被叫做陌生人吧,一直在幻想,如果有一次穿越的機...
    愛聽冷笑話的熱水壺閱讀 259評論 0 3
  • 你想的越多,遇到的麻煩就會越多; 什么都不想,反倒一點麻煩沒有。 你怕的越多,欺負你的人就越多; 什么都不怕了,反...
    25e6a8f37b9b閱讀 153評論 0 0

友情鏈接更多精彩內(nèi)容