AES加密

AES(Advanced Encryption Standard) 高級(jí)加密標(biāo)準(zhǔn),是 DES(Data Encryption Standard) 之后的一種對(duì)稱分組加密方式(關(guān)于對(duì)稱加密和非對(duì)稱加密可以參考我之前寫(xiě)的一篇文章 HTTPS從原理到應(yīng)用(一):加密(Encrypt)與哈希(Hash) )。DES 的密鑰長(zhǎng)度為 56bits对室, AES 主要是為了解決 DES 密鑰太短以致于不能提供足夠安全的問(wèn)題。 AES 是美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所 (National Institute of Standards and Technology: NIST) 面向世界征集的一個(gè)算法,從最終獲勝的 Rijndael 算法改進(jìn)而來(lái)的额划, Rijndael 算法是一個(gè)分組密碼算法族渴逻,其分組長(zhǎng)度包括 128bits 160bits 192bits 224bits 256bits 疾党,密鑰長(zhǎng)度也包括這五種長(zhǎng)度;但是最終 AES 只選取了分組長(zhǎng)度為 128bits 裸卫,密鑰長(zhǎng)度為 128bits 192bits 256bits 的三個(gè)版本仿贬。下面以密鑰長(zhǎng)度為 128bits 為例進(jìn)行講解。

算法步驟

先看下圖墓贿,根據(jù)圖來(lái)講解茧泪,比較好理解:

圖1-0 AES加密過(guò)程圖

從上圖可知加密過(guò)程需要的運(yùn)算有 SubBytes ShiftRows MixColumns AddRoundKey Key Schedule。首先明文 128位(16字節(jié))聋袋,分成一個(gè) 4 x 4 的矩陣(列優(yōu)先排序)队伟,先做一次 AddRoundKey 運(yùn)算,然后重復(fù)9次幽勒,SubBytes ShiftRows MixColumns AddRoundKey 運(yùn)算這9次過(guò)后嗜侮,在重復(fù)一次但是最后這一次沒(méi)有 MixColumns 步驟,上述中的每一次 AddRoundKey啥容,都需要密鑰锈颗,除了第一次是初始密鑰,后面的密鑰都是根據(jù)初始密鑰經(jīng)過(guò) KeySchedule 變換而來(lái)咪惠。AES的解密過(guò)程為加密過(guò)程的逆運(yùn)算击吱,就沒(méi)有畫(huà)圖。下面分別具體來(lái)講 SubBytes ShiftRows MixColumns AddRoundKey Key Schedule遥昧。

SubBytes

矩陣中的各字節(jié)通過(guò)一個(gè) 8 位的 S-box 進(jìn)行轉(zhuǎn)換覆醇,用于提供算法的混淆性朵纷。。關(guān)于 S-box 的構(gòu)造這里不做敘述永脓,S-box 以及 S-box的逆 如下圖:

圖1-1 S-box
圖1-2 Inverse S-box

舉例:字節(jié) 00000000袍辞,高四位的值對(duì)應(yīng) x 軸,低四位的值對(duì)應(yīng) y 軸常摧,對(duì)應(yīng)S-box表可知搅吁,字節(jié)00000000 SubBytes 后轉(zhuǎn)換為字節(jié)0x63。在根據(jù)逆S-box表排宰,字節(jié) 0x63 SubBytes 后轉(zhuǎn)換為字節(jié)0x00似芝。

ShiftRows

行移位是一個(gè) 4 x 4 的矩陣內(nèi)部字節(jié)之間的置換,用于提供算法的擴(kuò)散性板甘。正向行移位党瓮,第一行不變,第二行向左移動(dòng) 8bit 位盐类,第三行向左移動(dòng)16bit 位寞奸,第四行向左移動(dòng) 24bit 位。反向行移位在跳,第一行不變枪萄,第二行向右移動(dòng) 8bit 位,第三行向右移動(dòng) 16bit 位猫妙,第四行向右移動(dòng) 24bit 位瓷翻。

圖1-3 ShiftRows
MixColumns

每一列的四個(gè)字節(jié)通過(guò)線性變換互相結(jié)合,用于提供算法的擴(kuò)散性割坠。具體運(yùn)算看下圖齐帚。

圖1-4 正向MixColumns
圖1-5 逆向MixColumns
圖1-6 正向MixColumns、逆向MixColumns用的矩陣互逆

由矩陣的乘法運(yùn)算可知彼哼,運(yùn)算后矩陣中的每個(gè)字節(jié)只與該列的 4 個(gè)值有關(guān)对妄,所以這個(gè)操作列混淆。另外此處的乘法和加法都是定義在 有限域GF(2^8)上的多項(xiàng)式模運(yùn)算 敢朱。 圖1-5逆向MixColumns運(yùn)算 剪菱, 圖1-6 表示正向和逆向所用的矩陣互逆,這樣才可以進(jìn)行解密運(yùn)算拴签。這一塊要稍微有一點(diǎn)數(shù)學(xué)基礎(chǔ)才能理解孝常,要知道線性代數(shù)中的 矩陣運(yùn)算有限域GF(2^8)上的多項(xiàng)式模運(yùn)算 。關(guān)于這兩點(diǎn)我不過(guò)多描述蚓哩,感覺(jué)興趣的同學(xué)可以下去查資料或者跟我私下交流溝通构灸。

AddRoundKey

這個(gè)步驟比較簡(jiǎn)單,矩陣中的每一個(gè)字節(jié)都與該次輪秘鑰(round key)做異或運(yùn)算杖剪。

圖1-7 AddRoundKey
Key Schedule

AddRoundKey 這個(gè)步驟冻押,除第一次是使用原始密鑰,后續(xù)的步驟都是通過(guò)對(duì)原始密鑰進(jìn)行密鑰擴(kuò)展而來(lái)的盛嘿。具體擴(kuò)展步驟如下圖所示:

圖1-8 Key Schedule

將原始密鑰以字節(jié)按上圖 K0 K1 ... K15 的順序排列洛巢,也是第一次做
AddRoundKey 運(yùn)算時(shí)用到的矩陣。第二次做 AddRoundKey 運(yùn)算時(shí)次兆,已經(jīng)是密鑰擴(kuò)展之后的密鑰了稿茉。擴(kuò)展步驟為上圖所示, K41 列通過(guò) K0 列和
K12 列做一次 ShiftColumns 然后在做一次 SubBytes 和最下面矩陣的 第一列 做異或運(yùn)算芥炭,求出 K41 列漓库;然后 K51 列為 K4 列與 K41 列異或,
K61 列為 K8 列與 K51 列異或园蝠, K71 列為 K12 列與 K61 列異或渺蒿。這樣就求出了第二次 AddRoundKey 運(yùn)算所用到的矩陣。第三次彪薛,同樣按這個(gè)步驟茂装,有兩點(diǎn)需要注意:

  • 原始矩陣為第二次 AddRoundKey 運(yùn)算用到的 K41 這個(gè)矩陣,
  • 計(jì)算矩陣第一列值的時(shí)候善延,要使用下面矩陣的第二列少态,即 02 那一列。

下面矩陣有 10 列易遣,以此可求出 10 個(gè)矩陣彼妻,分別對(duì)應(yīng)除第一次使用原始密鑰的后面 10AddRoundKey 運(yùn)算。

總結(jié)

AES 是一種對(duì)稱分組密碼豆茫,對(duì)稱密碼我已經(jīng)講解過(guò)侨歉,分組密碼是將一個(gè)明文分組作為整體加密并且通常得到的是與明文等長(zhǎng)的密文分組。分組密碼澜薄,有不同的工作模式为肮,主要是為了增強(qiáng)密碼算法,或者使算法適應(yīng)具體應(yīng)用的技術(shù)肤京。工作模式有電碼本模式(ECB)颊艳,密文分組鏈接模式(CBC),密文反饋模式(CFB)忘分,輸出反饋模式(OFB)棋枕,計(jì)數(shù)器模式(CTR)。此篇文章妒峦,主要講述 AES加密 的步驟重斑,這些工作模式,以及 SubBytesS-box 的構(gòu)造肯骇,和 有限域GF(2^8)上的多項(xiàng)式模運(yùn)算 都沒(méi)有做過(guò)多的講解窥浪;另外這兒也沒(méi)有給出實(shí)現(xiàn)的代碼祖很,這個(gè)后續(xù)會(huì)補(bǔ)上。若有疑問(wèn)歡迎探討漾脂,若是對(duì)我沒(méi)有提到的幾個(gè)點(diǎn)有興趣假颇,可以查相關(guān)資料去了解,也可以和我探討骨稿。這是一系列文章的其中一篇笨鸡,你可以在這兒Encode & Decode集序找到他其他的兄弟。

參考

  • 密碼算法詳解——AES
  • AES加密算法圖解
  • William Stallings著. 王張宜坦冠,楊敏形耗,杜瑞穎,等譯. 密碼編碼學(xué)與網(wǎng)絡(luò)安全 —— 原理與實(shí)踐(第五版)[M]. 北京:電子工業(yè)出版社辙浑,2012.1.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末激涤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子例衍,更是在濱河造成了極大的恐慌昔期,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佛玄,死亡現(xiàn)場(chǎng)離奇詭異硼一,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)梦抢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)般贼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人奥吩,你說(shuō)我怎么就攤上這事哼蛆。” “怎么了霞赫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵腮介,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我端衰,道長(zhǎng)叠洗,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任旅东,我火速辦了婚禮灭抑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抵代。我一直安慰自己腾节,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著案腺,像睡著了一般庆冕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劈榨,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天愧杯,我揣著相機(jī)與錄音,去河邊找鬼鞋既。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耍铜,可吹牛的內(nèi)容都是我干的邑闺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棕兼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陡舅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起伴挚,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤靶衍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后茎芋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體颅眶,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年田弥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涛酗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡偷厦,死狀恐怖商叹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情只泼,我是刑警寧澤剖笙,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站请唱,受9級(jí)特大地震影響弥咪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜籍滴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一酪夷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孽惰,春花似錦晚岭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)库说。三九已至,卻和暖如春片择,著一層夾襖步出監(jiān)牢的瞬間潜的,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工字管, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啰挪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓嘲叔,卻偏偏與公主長(zhǎng)得像亡呵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子硫戈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 高級(jí)加密標(biāo)準(zhǔn)(英語(yǔ):Advanced EncryptionStandard锰什,縮寫(xiě):AES),在密碼學(xué)中又稱Rijn...
    黃曉果閱讀 11,066評(píng)論 0 2
  • 引用 AES加密算法原理AES加密算法的C++實(shí)現(xiàn)密碼算法詳解——AES(高級(jí)加密算法) 1. 前言 本文針對(duì)加密...
    碼夢(mèng)的一生閱讀 15,607評(píng)論 2 3
  • 維基百科中對(duì)AES加密的解釋是這樣的: 高級(jí)加密標(biāo)準(zhǔn)(英語(yǔ):Advanced Encryption Standar...
    Originalee閱讀 7,997評(píng)論 9 32
  • 這篇文章主要講述在Mobile BI(移動(dòng)商務(wù)智能)開(kāi)發(fā)過(guò)程中丁逝,在網(wǎng)絡(luò)通信汁胆、數(shù)據(jù)存儲(chǔ)、登錄驗(yàn)證這幾個(gè)方面涉及的加密...
    雨_樹(shù)閱讀 2,426評(píng)論 0 6
  • 1進(jìn)學(xué)生會(huì)是能鍛煉你的能力霜幼,但是并不是每個(gè)人都要進(jìn)去嫩码,學(xué)習(xí)仍然是第一要?jiǎng)?wù),不能耽擱 2利用空余時(shí)間多開(kāi)闊眼界罪既,出去...
    毒舌至吻閱讀 233評(píng)論 0 1