[轉(zhuǎn)]密碼算法詳解——AES

因為要寫一個小工具,需要使用對稱加密算法,算法暫時選擇AES算法。下面是具體的算法:
本文轉(zhuǎn)自:http://www.mamicode.com/info-detail-514466.html
0 AES簡介
  美國國家標準技術(shù)研究所在2001年發(fā)布了高級加密標準(AES)。AES是一個對稱分組密碼算法,旨在取代DES成為廣泛使用的標準。
  根據(jù)使用的密碼長度,AES最常見的有3種方案,用以適應(yīng)不同的場景要求,分別是AES-128、AES-192和AES-256。本文主要對AES-128進行介紹,另外兩種的思路基本一樣,只是輪數(shù)會適當增加。
1 算法流程
  AES加解密的流程圖如下:

技術(shù)分享

AES加密過程涉及到4種操作:字節(jié)替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和輪密鑰加(AddRoundKey)。解密過程分別為對應(yīng)的逆操作。由于每一步操作都是可逆的,按照相反的順序進行解密即可恢復(fù)明文。加解密中每輪的密鑰分別由初始密鑰擴展得到。算法中16字節(jié)的明文、密文和輪密鑰都以一個4x4的矩陣表示。
  接下來分別對上述5種操作進行介紹。
1.1 字節(jié)代替
  字節(jié)代替的主要功能是通過S盒完成一個字節(jié)到另外一個字節(jié)的映射。S盒的詳細構(gòu)造方法可以參考文獻[1]。
  下圖(a)為S盒,圖(b)為S-1(S盒的逆)。

技術(shù)分享

技術(shù)分享

  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 正向行移位
  正向行移位的原理圖如下:
技術(shù)分享

  實際移位的操作即是:第一行保存不變,第二行循環(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 正向列混淆
  正向列混淆的原理圖如下:
技術(shù)分享

  根據(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è)某一列的值如下圖,運算過程如下:
技術(shù)分享

技術(shù)分享

  同理可以求出另外幾個值。
1.3.2 逆向列混淆
  逆向列混淆的原理圖如下:
技術(shù)分享

  由于:
技術(shù)分享

  說明兩個矩陣互逆,經(jīng)過一次逆向列混淆后即可恢復(fù)原文。
1.4 輪密碼加
  任何數(shù)和自身的異或結(jié)果為0。加密過程中,每輪的輸入與輪密鑰異或一次;因此,解密時再異或上該輪的密鑰即可恢復(fù)輸入。
1.5 密鑰擴展
  密鑰擴展的原理圖如下:
技術(shù)分享

  密鑰擴展過程說明:
  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著;王張宜等譯. 密碼編碼學(xué)與網(wǎng)絡(luò)安全——原理與實踐(第五版)[M]. 北京:電子工業(yè)出版社,2011.1.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,165評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,595評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,633評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,435評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,943評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,175評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,713評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,599評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,788評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,034評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,412評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,664評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,408評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,747評論 2 370

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

  • 高級加密標準(AES,Advanced Encryption Standard)為最常見的對稱加密算法(微信小程序...
    吃草1990閱讀 1,537評論 0 0
  • 轉(zhuǎn):https://www.cnblogs.com/luop/p/4334160.html 我們知道數(shù)據(jù)加密標準(...
    right_33cb閱讀 1,290評論 1 1
  • 概述 加密算法分為單向加密和雙向加密。單向加密包括MD5,SHA等摘要算法。單向加密算法是不可逆的,也就是無法將加...
    西三旗靚仔閱讀 3,201評論 0 2
  • 引用 AES加密算法原理AES加密算法的C++實現(xiàn)密碼算法詳解——AES(高級加密算法) 1. 前言 本文針對加密...
    碼夢的一生閱讀 15,641評論 2 3
  • 目錄一、對稱加密?1、對稱加密是什么?2、對稱加密的優(yōu)點?3、對稱加密的問題?4、對稱加密的應(yīng)用場景?5、對稱加密...
    意一ineyee閱讀 61,994評論 8 110