AES加密 密鑰(一個(gè)字節(jié)(1b)=8個(gè)比特位(bit))(1kb=1024b)

AES加密
AES是一個(gè)對(duì)稱密碼嬉挡,旨在取代DES成為廣泛使用的標(biāo)準(zhǔn)。


image.png

二汇恤、AES的數(shù)據(jù)結(jié)構(gòu)
加密解密算法的輸入是一個(gè)128位分組庞钢。這些分組被描述成4×4的字節(jié)方陣,這個(gè)分組被復(fù)制到state數(shù)組中屁置,并在加密和解密的每一階段都被修改焊夸。在字節(jié)方陣中,每一格都是一個(gè)字蓝角,包含了4字節(jié)阱穗。在矩陣中字是按列排序的饭冬。


image.png

三、加密解密的詳細(xì)結(jié)構(gòu)
AES未使用Feistel結(jié)構(gòu)揪阶。其前N-1輪由4個(gè)不同的變換組成:字節(jié)代替昌抠、行移位、列混淆和輪密鑰加鲁僚。最后一輪僅包含三個(gè)變換炊苫。而在第一輪前面有一個(gè)起始的單變換(輪密鑰加),可以視為0輪冰沙。
  字節(jié)代替(SubBytes):用一個(gè)S盒完成分組的字節(jié)到字節(jié)的代替侨艾。

  行移位(ShiftRows):一個(gè)簡單的置換。
  列混淆(MixColumns):利用域GF(28)上的算術(shù)特性的一個(gè)代替拓挥。
  輪密鑰加(AddRoundKey):當(dāng)前分組和擴(kuò)展密鑰的一部分進(jìn)行按位異或XOR唠梨。


image.png

首尾使用輪密鑰加的理由:若將其他不需要密鑰的階段放在首尾,在不知道密鑰的情況下就能計(jì)算其逆侥啤,這就不能增加算法的安全性当叭。
加密原理:輪密鑰加實(shí)際是一種Vernam密碼形式,其本身不難被破解盖灸。另外三個(gè)階段一起提供了混淆蚁鳖、擴(kuò)散和非線性功能。這三個(gè)階段沒有涉及密鑰赁炎,就它們自身而言醉箕,并未提供算法的安全性。然而甘邀,該算法經(jīng)歷一個(gè)分組的XOR加密(輪密鑰加)琅攘,再對(duì)該分組混淆擴(kuò)散(其他三個(gè)階段),再接著又是XOR加密松邪,如此交替進(jìn)行,這種方式非常有效非常安全哨查。
可逆原理:每個(gè)階段均可逆逗抑。對(duì)字節(jié)代替、行移位和列混淆寒亥,在解密算法中用它們相對(duì)應(yīng)的逆函數(shù)邮府。輪密鑰加的逆就是用同樣的輪密鑰和分組相異或,其原理就是A⊕B⊕B = A溉奕。和大多數(shù)分組密碼一樣褂傀,AES解密算法按逆序利用擴(kuò)展密鑰,然而其解密算法和加密算法并不一樣加勤,這是由AES的特定結(jié)構(gòu)決定的仙辟。圖5.3中加密和解密流程在縱向上是相反的同波,在每個(gè)水平點(diǎn)上,state數(shù)組在加密和解密函數(shù)中都是一樣的叠国。
image.png

四未檩、AES的變換函數(shù)
1、字節(jié)代替變換
image.png

字節(jié)代替變換是一個(gè)簡單的查表操作粟焊。AES定義了一個(gè)S盒冤狡,它是由16×16個(gè)字節(jié)組成是矩陣,包含了8位所能表示的256個(gè)數(shù)的一個(gè)置換项棠。State中每個(gè)字節(jié)按照如下方式映射為一個(gè)新的字節(jié):把該字節(jié)的高4位作為行值悲雳,低4位作為列值,以這些數(shù)值為索引從S盒的對(duì)應(yīng)位置取出元素作為輸出香追。如合瓢,十六進(jìn)制數(shù){95}所對(duì)應(yīng)的S盒行值是9,列值是5翅阵。S盒中在此位置的值是{2A}歪玲,相應(yīng)的,{95}被映射為{2A}掷匠。
S盒的構(gòu)造
(1)按字節(jié)值的升序逐行初始化S盒(相當(dāng)于每個(gè)值都代表了坐標(biāo))

(2)把S盒的每個(gè)字節(jié)映射為它在有限域GF(28)中的逆
(3)把S盒中的每個(gè)字節(jié)的8個(gè)構(gòu)成位記為(b7,b6,b5,b4,b3,b2,b1,b0)滥崩。對(duì)S盒的每個(gè)字節(jié)的每個(gè)位作如下變換:


image.png

逆S盒的構(gòu)造
(1)按字節(jié)值的升序逐行初始化S盒
(2)利用式5.1的逆變換,該逆變換如下:
image.png

可逆證明:
令字節(jié)代替變換和逆字節(jié)代替變換中的矩陣分別為X和Y讹语,常量c和d的向量表示分別為C和D钙皮。對(duì)于某個(gè)8位的向量B,式5.2變成了B’=XB⊕C顽决。我們需證明Y(XB⊕C)⊕D=B
image.png

與DES加密的S盒的區(qū)別:
  1短条、AES的S盒的原理是運(yùn)用了GF(28)的乘法逆和矩陣的可逆運(yùn)算來保證加密與解密過程的可逆性。DES的S盒設(shè)計(jì)主要是為了確保非線性關(guān)系才菠,并不需要可逆茸时。因而在設(shè)計(jì)理念上有極大的不同。
  2赋访、AES的S盒與DES的S盒形式上差別也很大可都,AES的S盒輸入和輸出的位數(shù)相同,均為128位蚓耽,大小為16×16的字節(jié)矩陣渠牲,且只有1組;而DES的S盒輸入6位步悠,輸出只有4位签杈,大小是4×16的位矩陣,并且有8組鼎兽。在輸入的坐標(biāo)選擇規(guī)定上亦有不同答姥。

2铣除、行移位變換
操作本身很簡單,將state數(shù)組的第一行保持不變踢涌,第二行循環(huán)左移一個(gè)字節(jié)通孽,第三行循環(huán)左移兩個(gè)字節(jié),第四行循環(huán)左移三個(gè)字節(jié)睁壁。


image.png

其逆變換則將移位的幾行執(zhí)行相反方向的移位操作即可背苦。
基本原理
由于輪密鑰加、字節(jié)代替變換都是逐列地作用在state數(shù)組上潘明,每一輪的行移位變換將會(huì)打亂列排列行剂,使得保密性得到很大的提升。
3钳降、列混淆變換
列混淆變換實(shí)際上是使用乘法矩陣(注意:其運(yùn)算中涉及的加法和乘法都是定義在GF(28)上的加法和乘法厚宰,目的就是為了確保運(yùn)算結(jié)果不會(huì)溢出定義域),可用以下式子描述遂填。

image.png

其可逆性可以簡單運(yùn)算得到證明
基本原理
式5.3中矩陣的系數(shù)是基于碼字間有最大距離的線性編碼铲觉,這使得在每列的所有字節(jié)中有良好的混淆性。列混淆變換和行移位變換使得經(jīng)過幾輪變換后吓坚,所有的輸入位和所有的輸出位相關(guān)撵幽。
此外,列混淆變換的系數(shù)礁击,即{01}{02}{03}是基于算法實(shí)現(xiàn)角度考慮的盐杂。不過,逆向列混淆變換的系數(shù)則更加難以實(shí)現(xiàn)哆窿,然而加密被視為比解密更重要链烈,因?yàn)椋?br>   1、對(duì)于CFB和OFB密碼模式挚躯,僅用到加密算法
  2强衡、和任何其他分組密碼一樣,AES能用于構(gòu)造消息驗(yàn)證碼码荔,這僅僅用到了加密過程食侮。

4、輪密鑰加變換
這個(gè)比較簡單目胡,沒有太多好說的,密鑰擴(kuò)展的復(fù)雜性是確保算法安全性的重要部分链快。

以下是描述單輪AES的另一個(gè)視角誉己,強(qiáng)調(diào)各變換的機(jī)制和輸入。

image.png

五域蜗、AES的密鑰擴(kuò)展
AES密鑰擴(kuò)展算法的輸入值是4個(gè)字(16字節(jié))巨双,輸出值是一個(gè)由44個(gè)字組成(176字節(jié))的一維線性數(shù)組噪猾。以下偽碼描述了這個(gè)擴(kuò)展:
  KeyExpansion(byte key[16], word w[44]){
    word temp
    for(i=0; i<4; i++) //將輸入的密鑰直接復(fù)制到擴(kuò)展密鑰數(shù)組的前四個(gè)字
      w[i]=word(key[4i],key[4i+1],key[4i+2],key[4i+3]);
    temp = w[i-1];
    if(i mod 4 == 0) //對(duì)w數(shù)組下標(biāo)為4的倍數(shù)的元素采用更復(fù)雜的函數(shù)來計(jì)算
      temp = SubWord(RotWord(temp))⊕Rcon[i/4];
    w[i] = w[i-4] + temp; //每一個(gè)新增的字w[i]依賴于w[i-1] 和w[i-4]
  }
  RotWord的功能是字循環(huán),即使一個(gè)字的4個(gè)字節(jié)循環(huán)左移1個(gè)字節(jié)筑累。
  SubWord是利用S盒對(duì)輸入字的每個(gè)字節(jié)進(jìn)行字節(jié)代替袱蜡。
  Rcon[i]是輪常量,代表一個(gè)字慢宗,這個(gè)字最右邊三個(gè)字節(jié)總是0坪蚁,因此字與Rcon異或,其結(jié)果只是與該字最左邊的那個(gè)字節(jié)相異或镜沽。每一輪的輪常量都不相同敏晤,其定義為
  Rcon[i] = (RC[i],0,0,0),其中RC[1] = 1缅茉,RC[i] = 2?RC[i-1] 乘法是定義在域GF(28)上的嘴脾。
  RC[i]的值按照十六進(jìn)制表示為

image.png

輪常量取不同值就是為了消除不同輪密鑰產(chǎn)生方式上的對(duì)稱性或相似性。

密鑰擴(kuò)展算法的設(shè)計(jì)規(guī)范:
1蔬墩、找到密鑰或輪密鑰的部分位不足以計(jì)算出輪密鑰的其他位译打;
2、它是一個(gè)可逆的變換(即知道擴(kuò)展密鑰中任何連續(xù)的Nk個(gè)字能夠重新產(chǎn)生整個(gè)擴(kuò)展密鑰拇颅,Nk是構(gòu)成密鑰所需的字?jǐn)?shù))奏司;
3、能夠在各種處理器上有效地執(zhí)行蔬蕊;
4结澄、使用輪常量消除對(duì)稱性;
5岸夯、將密鑰差異性擴(kuò)散到輪密鑰中的能力麻献,即密鑰的每個(gè)位能影響輪密鑰的許多位;
6猜扮、足夠的非線性以防止輪密鑰的差異完全由密鑰的差異所決定勉吻。

改進(jìn)--等價(jià)的逆算法
上文所述的標(biāo)準(zhǔn)解密流程與標(biāo)準(zhǔn)加密流程并不完全一致,加密每一輪的流程是:字節(jié)代替-->行移位-->列混淆-->輪密加旅赢。而解密每一輪的流程是:逆向行移位-->逆向字節(jié)代替-->輪密加-->逆向列混淆齿桃。
可以對(duì)解密構(gòu)成進(jìn)行改進(jìn),使得解密流程與加密流程等效煮盼。
1短纵、交換逆向行移位和逆向字節(jié)代替:
由于逆向行移位并不影響state數(shù)組中字節(jié)的內(nèi)容,而逆向字節(jié)代替也不會(huì)影響state數(shù)組中字節(jié)的位置僵控,因而兩者可以交換順序而不影響解密香到。
2、交換輪密鑰加和逆向列混淆:
這兩種操作均不會(huì)改變state中字節(jié)的順序,給定狀態(tài)Si和給定輪密鑰wi悠就,可證明
逆向列混淆(Si⊕wi)= [逆向列混淆(Si)]⊕[逆向列混淆(wi)]
這個(gè)等式顯然是正確的千绪,因而如果要改變這兩種操作的順序,則必須改進(jìn)逆向列混淆的操作梗脾,即先對(duì)輪密鑰應(yīng)用逆向列混淆(注意荸型,無需對(duì)首尾的輪密鑰應(yīng)用逆向列混淆)。最終炸茧,改進(jìn)后的解密流程如下圖:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瑞妇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宇立,更是在濱河造成了極大的恐慌踪宠,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妈嘹,死亡現(xiàn)場離奇詭異柳琢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)润脸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門柬脸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毙驯,你說我怎么就攤上這事倒堕。” “怎么了爆价?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵垦巴,是天一觀的道長。 經(jīng)常有香客問我铭段,道長骤宣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任序愚,我火速辦了婚禮憔披,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爸吮。我一直安慰自己芬膝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布形娇。 她就那樣靜靜地躺著锰霜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桐早。 梳的紋絲不亂的頭發(fā)上锈遥,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天纫事,我揣著相機(jī)與錄音,去河邊找鬼所灸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛炫七,可吹牛的內(nèi)容都是我干的爬立。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼万哪,長吁一口氣:“原來是場噩夢啊……” “哼侠驯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奕巍,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤吟策,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后的止,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檩坚,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年诅福,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匾委。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氓润,死狀恐怖赂乐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咖气,我是刑警寧澤挨措,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站崩溪,受9級(jí)特大地震影響浅役,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悯舟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一担租、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抵怎,春花似錦奋救、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姿染,卻和暖如春背亥,著一層夾襖步出監(jiān)牢的瞬間秒际,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工狡汉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娄徊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓盾戴,卻偏偏與公主長得像寄锐,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尖啡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • 引用 AES加密算法原理AES加密算法的C++實(shí)現(xiàn)密碼算法詳解——AES(高級(jí)加密算法) 1. 前言 本文針對(duì)加密...
    碼夢的一生閱讀 15,618評(píng)論 2 3
  • CTF中那些腦洞大開的編碼和加密 0x00 前言 正文開始之前先閑扯幾句吧橄仆,玩CTF的小伙伴也許會(huì)遇到類似這樣的問...
    查無此人asdasd閱讀 6,024評(píng)論 0 19
  • 高級(jí)加密標(biāo)準(zhǔn)(英語:Advanced EncryptionStandard,縮寫:AES)衅斩,在密碼學(xué)中又稱Rijn...
    黃曉果閱讀 13,665評(píng)論 0 2
  • 重點(diǎn):分組密碼的設(shè)計(jì)思想分組密碼的基本特點(diǎn)AES盆顾、DES密碼算法AES和DES各自組成、每部分的實(shí)現(xiàn)過程以及特點(diǎn)A...
    七八音閱讀 2,763評(píng)論 1 2
  • AES(Advanced Encryption Standard) 高級(jí)加密標(biāo)準(zhǔn)畏梆,是 DES(Data Encry...
    TIME_for閱讀 3,955評(píng)論 2 2