新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于MC9S08JS16和AES的USB Key設(shè)計(jì)

基于MC9S08JS16和AES的USB Key設(shè)計(jì)

作者: 時(shí)間:2010-12-15 來(lái)源:網(wǎng)絡(luò) 收藏


的主循環(huán)對(duì)State矩陣執(zhí)行4個(gè)不同的操作,規(guī)范中被稱為SubBytes(字節(jié)替換)、ShifiRows(行位移變換)、MixColumns(列混合變換)和AddRound(輪密鑰加)。加密算法使用了一個(gè)由種子密鑰字節(jié)數(shù)組生成的密鑰調(diào)度表,規(guī)范中稱之為密鑰擴(kuò)展例程(Expans-ion)。
下面簡(jiǎn)單分析AES(128 bits密鑰)的加密過(guò)程:

SubBytes例程是一個(gè)代替操作,它將State矩陣中的每個(gè)字節(jié)替換成一個(gè)由Sbox決定的新字節(jié),Sbox是初始化的1個(gè)16x16的矩陣。比如State[0,1]的值為0xXY,則被替換為Sbox表中Sbox[X,Y]的值。
ShifiRows是一個(gè)置換操作,它將State矩陣中的字節(jié)向左旋轉(zhuǎn)。State的第0行向左旋轉(zhuǎn)0個(gè)位置,State的第1行向左旋轉(zhuǎn)1個(gè)位置,State的第2行向左旋轉(zhuǎn)2個(gè)位置,而第3行則向左旋轉(zhuǎn)3個(gè)位置。
MixColumns列混合變換過(guò)程,在該變換中將狀態(tài)的每列視為有限域GF(28)中的多項(xiàng)式且被一個(gè)固定的多項(xiàng)式
,GF代表伽羅瓦域,將其用矩陣形式表示為:

乘積矩陣中的每個(gè)元素是系數(shù)矩陣中第i行元素與State矩陣第j列元素State[j]的乘積之和。這里的加法和乘法都定義在有限域GF(28)上;加法即按位異或,乘法遵循GF(28)上的多項(xiàng)式乘法規(guī)則。
AddRound輪密鑰加過(guò)程,State矩陣中的元素通過(guò)與一個(gè)輪密鑰進(jìn)行逐位異或而得。
KeyExpansion密鑰擴(kuò)展例程,用于產(chǎn)生密鑰調(diào)度表W[]。例程用到了2個(gè)子例程RotWord和SubWord以及1個(gè)輪常數(shù)表Rcon。RotWord將接收1個(gè)4字節(jié)的數(shù)組并將它們向左旋轉(zhuǎn)1位,SubWord例程使用替代Sbox對(duì)給定的一行密鑰調(diào)度表進(jìn)行逐字節(jié)替換。該過(guò)程的循環(huán)為:

2.3 AES加密算法的優(yōu)化
從式(1)矩陣函數(shù)可以看出,在軟件實(shí)現(xiàn)過(guò)程中,只需關(guān)注如何實(shí)現(xiàn)State矩陣元素在GF(28)中與OxO1,0x02,0x03的乘法和加法。GF(2 8)中用0x01的乘法相當(dāng)于普通算數(shù)中用l做乘法并且結(jié)果也同樣,任何值乘以0x01等于其自身;用0x02做乘法,只要被乘的值小于0x80,這時(shí)乘法的結(jié)果就是該值左移一比特位,如果被乘的值大于或等于Ox80,這時(shí)乘法的結(jié)果就是左移一比特位再用值Ox1b異或,它防止了”域溢出”并保持乘法的乘積在范圍以內(nèi);用0x03做乘法時(shí)可以分解為2的冪之和,即0x03=0x02+Ox01。對(duì)程序進(jìn)行優(yōu)化,采用查表法,將16x16的Sbox表分別與Ox01,0x02,0x03相乘產(chǎn)生與Sbox相對(duì)應(yīng)的3個(gè)256字節(jié)表:XtimeSbox[256]=Sbox[256],Xtime2Sbox[256],Xtime3Sbox[256]。將產(chǎn)生的表存儲(chǔ)于code區(qū)。MixColumns過(guò)程與SubByte操作可通過(guò)以下程序完成:



關(guān)鍵詞: AES Key MC9 S08

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉