AES 算法簡介

?xml version="1.0" encoding="UTF-8"?

美國國家標準技術(shù)研究所在 2001 年發(fā)布了高級加密標準(AES)坑质。AES 是一個對稱分組密碼算法搪缨,旨在取代 DES 成為廣泛使用的標準潜沦。

根據(jù)使用的密碼長度枉昏,AES 最常見的有 3 種方案,用以適應(yīng)不同的場景要求妄帘,分別是 AES-128楞黄、AES-192 和 AES-256。本文主要對 AES-128 進行介紹抡驼,另外兩種的思路基本一樣鬼廓,只是輪數(shù)會適當增加。

1 算法流程

AES 加解密的流程圖如下:

AES 加密過程涉及到 4 種操作:字節(jié)替代(SubBytes)致盟、行移位(ShiftRows)碎税、列混淆(MixColumns)和輪密鑰加(AddRoundKey)。

解密過程分別為對應(yīng)的逆操作馏锡。由于每一步操作都是可逆的雷蹂,按照相反的順序進行解密即可恢復明文。

加解密中每輪的密鑰分別由初始密鑰擴展得到杯道。算法中 16 字節(jié)的明文匪煌、密文和輪密鑰都以一個 4x4 的矩陣表示。

接下來分別對上述 5 種操作進行介紹党巾。

1.1 字節(jié)替代

字節(jié)代替的主要功能是通過 S 盒完成一個字節(jié)到另外一個字節(jié)的映射萎庭。S 盒的詳細構(gòu)造方法可以參考文獻[1]。

下圖(a)為 S 盒齿拂,圖(b)為 S-1(S盒的逆)驳规。

S 和 S-1?分別為 16x16 的矩陣。假設(shè)輸入字節(jié)的值為 a=a7a6a5a4a3a2a1a0署海,則輸出值為 S[a7a6a5a4][a3a2a1a0]达舒,S-1?的變換也同理。

例如:字節(jié) 00 替換后的值為(S[0][0]=)63叹侄,再通過 S-1?即可得到替換前的值巩搏,(S-1?[6][3]=)00。

1.2 行移位

行移位的功能是實現(xiàn)一個 4x4 矩陣內(nèi)部字節(jié)之間的置換趾代。

1.2.1 正向行移位

正向行移位的原理圖如下:

實際移位的操作即是:第一行保存不變贯底,第二行循環(huán)左移 1 個字節(jié),第三行循環(huán)左移 2 個字節(jié)撒强,第四行循環(huán)左移 3 個字節(jié)禽捆。

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

state’[i][j] = state[i][(j+i)%4]; 其中 i飘哨、j 屬于 [0,3]

1.2.2 逆向行移位

逆向行移位即是相反的操作胚想,用公式表示如下:

state’[i][j] = state[i][(4+j-i)%4]; 其中 i、j 屬于 [0,3]

1.3 列混淆

列混淆:利用 GF(28) 域上算術(shù)特性的一個代替芽隆。

1.3.1 正向列混淆

正向列混淆的原理圖如下:

根據(jù)矩陣的乘法可知啄栓,在列混淆的過程中,每個字節(jié)對應(yīng)的值只與該列的 4 個值有關(guān)系躏仇。此處的乘法和加法都是定義在 GF(28) 上的,需要注意如下幾點:

1)?將某個字節(jié)所對應(yīng)的值乘以 2愁憔,其結(jié)果就是將該值的二進制位左移一位,如果該值的最高位為 1(表示該數(shù)值不小于 128)孽拷,則還需要將移位后的結(jié)果異或 00011011吨掌;[1]

2)?乘法對加法滿足分配率,例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,0⊕(02·S0,0)(04·S0,0)

3)?此處的矩陣乘法與一般意義上矩陣的乘法有所不同脓恕,各個值在相加時使用的是模 2 加法(相當于是異或運算)膜宋。


假設(shè)某一列的值如下圖,運算過程如下:




同理可以求出另外幾個值炼幔。

1.3.2 逆向列混淆

逆向列混淆的原理圖如下:


由于:


說明兩個矩陣互逆秋茫,經(jīng)過一次逆向列混淆后即可恢復原文。

1.4 輪密碼加

任何數(shù)和自身的異或結(jié)果為0江掩。加密過程中学辱,每輪的輸入與輪密鑰異或一次乘瓤;因此环形,解密時再異或上該輪的密鑰即可恢復輸入。

1.5 密鑰擴展

密鑰擴展的原理圖如下:


密鑰擴展過程說明:

1)??將初始密鑰以列為主衙傀,轉(zhuǎn)化為 4 個 32 bits 的字抬吟,分別記為 w[0…3];

2)??按照如下方式统抬,依次求解 w[j]火本,其中 j 是整數(shù)并且屬于 [4,43];

3)??若 j%4=0聪建,則 w[j]=w[j-4]⊕g(w[j-1])钙畔,否則 w[j]=w[j-4]⊕w[j-1];


函數(shù) g 的流程說明:

4)??將 w 循環(huán)左移一個字節(jié)金麸;

5)??分別對每個字節(jié)按 S 盒進行映射擎析;

6)??與 32 bits 的常量(RC[j/4],0,0,0)進行異或,RC 是一個一維數(shù)組挥下,其值如下揍魂。(RC 的值只需要有 10 個,而此處用了 11 個棚瘟,實際上 RC[0] 在運算中沒有用到现斋,增加 RC[0] 是為了便于程序中用數(shù)組表示。由于 j 的最小取值是 4偎蘸,j/4 的最小取值則是 1庄蹋,因此不會產(chǎn)生錯誤瞬内。)

RC = {00, 01, 02, 04, 08, 10, 20, 40, 80, 1B, 36}

2 源碼

  在 GitHub 上找到的 AES 實現(xiàn)代碼,感覺寫得不錯蔓肯。

  https://github.com/dhuertas/AES/blob/master/aes.c

3 參考文獻

[1] William Stallings著遂鹊;王張宜等譯. 密碼編碼學與網(wǎng)絡(luò)安全——原理與實踐(第五版)[M]. 北京:電子工業(yè)出版社,2011.1.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔗包,一起剝皮案震驚了整個濱河市秉扑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌调限,老刑警劉巖舟陆,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耻矮,居然都是意外死亡秦躯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門裆装,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踱承,“玉大人,你說我怎么就攤上這事哨免【セ睿” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵琢唾,是天一觀的道長载荔。 經(jīng)常有香客問我,道長采桃,這世上最難降的妖魔是什么懒熙? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮普办,結(jié)果婚禮上工扎,老公的妹妹穿的比我還像新娘。我一直安慰自己衔蹲,他們只是感情好肢娘,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著踪危,像睡著了一般蔬浙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贞远,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天畴博,我揣著相機與錄音,去河邊找鬼蓝仲。 笑死俱病,一個胖子當著我的面吹牛官疲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亮隙,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼途凫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了溢吻?” 一聲冷哼從身側(cè)響起维费,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎促王,沒想到半個月后犀盟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蝇狼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年阅畴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迅耘。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贱枣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颤专,到底是詐尸還是另有隱情纽哥,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布血公,位于F島的核電站昵仅,受9級特大地震影響缓熟,放射性物質(zhì)發(fā)生泄漏累魔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一够滑、第九天 我趴在偏房一處隱蔽的房頂上張望垦写。 院中可真熱鬧,春花似錦彰触、人聲如沸梯投。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽分蓖。三九已至,卻和暖如春尔许,著一層夾襖步出監(jiān)牢的瞬間么鹤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工味廊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒸甜,地道東北人棠耕。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像柠新,于是被迫代替她去往敵國和親窍荧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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

  • 目錄一咕痛、對稱加密?1、對稱加密是什么?2喇嘱、對稱加密的優(yōu)點?3茉贡、對稱加密的問題?4、對稱加密的應(yīng)用場景?5者铜、對稱加密...
    意一ineyee閱讀 61,906評論 8 110
  • 上次的文章中對常用的加密算法進行了一些簡單的介紹腔丧,這次我們就挑一個出來說說,今天的主角的是對稱加密中的當頭大哥AE...
    張囧瑞閱讀 23,748評論 10 31
  • 轉(zhuǎn):https://www.cnblogs.com/luop/p/4334160.html 我們知道數(shù)據(jù)加密標準(...
    right_33cb閱讀 1,279評論 1 1
  • 引用 AES加密算法原理AES加密算法的C++實現(xiàn)密碼算法詳解——AES(高級加密算法) 1. 前言 本文針對加密...
    碼夢的一生閱讀 15,608評論 2 3
  • 《小狗錢錢》講的是一個叫吉婭的小女孩在一條會說話的小狗錢錢的幫助下作烟,學會如何賺錢愉粤、理財,并用金錢實現(xiàn)自己愿望的故事...
    會飛的魚_flyfish閱讀 392評論 1 3