資源描述:
《aes加密算法研究》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、AES加密算法研究作者h(yuǎn)ttp://t.sina.com.cn/kingbir1、AES加密算法簡(jiǎn)介AES(TheAdvancedEncryptionStandard),又稱(chēng)Rijndael加密法,該演算法為比利時(shí)密碼學(xué)家JoanDaemen和VincentRijmen所設(shè)計(jì),結(jié)合兩位作者的名字,以Rijdael命名。是美國(guó)聯(lián)邦政府采用的一種分塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過(guò)五年的甄選流程,高級(jí)加密標(biāo)準(zhǔn)由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)于2001年11月26日發(fā)布于FIPSPUB197,并在2002年5月26日成為有效的標(biāo)
2、準(zhǔn)。2006年,高級(jí)加密標(biāo)準(zhǔn)已然成為對(duì)稱(chēng)密鑰加密中最流行的演算法之一。它被預(yù)期能成為人們公認(rèn)的加密包括金融、電信和政府?dāng)?shù)字信息的方法。美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所(NIST)在2002年5月26日建立了新的高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn)(AES)規(guī)范。AES是一個(gè)新的可以用于保護(hù)電子數(shù)據(jù)的加密算法。明確地說(shuō),AES是一個(gè)迭代的、對(duì)稱(chēng)密鑰分組的密碼,它可以使用128、192和256位密鑰,并且用128位(16字節(jié))分組加密和解密數(shù)據(jù)。與公共密鑰密碼使用密鑰對(duì)不同,對(duì)稱(chēng)密鑰密碼使用相同的密鑰加密和解密數(shù)據(jù)。通過(guò)分組密碼返回的加密數(shù)據(jù)的位數(shù)與輸入數(shù)據(jù)相同。迭代加密使用一個(gè)循環(huán)結(jié)構(gòu),在該循環(huán)中重復(fù)置
3、換(permutations)和替換(substitutions)輸入數(shù)據(jù)。2、AES加密算法描述AES算法是基于置換和代替的。置換是數(shù)據(jù)的重新排列,而代替是用一個(gè)單元數(shù)據(jù)替換另一個(gè)。AES使用了幾種不同的技術(shù)來(lái)實(shí)現(xiàn)置換和替換,包括:S盒置換(SubBytes),行循環(huán)移位(ShiftRows),伽洛瓦域多項(xiàng)式運(yùn)算,列混合預(yù)算。2.1、分組(State)密碼運(yùn)算的中間結(jié)果稱(chēng)為狀態(tài)(State)。State的表示:狀態(tài)用以字節(jié)為基本構(gòu)成元素的矩陣陣列來(lái)表示,該陣列有4行,列數(shù)記為Nb.Nb=分組長(zhǎng)度(bits)÷32Nb可以取的值為4,6,8,對(duì)應(yīng)的分組長(zhǎng)度為128,192,
4、256bits。2.2、密鑰(CipherKey)CipherKey類(lèi)似地用一個(gè)4行的矩陣陣列來(lái)表示,列數(shù)記為Nk.Nk=密鑰長(zhǎng)度(bits)÷32Nk可以取的值為4,6,8,對(duì)應(yīng)的密鑰長(zhǎng)度為128,192,256bits.密鑰擴(kuò)展:密鑰bit的總數(shù)=分組長(zhǎng)度×(輪數(shù)Round+1)例如當(dāng)分組長(zhǎng)度為128bits和輪數(shù)Round為10時(shí),輪密鑰長(zhǎng)度為128×(10+1)=1408bits。密鑰的長(zhǎng)度是夠使用的,所以必須將密碼密鑰擴(kuò)展成一個(gè)擴(kuò)展密鑰。擴(kuò)展算法:第i-1輪的分組長(zhǎng)度個(gè)字節(jié)的子密鑰被分成4組來(lái)處理,每組4個(gè)字節(jié)。最后一組的4個(gè)字節(jié)先執(zhí)行一個(gè)字節(jié)的循環(huán)左移,由S盒(
5、這個(gè)S盒與字節(jié)替代時(shí)的S盒是一樣的)來(lái)進(jìn)行替代處理,然后這4個(gè)字節(jié)結(jié)果中的第一個(gè)字節(jié)和輪常數(shù)相異或,這個(gè)輪常數(shù)是預(yù)先定義的,并且固定值。最后,為了得到第i輪密鑰,把得到的4個(gè)字節(jié)的結(jié)果和輪密鑰的最初4個(gè)字節(jié)按位相異或,得到i輪密鑰的最初4個(gè)字節(jié),然后又和密鑰的下面的4個(gè)字節(jié)按位相異或,得到i輪密鑰的下面4個(gè)字節(jié),以此類(lèi)推。2.2、SBox置換(SubBytes)SBox稱(chēng)為S盒,它是一個(gè)16×16的固定值的矩陣。sbox置換法則:將需要置換的矩陣的每個(gè)字節(jié)的低4位作為s盒的縱坐標(biāo),將其高4位作為s盒的橫坐標(biāo),使用這兩個(gè)值取得對(duì)應(yīng)的S盒中的值,作為置換后的值。bytes[0]
6、=AseSbox[bytes[0]>>4][bytes[0]&0x0f];bytes[1]=AseSbox[bytes[1]>>4][bytes[1]&0x0f];bytes[2]=AseSbox[bytes[2]>>4][bytes[2]&0x0f];bytes[3]=AseSbox[bytes[3]>>4][bytes[3]&0x0f];2.3、行循環(huán)移位(ShiftRows)在行循環(huán)移位(ShiftRows)變換中,狀態(tài)陣列的后3行循環(huán)移位不同的偏移量。第1行循環(huán)移位C1字節(jié),第2行循環(huán)移位C2字節(jié),第3行循環(huán)移位C3字節(jié)。偏移量C1、C2、C3與分組長(zhǎng)度Nb有關(guān),如
7、下表所示:NbC1C2C34123612381342.4、伽洛瓦域運(yùn)算(GF28)在GF(28)中用0x01的乘法是特殊的;它相當(dāng)于普通算術(shù)中用1做乘法并且結(jié)果也同樣—任何值乘0x01等于其自身?,F(xiàn)在讓我們看看用0x02做乘法。和加法的情況相同,理論是深?yuàn)W的,但最終結(jié)果十分簡(jiǎn)單。只要被乘的值小于0x80,這時(shí)乘法的結(jié)果就是該值左移1比特位。如果被乘的值大于或等于0x80,這時(shí)乘法的結(jié)果就是用值0x1b異或后的值再左移1比特位。它防止了“域溢出”并保持乘法的乘積在范圍以?xún)?nèi)。一旦你在GF(28)中用0x02建立了加法和