專利名稱:基于aes的192比特位密鑰擴(kuò)展系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明屬于安全技術(shù)領(lǐng)域,涉及數(shù)據(jù)加密,特別涉及高級加密標(biāo)準(zhǔn)AES中的密鑰擴(kuò)展方法,可用于網(wǎng)絡(luò)通信。
背景技術(shù):
2001年11月美國商務(wù)部國家標(biāo)準(zhǔn)技術(shù)局NIST公開的高級加密標(biāo)準(zhǔn)AES是用于無密級加密的一種算法。自公開以來,AES算法被廣泛的應(yīng)用于加密協(xié)議、通信終端以及服務(wù)器等聞端廣品中。
AES算法采用了 Rijnddel對稱密鑰算法的子集,支持長度為128比特位的分組和長度為128、192和256比特位的密鑰。該算法通過對初始密鑰進(jìn)行密鑰擴(kuò)展得到輪密鑰,并用輪密鑰對128位的數(shù)據(jù)塊進(jìn)行加密和解密。在AES算法中,根據(jù)初始密鑰的長度不同,加密的輪數(shù)r有所不同;在初始密鑰長度為128比特位、192比特位和256比特位的情況下,相應(yīng)的輪數(shù)r分別為10、12和14。由于每一輪加密都需要不同的128比特位的輪密鑰與數(shù)據(jù)塊進(jìn)行按位異或操作,而初始密鑰長度只能為128比特位、192比特位或256比特位,無法為每輪加密提供不同的輪密鑰,故該算法包含了密鑰擴(kuò)展算法,用于把初始密鑰擴(kuò)展成長度為1280比特位、1536比特位或1792比特位的數(shù)據(jù)串,從而生成加密所需要的所有輪密鑰。目前廣泛應(yīng)用的密鑰擴(kuò)展方法有兩種一種是《A Rijndael CryptoprocessorUsing Shared On-the-fly Key Scheduler》所使用的實時密鑰擴(kuò)展方法,即密鑰擴(kuò)展單元在進(jìn)行密鑰擴(kuò)展的同時為加密進(jìn)程提供輪密鑰;這種方法的缺點在于輪密鑰無法重用,因而對于數(shù)據(jù)量大、需要連續(xù)使用輪密鑰的場合,持續(xù)執(zhí)行密鑰擴(kuò)展操作所帶來的功耗較大;另一種是《AES算法的一種優(yōu)化的FPGA實現(xiàn)方法》所使用的預(yù)密鑰擴(kuò)展方法,即先進(jìn)行密鑰擴(kuò)展生成所有的輪密鑰并存儲到內(nèi)存中,再進(jìn)行加密;在該方法中,由于加密流程要等待密鑰擴(kuò)展完成之后才能進(jìn)行,從而增加了加密所需要的時間,降低了整個加密過程的效率。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對上述傳統(tǒng)方法的不足,提出一種基于AES的192比特位密鑰擴(kuò)展系統(tǒng)及方法,以兼顧密鑰擴(kuò)展的實時性以及輪密鑰的可重用性,實現(xiàn)密鑰擴(kuò)展的高效率和低功耗。為實現(xiàn)上述目的,本發(fā)明基于高級加密標(biāo)準(zhǔn)AES的192比特位密鑰擴(kuò)展系統(tǒng),包括擴(kuò)展計數(shù)單元,用于對序號η進(jìn)行加I操作,并將序號η輸出;暫存單元,由位寬均為32比特的52個寄存器構(gòu)成,用于暫存初始密鑰和輪密鑰,保證密鑰擴(kuò)展進(jìn)程能夠即時取用;輪密鑰存儲單元,采用位寬為32比特位,深度為52的雙口 SDRDM,用于存儲初始密鑰和輪密鑰,保證在密鑰擴(kuò)展進(jìn)行的同時能夠為加密流程實時的提供輪密鑰,并保證對后續(xù)數(shù)據(jù)塊進(jìn)行加密時無需密鑰擴(kuò)展即可直接讀取已存儲輪密鑰;
循環(huán)寄存器,用于存儲供字循環(huán)單元讀取使用的32比特位的值;字循環(huán)單元,用于對循環(huán)寄存器中的值進(jìn)行循環(huán)左移I個字節(jié)的操作,并將結(jié)果輸出給替換寄存器;替換寄存器,用于存儲供字節(jié)替換單元讀取使用的32比特位的值;字節(jié)替換単元,用于將替換寄存器中的值作為地址分為從第31位到第24位、從第23位到第16位、從第15位到第8位和從第7位到第O位這4個字節(jié)發(fā)送給S盒單元,并將S盒單元的返回值按照發(fā)送地址時的順序從高到低組合后輸出給按位異或単元;S盒單元,采用四個預(yù)存有S盒的R0M,用于將字節(jié)替換單元發(fā)送的四個地址在S盒中所對應(yīng)的四個8比特位的值返回給字節(jié)替換單元;輪常數(shù)選擇單元,用于根據(jù)序號n,從9個16進(jìn)制的候選值:0,1,2,4,8,10,20,
40,80中選出ー個值輸出給異或單元;異或寄存單元,包括位寬均為32比特位的O號寄存器、I號寄存器、2號寄存器、3號寄存器、4號寄存器和5號寄存器,用于存儲異或單元所要使用的32比特位的值;異或單元,包括O號異或子単元、I號異或子単元、2號異或子単元、3號異或子單元、4號異或子単元和5號異或子単元,用于進(jìn)行按位異或操作,并將所得結(jié)果作為輪密鑰輸出給暫存單元;循環(huán)控制単元,用于根據(jù)序號η決定下ー步是停止還是繼續(xù)進(jìn)行密鑰擴(kuò)展進(jìn)程,若序號η為8,則結(jié)束密鑰擴(kuò)展進(jìn)程,若輪號為0-7范圍內(nèi)的值,則繼續(xù)執(zhí)行密鑰擴(kuò)展進(jìn)程。為實現(xiàn)上述目的,本發(fā)明基于高級加密標(biāo)準(zhǔn)AES中192比特位初始密鑰的擴(kuò)展方法,包括如下步驟I)將對密鑰擴(kuò)展進(jìn)程進(jìn)行計數(shù)的變量定義為序號η,其取值范圍分為0-7以外的整數(shù)域和0-7之間的整數(shù)域這兩種情況;2)將序號η歸零,開始密鑰擴(kuò)展進(jìn)程;3)將初始密鑰從高位到低位分為6個32比特位的值,再按此順序同時將這6個32比特位的數(shù)據(jù)存入地址為0,I,2,3,4,5的寄存器和一個專用于存儲輪密鑰的雙ロ SDRDM中;4)執(zhí)行字循環(huán)操作4. I)根據(jù)序號η確定寄存器地址d,若序號η為0_7之外的值,則寄存器地址d的值保持不變,否則按以下規(guī)律確定地址若序號η為O,則寄存器地址d為5 ;序號η每增加I,寄存器地址d的值就增加6 ;4. 2)從寄存器地址d所對應(yīng)的寄存器中取值賦給循環(huán)寄存器,將循環(huán)寄存器中的32比特位值循環(huán)左移一個字節(jié),并輸出到替換寄存器中;5)執(zhí)行字節(jié)替換操作5. I)將替換寄存器中的值作為地址分為從第31位到第24位、從第23位到第16位、從第15位到第8位和從第7位到第O位這4個字節(jié),分別發(fā)送給4個預(yù)存有S盒的R0M,這四個ROM再將接收到的地址值在S盒中對應(yīng)的8比特位數(shù)值同時返回; 5. 2)將4個ROM返回的8比特位數(shù)值按照步驟5. I)中每個地址在原32比特位值中的位置從高到低的順序,組合成一個新的32比特位的值作為字節(jié)替換操作的輸出;
6)執(zhí)行按位異或操作,并存儲輪密鑰6. I)根據(jù)序號η確定寄存器地址eO, el, e2, e3, e4和e5,若序號η為0-7之外的值,則寄存器地址e0,el, e2, e3, e4和e5中的值均保持不變,否則按以下規(guī)律確定地址若序號n為0,則寄存器地址eO, el, e2,e3,e4和e5依次被賦值0,1,2,3,4,5 ;序號η每增加I,則寄存器地址eO, el, e2, e3, e4和e5的值均增加6,若序號η為7,則寄存器地址e4和e5保持不變,其它寄存器地址正常增加;6. 2)從寄存器地址e0,el, e2, e3, e4和e5所對應(yīng)的寄存器中取值,并分別賦給O號寄存器、I號寄存器、2號寄存器、3號寄存器、4號寄存器和5號寄存器;6. 3)根據(jù)序號η從9個16進(jìn)制的候選值中選擇輪常數(shù)值輸出,即當(dāng)序號η為0_7時,對應(yīng)的輪常數(shù)值輸出依次為1,2,4,8,10,20,40,80,否則,輪常數(shù)值輸出為O ;6.4)根據(jù)序號η確定寄存器地址f0,fl,f2,f3,f4和f5的值,若序號η為0-7之外的值,則寄存器地址f0,fl, f2,f3,f4和f5中的值均保持不變,否則按以下規(guī)律確定地址若序號n為0,則寄存器地址f0,fl,f2,f3,f4和f5依次被賦值6,7,8,9,10,11 ;序號η每增加I,則寄存器地址f0,fl,f2,f3,f4和f5的值都增加6,若序號η為7,則寄存器地址f4和f5地址保持不變,其它寄存器地址正常增加;6. 5)對O號寄存器中的值和字節(jié)替換操作的輸出執(zhí)行按位異或操作,用此結(jié)果再與輪常數(shù)值輸出進(jìn)行按位異或后,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f0所對應(yīng)的寄存器和雙口 SDRDM中;6. 6)對I號寄存器中的值和寄存器地址f0所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址Π所對應(yīng)的寄存器和雙口 SDRDM中;6. 7)對2號寄存器中的值和寄存器地址fl所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f2所對應(yīng)的寄存器和雙口 SDRDM中;6. 8)對3號寄存器中的值和寄存器地址f2所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f3所對應(yīng)的寄存器和雙口 SDRDM中;6. 9)對4號寄存器中的值和寄存器地址f3所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f4所對應(yīng)的寄存器和雙口 SDRDM中;6. 10)對5號寄存器中的值和寄存器地址f4所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f5所對應(yīng)的寄存器和雙口 SDRDM中;此時完成了輪密鑰的6列的存儲;7)對序號η加1,若加I后的結(jié)果為8,則停止密鑰擴(kuò)展進(jìn)程,否則重復(fù)步驟4)至步驟7)。本發(fā)明具有如下優(yōu)點I)本發(fā)明通過簡化密鑰擴(kuò)展循環(huán)的判斷條件,以及減少密鑰擴(kuò)展的循環(huán)次數(shù),與傳統(tǒng)方法相比,在提高密鑰擴(kuò)展的效率的同時降低了密鑰擴(kuò)展的功耗。傳統(tǒng)方法均采用高級加密標(biāo)準(zhǔn)AES中的密鑰擴(kuò)展算法,將初始密鑰擴(kuò)展得到的擴(kuò)展密鑰視作一個數(shù)組W[i] ,0 < i < 52,其中每個數(shù)組元素w[i]為輪密鑰的一列,而編號i作為密鑰擴(kuò)展循環(huán)過程的主要參考對象;在初始密鑰為192比特位的情況下,傳統(tǒng)密鑰擴(kuò)展的循環(huán)依據(jù)編號i能否被6整除分成了兩種情況,若編號i能被6整除,則w[i]=w[i-6] sub word(rot word(w [i -1 ])) rcon(i/6),否貝 lj, w[i]=w[i-6] w[i-l];其中,subword
表示對括號內(nèi)的值進(jìn)行字節(jié)替換操作,rotword表示對括號內(nèi)的值進(jìn)行字循環(huán)操作,rcon表示根據(jù)括號內(nèi)的值選擇輪常數(shù);這種密鑰擴(kuò)展方法每循環(huán)一次僅產(chǎn)生輪密鑰的一列,故而產(chǎn)生所有的12個輪密鑰需要進(jìn)行密鑰擴(kuò)展循環(huán)48次,且對條件“編號i是否能被6整除”的判斷要進(jìn)行48次,因而不僅效率較低,而且在實際應(yīng)用中功耗也較大。
本發(fā)明中,密鑰擴(kuò)展循環(huán)的判斷條件僅有I個,就是序號η ;即在正常執(zhí)行的情況下,序號η的取值為0-7之間的8個整數(shù)值,密鑰擴(kuò)展的循環(huán)過程是依據(jù)序號η來選擇操作數(shù)以及執(zhí)行字循環(huán)、字節(jié)替換和按位異或操作,這樣的循環(huán)每次產(chǎn)生輪密鑰數(shù)組中的6列;通過這種循環(huán)方式,本發(fā)明的密鑰擴(kuò)展方法只需循環(huán)8次,即可完成所有輪密鑰的生成,而對于輪號的判斷也只需進(jìn)行8次,不僅簡化了密鑰擴(kuò)展循環(huán)的判斷條件,而且減少了密鑰擴(kuò)展的循環(huán)次數(shù),從而在提高了密鑰擴(kuò)展的效率的同時降低了密鑰擴(kuò)展的功耗;2)本發(fā)明具有較高的實用性。在實際應(yīng)用中,由于環(huán)境以及電路故障等原因,可能造成序號η的值不在0-7之間的整數(shù)域內(nèi),從而使得整個密鑰擴(kuò)展過程都無法正常進(jìn)行;對于這種情況,本發(fā)明中給出了對應(yīng)的處理方式,使得其它的的操作不受序號η異常賦值的影響,從而降低了故障所帶來的不良影響,提高了本發(fā)明的實用性;3)本發(fā)明通過暫存單元的定義,使得密鑰擴(kuò)展進(jìn)程可以通過判定地址來選擇性的讀取暫存在其中的輪密鑰,又通過運(yùn)用寄存器地址d,e0,el,e2,e3,e4,e5,f0,fl,f2,f3,f4,f5的取值規(guī)律提高了密鑰擴(kuò)展中的運(yùn)算操作數(shù)的選擇和讀取過程的效率;4)本發(fā)明由于將完成一個輪密鑰擴(kuò)展所需要的操作流程化,并在完成每個輪密鑰擴(kuò)展的同時,將輪密鑰存入雙口 SDRDM和暫存單元中,故在實時的為加密流程提供輪密鑰的同時保證了輪密鑰的可重用性,從而兼顧了高效率與低功耗;5)本發(fā)明通過使用4個S盒來完成字節(jié)替換,使得字節(jié)替換過程的實現(xiàn)易于并行實現(xiàn),同時提高了密鑰擴(kuò)展的效率。
圖I為本發(fā)明192比特位密鑰擴(kuò)展系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明192比特位密鑰擴(kuò)展方法流程圖;圖3為本發(fā)明192比特位密鑰擴(kuò)展方法中的字循環(huán)操作子流程圖;圖4為本發(fā)明192比特位密鑰擴(kuò)展方法中的字節(jié)替換操作子流程圖;圖5為本發(fā)明192比特位密鑰擴(kuò)展方法中的按位異或操作子流程圖。
具體實施例方式參照圖1,本發(fā)明基于高級加密標(biāo)準(zhǔn)AES的192比特位密鑰擴(kuò)展系統(tǒng)包括擴(kuò)展計數(shù)單元I、暫存單元2、輪密鑰存儲單元3、循環(huán)寄存器4、字循環(huán)單元5、替換寄存器6、字節(jié)替換單元7、S盒單元8、輪常數(shù)選擇單元9、異或寄存單元10、異或單元11、循環(huán)控制單元12,該S盒單元8包括4個預(yù)存有S盒的ROM 0號ROM、I號R0M、2號ROM和3號ROM ;該異或寄存單元10包括6個位寬為32比特位的寄存器0號寄存器、I號寄存器、2號寄存器、3號寄存器、4號寄存器和5號寄存器;該異或單元11包括6個異或子單元0號異或子單元、I號異或子單元、2號異或子單元、3號異或子單元、4號異或子單元和5號異或子單元。其中擴(kuò)展計數(shù)單元1,用于對序號η進(jìn)行加一操作,并將序號η同時輸出給循環(huán)控制單元12、輪常數(shù)選擇單元9和暫存單元2。暫存單元2,由位寬均為32比特的52個寄存器構(gòu)成,用于暫存初始密鑰和輪密鑰,保證密鑰擴(kuò)展進(jìn)程能夠即時取用,此外還用于根據(jù)序號η 選擇輪密鑰輸出給輪密鑰存儲單元3和異或寄存器單元10,其中的輪密鑰,是指密鑰擴(kuò)展進(jìn)程所產(chǎn)生的12個128比特位數(shù),用于為高級加密標(biāo)準(zhǔn)AES中加密算法的每輪加密提供不同的128比特位數(shù)。輪密鑰存儲單元3,采用位寬為32比特位,深度為52的雙口 SDRAM,用于存儲初始密鑰和輪密鑰,使得加密流程能夠在密鑰擴(kuò)展進(jìn)行的同時取得已存儲的輪密鑰,并保證后續(xù)數(shù)據(jù)加密時無需密鑰擴(kuò)展即可直接讀取已存儲輪密鑰。循環(huán)寄存器4,位寬為32比特位,用于存儲供字循環(huán)單元5讀取使用的值。字循環(huán)單元5,用于將循環(huán)寄存器4中的值進(jìn)行循環(huán)左移I個字節(jié)并輸出給替換寄存器6。替換寄存器6,用于存儲供字節(jié)替換單元7讀取使用的32比特位的值。字節(jié)替換單元7,用于進(jìn)行字節(jié)替換操作,首先將替換寄存器6中的值作為地址分為從第31位到第24位、從第23位到第16位、從第15位到第8位和從第7位到第O位這4個字節(jié)發(fā)送給S盒單元8,之后將S盒單元8的返回值按照從O號ROM到3號ROM的順序組合后得到字節(jié)替換操作的結(jié)果,并輸出給按位異或單元。S盒單元8中的O號ROM、I號ROM、2號ROM和3號ROM均存有S盒,每個ROM位寬為8比特,深度為256,用于接收字節(jié)替換單元7發(fā)送過來的地址,并將地址在S盒中對應(yīng)的值返回給字節(jié)替換單元7,其中O號ROM接收字節(jié)替換單元7發(fā)送過來的第31位到第24位的地址,并將該地址所對應(yīng)的8比特位值輸出給字節(jié)替換單元7 ;I號ROM接收字節(jié)替換單元7發(fā)送過來的第23位到第16位的地址,并將該地址所對應(yīng)的8比特位值輸出給字節(jié)替換單元7 ;2號ROM接收字節(jié)替換單元7發(fā)送過來的第15位到第8位的地址,并將該地址所對應(yīng)的8比特位值輸出給字節(jié)替換單元7 ;3號ROM接收字節(jié)替換單元7發(fā)送過來的第7位到第O位的地址,并將該地址所對應(yīng)的8比特位值輸出給字節(jié)替換單元7。輪常數(shù)選擇單元9,用于根據(jù)序號n,從9個16進(jìn)制的候選值0,1,2,4,8,10,20,40,80中選出一個值輸出給異或單元11,即當(dāng)序號η為0-7時,對應(yīng)的輸出依次為1,2,4,8,10,20,40,80,否則,輸出為O ;其中,輪常數(shù)為AES標(biāo)準(zhǔn)中的密鑰擴(kuò)展算法所采用的概念,每個輪常數(shù)由序號η計算得來,因序號η取值范圍有限,故直接采用計算結(jié)果作為輪常數(shù)的候選值,需要說明的是O并非輪常數(shù)值,而是為了防止序號η異常而設(shè)置的候選值。異或寄存單元10,包括位寬均為32比特位的O號寄存器、I號寄存器、2號寄存器、3號寄存器、4號寄存器和5號寄存器,用于存儲異或單元11所要使用的32比特位的值,其中,O號寄存器存儲O號異或子單元所要使用的32比特位的值,I號寄存器存儲I號異或子單元所要使用的32比特位的值,2號寄存器存儲2號異或子單元所要使用的32比特位的值,3號寄存器存儲3號異或子單元所要使用的32比特位的值,4號寄存器存儲4號異或子單元所要使用的32比特位的值,5號寄存器存儲5號異或子單元所要使用的32比特位的
值異或單元11,包括O號異或子單元、I號異或子單元、2號異或子單元、3號異或子單元、4號異或子單元和5號異或子單元,用于進(jìn)行按位異或操作,并將所得結(jié)果作為輪密鑰輸出給暫存單元2,其中O號異或子單元,對O號寄存器中的值、字節(jié)替換單元11的輸出和輪常數(shù)選擇單元9的輸出進(jìn)行按位異或后,將所得結(jié)果作為輪密鑰一列同時輸出給I號異或子單元和暫存單元2 ;I號異或子單元,將I號寄存器中的值和O號異或子單元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列同時輸出給2號異或子單元和暫存單元2 ;2號異或子單元,將2號寄存器中的值和I號異或子單元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列同時輸出給3號異或子單元和暫存單元2 ;3號異或子單元,將3號寄存器中的值和2號異或子單元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列同時輸出給4號異或子單元和暫存單元2 ;4號異或子單元,將4號寄存器中的值和3號異或子單元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列同時輸出給4號異或子單元和暫存單元2 ;5號異或子單元,將5號寄存器中的值和4號異或子單元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列輸出給暫存單元2 ;此時完成了輪密鑰的6列的暫存,這6列可能會分成兩種情況作為輪密鑰,一種是前4列作為一個輪密鑰,后兩列作為另一個輪密鑰的第127位到第64位,另一種是前兩列作為一個輪密鑰的第63位到第O位,后四列作為另一個輪密鑰。循環(huán)控制單元12,根據(jù)序號η決定下一步是停止還是繼續(xù)進(jìn)行密鑰擴(kuò)展進(jìn)程,若序號η為8,則結(jié)束密鑰擴(kuò)展進(jìn)程,若輪號為0-7范圍內(nèi)的值,則繼續(xù)執(zhí)行密鑰擴(kuò)展進(jìn)程。參照圖2,本發(fā)明的基于AES的192比特位密鑰擴(kuò)展方法,包括如下步驟步驟1,將對密鑰擴(kuò)展進(jìn)程進(jìn)行計數(shù)的變量定義為序號η,其取值范圍分為0-7以外的整數(shù)域和0-7之間的整數(shù)域這兩種情況。步驟2,將序號η歸零,開始密鑰擴(kuò)展進(jìn)程。步驟3,將初始密鑰從高位到低位分為6個32比特位的值,再按此順序同時將這6個32比特位的數(shù)據(jù)存入地址為0,1,2,3,4,5的寄存器和一個專用于存儲輪密鑰的雙口SDRAM 中。步驟4,執(zhí)行字循環(huán)操作。參照圖3,本步驟的實現(xiàn)如下4. I)根據(jù)序號η確定寄存器地址d,若序號η為0-7之外的值,則寄存器地址d的值保持不變,否則按以下規(guī)律確定地址若序號η為O,則寄存器地址d為5 ;序號η每增加1,寄存器地址d的值就增加6,例如,若序號η為5,則寄存器地址d的值就為35 ;若序號η為6,則寄存器地址d的值增加為41。
4. 2)從寄存器地址d所對應(yīng)的寄存器中取值賦給循環(huán)寄存器,將循環(huán)寄存器中的32比特位值循環(huán)左移一個字節(jié),并輸出到替換寄存器中。步驟5,執(zhí)行字節(jié)替換操作。參照圖4,本步驟的實現(xiàn)如下5. I)將替換寄存器中的值作為地址分為從第31位到第24位、從第23位到第16位、從第15位到第8位和從第7位到第O位這4個字節(jié),并將第31位到第24位地址發(fā)送給O號R0M,將第23位到第16位地址發(fā)送給I號R0M,將第15位到第8位地址發(fā)送給2號ROM,將第7位到第O位地址發(fā)送給3號R0M,這4個ROM再分別將接收到的地址值在S盒中對應(yīng)的4個8比特位數(shù)值輸出。
5. 2)將4個ROM的輸出值按照步驟5. I)中發(fā)送地址時的順序從高到低組合成一個32比特位的值作為字節(jié)替換操作的輸出,即將O號ROM、I號ROM、2號ROM和3號ROM的返回值依次作為最高字節(jié)、次高字節(jié)、第三字節(jié)和第四字節(jié)組合成32比特位的值。步驟6,執(zhí)行按位異或操作。參照圖5,本步驟的實現(xiàn)如下6. I)根據(jù)序號η確定寄存器地址eO, el, e2, e3, e4和e5,若序號η為0-7之外的值,則寄存器地址e0,el, e2, e3, e4和e5中的值均保持不變,否則按以下規(guī)律確定地址若序號n為0,則寄存器地址eO, el, e2,e3,e4和e5依次被賦值0,1,2,3,4,5 ;序號η每增加I,則寄存器地址e0,el, e2, e3, e4和e5的值均增加6,例如,若序號η為5,則寄存器地址eO的值為30,el的值為31,e2的值為32,e3的值為33,e4的值為34,e5的值為35 ;若序號η為6,則寄存器地址eO的值增加為36,el的值增加為37,e2的值增加為38,e3的值增加為39,e4的值增加為34,e5的值增加為40 ;若序號為7,則寄存器地址e4和e5保持不變,其它地址正常增加;6. 2)從不同寄存器地址所對應(yīng)的寄存器中取值賦給不同的寄存器6. 2a)從寄存器地址eO所對應(yīng)的寄存器中取值賦給O號寄存器;6. 2b)從寄存器地址el所對應(yīng)的寄存器中取值賦給I號寄存器;6. 2c)從寄存器地址e2所對應(yīng)的寄存器中取值賦給2號寄存器;6. 2d)從寄存器地址e3所對應(yīng)的寄存器中取值賦給3號寄存器;6. 2e)從寄存器地址e4所對應(yīng)的寄存器中取值賦給4號寄存器;6. 2f)從寄存器地址e5所對應(yīng)的寄存器中取值賦給5號寄存器;6. 3)根據(jù)序號η從9個16進(jìn)制的候選值中選擇輪常數(shù)值輸出,即當(dāng)序號η為0_7時,對應(yīng)的輪常數(shù)值輸出依次為1,2,4,8,10,20,40,80,否則,輪常數(shù)值輸出為O ;6. 4)根據(jù)序號η確定寄存器地址f0,f 1,f2,f3,f4和f5的值,若序號η為0-7之外的值,則寄存器地址fo,fl, f2, f3,f4和f5中的值均保持不變,否則按以下規(guī)律確定地址若序號n為0,則寄存器地址f0,fl,f2,f3,f4和f5依次被賦值6,7,8,9,10,11 ;序號η每增加1,則寄存器地址f0, fl, f2, f3,f4和f5的值都增加6,例如,若序號η為3,則寄存器地址f0的值為24、fl的值為25、f2的值為26、f3的值為27、f4的值為28、f5的值為29 ;若號η為4,則寄存器地址f0的值增加為30,fl的值增加為31,f2的值增加為32,f3的值增加為33,f4的值增加為34,f5的值增加為35 ;
若序號為7,則寄存器地址e4和e5保持不變,其它地址正常增加;6.5)對O號寄存器中的值和字節(jié)替換操作的輸出執(zhí)行按位異或操作,用此結(jié)果再與輪常數(shù)值輸出進(jìn)行按位異或后,將所得結(jié)果作為輪密鑰一列存入寄存器地址 所對應(yīng)的寄存器和雙口 SDRAM中;6. 6)對指定的兩個寄存器中的值執(zhí)行按位異或操作,并將所得結(jié)果作為輪密鑰的一列存入寄存器 和雙口 SDRAM中6. 6a)對I號寄存器中的值和寄存器地址f0所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址Π所對應(yīng)的寄存器和雙口 SDRAM中;6. 6b)對2號寄存器中的值和寄存器地址f I所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f2所對應(yīng)的寄存器和雙口 SDRAM中;6. 6c)對3號寄存器中的值和寄存器地址f2所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f3所對應(yīng)的寄存器和雙口 SDRAM中;6. 6d)對4號寄存器中的值和寄存器地址f3所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f4所對應(yīng)的寄存器和雙口 SDRAM中;6. 6e)對5號寄存器中的值和寄存器地址f4所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f5所對應(yīng)的寄存器和雙口 SDRAM中,此時完成了輪密鑰的6列的存儲,這6列可能會分成兩種情況作為輪密鑰,一種是前4列作為一個輪密鑰,后兩列作為另一個輪密鑰的第127位到第64位,另一種是前兩列作為一個輪密鑰的第63位到第O位,后四列作為另一個輪密鑰。步驟7,對序號η加1,若加I后的結(jié)果為8,則停止密鑰擴(kuò)展進(jìn)程,否則重復(fù)步驟4)至步驟7)。本發(fā)明的密鑰擴(kuò)展方法的優(yōu)勢可以通過理論推導(dǎo)進(jìn)一步說明推導(dǎo)1,令生成全部輪密鑰所需時間為Tk ;且本發(fā)明采用《AES算法的一種優(yōu)化的FPGA實現(xiàn)方法》的加密流程方法,所需時間為Tc ;則可知《AES算法的一種優(yōu)化的FPGA實現(xiàn)方法》完成128比特位的數(shù)據(jù)加密所需總時間為Tk+Tc ;而在本發(fā)明中,因輪密鑰擴(kuò)展與AES加密流程同時進(jìn)行,完成同樣的128比特位的數(shù)據(jù)的加密所需要的總時間僅為Tc ;每加密128比特位的數(shù)據(jù),節(jié)省了 Tk ;因而本發(fā)明與《AES算法的一種優(yōu)化的FPGA實現(xiàn)方法》中的密鑰擴(kuò)展方法相比,更高效。推導(dǎo)2,令本發(fā)明的方法在實際應(yīng)用中產(chǎn)生12個輪密鑰的功耗與《A RijndaelCryptoprocessor Using Shared On-the-fly Key Scheduler))中的正向密鑰擴(kuò)展方法產(chǎn)生12個輪密鑰的功耗均為p;且待加密數(shù)據(jù)長度為X比特位,其中X > 128。如前所述,本發(fā)明中的輪密鑰在產(chǎn)生之后會被存儲到內(nèi)存中,在完成第一個128比特位數(shù)據(jù)的加密之后,因后續(xù)數(shù)據(jù)所需輪密鑰是相同的,故無需再進(jìn)行密鑰擴(kuò)展,只需直接讀取內(nèi)存中的輪密鑰即可;這樣加密X比特位的數(shù)據(jù),應(yīng)用本發(fā)明的密鑰擴(kuò)展單元的功耗僅為P ;而對于《A Rijndael Cryptoprocessor Using Shared On-the-fly Key Scheduler》中的正向密鑰擴(kuò)展方法,每加密128比特位數(shù)據(jù),均需進(jìn)行密鑰擴(kuò)展;其加密X比特位數(shù)據(jù)的功耗則為x/128.p;因而與《A Rijnddel Cryptoprocessor Using Shared On-the-fly Key
Scheduler))中的正向密鑰擴(kuò)展方法相比,本發(fā)明功耗更低。
權(quán)利要求
1.一種基于AES的192比特位密鑰擴(kuò)展系統(tǒng),包括 擴(kuò)展計數(shù)單元(I),用于對序號η進(jìn)行加I操作,并將序號η輸出; 暫存單元(2),由位寬均為32比特的52個寄存器構(gòu)成,用于暫存初始密鑰和輪密鑰,保證密鑰擴(kuò)展進(jìn)程能夠即時取用; 輪密鑰存儲單元(3),采用位寬為32比特位,深度為52的雙口 SDRDM,用于存儲初始密鑰和輪密鑰,保證在密鑰擴(kuò)展進(jìn)行的同時能夠為加密流程實時的提供輪密鑰,并保證對后續(xù)數(shù)據(jù)塊進(jìn)行加密時無需密鑰擴(kuò)展即可直接讀取已存儲輪密鑰; 循環(huán)寄存器(4),用于存儲供字循環(huán)單元(5)讀取使用的32比特位的值;字循環(huán)單元(5),用于對循環(huán)寄存器(4)中的值進(jìn)行循環(huán)左移I個字節(jié)的操作,并將結(jié)果輸出給替換寄存器(6); 替換寄存器出),用于存儲供字節(jié)替換單元(7)讀取使用的32比特位的值; 字節(jié)替換單元(7),用于將替換寄存器¢)中的值作為地址分為從第31位到第24位、從第23位到第16位、從第15位到第8位和從第7位到第O位這4個字節(jié)發(fā)送給S盒單元(8),并將S盒單元(8)的返回值按照發(fā)送地址時的順序從高到低組合后輸出給異或單元(11); S盒單元(8),采用四個預(yù)存有S盒的ROM,用于將字節(jié)替換單元(7)發(fā)送的四個地址在S盒中所對應(yīng)的四個8比特位的值返回給字節(jié)替換單元(7); 輪常數(shù)選擇單元(9),用于根據(jù)序號n,從9個16進(jìn)制的候選值0,1,2,4,8,10,20,40,80中選出一個值輸出給異或單元(11);異或寄存單元(10),包括位寬均為32比特位的O號寄存器、I號寄存器、2號寄存器、3號寄存器、4號寄存器和5號寄存器,用于存儲異或單元(11)所要使用的32比特位的值;異或單元(11),包括O號異或子單元、I號異或子單元、2號異或子單元、3號異或子單元、4號異或子單元和5號異或子單元,用于進(jìn)行按位異或操作,并將所得結(jié)果作為輪密鑰輸出給暫存單元⑵; 循環(huán)控制單元(12),用于根據(jù)序號η決定下一步是停止還是繼續(xù)進(jìn)行密鑰擴(kuò)展進(jìn)程,若序號η為8,則結(jié)束密鑰擴(kuò)展進(jìn)程,若輪號為0-7范圍內(nèi)的值,則繼續(xù)執(zhí)行密鑰擴(kuò)展進(jìn)程。
2.根據(jù)權(quán)利要求I所述的基于AES的192比特位密鑰擴(kuò)展系統(tǒng),其中所述的4個S盒,分別為O號ROM、I號ROM、2號ROM和3號ROM ; O號R0M,采用位寬為8比特,深度為256,且預(yù)存有S盒的R0M,用于接收字節(jié)替換單元(7)發(fā)送過來的第31位到第24位的地址,并將該地址所對應(yīng)的8比特位值輸出給字節(jié)替換單元⑵; I號R0M,采用位寬為8比特,深度為256,且預(yù)存有S盒的R0M,用于接收字節(jié)替換單元(7)發(fā)送過來的第23位到第16位的地址,并將該地址所對應(yīng)的8比特位值輸出給字節(jié)替換單元⑵; 2號R0M,采用位寬為8比特,深度為256,且預(yù)存有S盒的R0M,用于接收字節(jié)替換單元(7)發(fā)送過來的第15位到第8位的地址,并將該地址所對應(yīng)的8比特位值輸出給字節(jié)替換單元⑵; 3號R0M,采用位寬為8比特,深度為256,且預(yù)存有S盒的R0M,用于接收字節(jié)替換單元(7)發(fā)送過來的第7位到第O位的地址,并將該地址所對應(yīng)的8比特位值輸出給字節(jié)替換單元(7) ο
3.根據(jù)權(quán)利要求I所述的基于AES的192比特位密鑰擴(kuò)展系統(tǒng),其中異或寄存單元(10)存儲異或単元(11)所要使用的32比特位的值,是用O號寄存器存儲O號異或子単元所要使用的32比特位的值,用I號寄存器存儲I號異或子単元所要使用的32比特位的值,用2號寄存器存儲2號異或子単元所要使用的32比特位的值,用3號寄存器存儲3號異或子単元所要使用的32比特位的值,用4號寄存器存儲4號異或子単元所要使用的32比特位的值,用5號寄存器存儲5號異或子単元所要使用的32比特位的值。
4.根據(jù)權(quán)利要求I所述的基于AES的192比特位密鑰擴(kuò)展系統(tǒng),其中異或單元(11)進(jìn)行按位異或操作,并將所得結(jié)果作為輪密鑰輸出給暫存単元(2),是由6個子單元依次完成,即 由O號異或子單元對O號寄存器中的值、字節(jié)替換単元(11)的輸出和輪常數(shù)選擇單元(9)的輸出進(jìn)行按位異或后,將所得結(jié)果作為輪密鑰的一列,同時輸出給I號異或子単元和暫存單元⑵; 由I號異或子單元將I號寄存器中的值和O號異或子単元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列,同時輸出給2號異或子単元和暫存單元(2); 由2號異或子單元將2號寄存器中的值和I號異或子単元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列,同時輸出給3號異或子単元和暫存單元(2); 由3號異或子單元將3號寄存器中的值和2號異或子単元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列,同時輸出給4號異或子単元和暫存單元(2); 由4號異或子單元將4號寄存器中的值和3號異或子単元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列,同時輸出給5號異或子単元和暫存單元(2); 由5號異或子單元將5號寄存器中的值和4號異或子単元的輸出進(jìn)行按位異或,并將結(jié)果作為輪密鑰的一列,輸出給暫存單元(2)。
5.根據(jù)權(quán)利要求I所述的基于AES的192比特位密鑰擴(kuò)展系統(tǒng),其中所述的輪密鑰,是指密鑰擴(kuò)展進(jìn)程所產(chǎn)生的12個128比特位數(shù),用于為高級加密標(biāo)準(zhǔn)AES中加密算法的每輪加密提供不同的128比特位數(shù)。
6.一種基于AES的192比特位密鑰擴(kuò)展方法,包括如下步驟 1)將對密鑰擴(kuò)展進(jìn)程進(jìn)行計數(shù)的變量定義為序號n,其取值范圍分為0-7以外的整數(shù)域和0-7之間的整數(shù)域這兩種情況; 2)將序號η歸零,開始密鑰擴(kuò)展進(jìn)程; 3)將初始密鑰從高位到低位分為6個32比特位的值,再按此順序同時將這6個32比特位的數(shù)據(jù)存入地址為0,1,2,3,4,5的寄存器和一個專用于存儲輪密鑰的雙ロ SDRDM中; 4)執(zhí)行字循環(huán)操作4. I)根據(jù)序號η確定寄存器地址d,若序號η為0-7之外的值,則寄存器地址d的值保持不變,否則按以下規(guī)律確定地址 若序號η為0,則寄存器地址d為5 ; 序號η每增加1,寄存器地址d的值就增加6 ;4. 2)從寄存器地址d所對應(yīng)的寄存器中取值賦給循環(huán)寄存器,將循環(huán)寄存器中的32比特位值循環(huán)左移一個字節(jié),并輸出到替換寄存器中;.5)執(zhí)行字節(jié)替換操作 .5.I)將替換寄存器中的值作為地址分為從第31位到第24位、從第23位到第16位、從第15位到第8位和從第7位到第O位這4個字節(jié),分別發(fā)送給4個預(yù)存有S盒的ROM,這四個ROM再將接收到的地址值在S盒中對應(yīng)的8比特位數(shù)值同時返回; . 5.2)將4個ROM返回的8比特位數(shù)值按照步驟6)中每個地址在原32比特位值中的位置從高到低的順序,組合成一個新的32比特位的值作為字節(jié)替換操作的輸出; .6)執(zhí)行按位異或操作,并存儲輪密鑰 .6.I)根據(jù)序號η確定寄存器地址eO,el, e2, e3, e4和e5,若序號n為0_7之外的值,則寄存器地址e0,el, e2, e3, e4和e5中的值均保持不變,否則按以下規(guī)律確定地址 若序號η為0,則寄存器地址eO, el, e2,e3,e4和e5依次被賦值0,1,2,3,4,5 ; 序號η每增加1,則寄存器地址eO,el,e2,e3,e4和e5的值均增加6,若序號η為7,則寄存器地址e4和e5保持不變,其他寄存器地址正常增加; .6. 2)從寄存器地址eO,el,e2,e3,e4和e5所對應(yīng)的寄存器中取值,并分別賦給O號寄存器、I號寄存器、2號寄存器、3號寄存器、4號寄存器和5號寄存器; .6. 3)根據(jù)序號η從9個16進(jìn)制的候選值中選擇輪常數(shù)值輸出,即當(dāng)序號η為0_7時,對應(yīng)的輪常數(shù)值輸出依次為1,2,4,8,10,20,40,80,否則,輪常數(shù)值輸出為O ; .6. 4)根據(jù)序號η確定寄存器地址f0,f 1,f2,f3,f4和f5的值,若序號η為0_7之外的值,則寄存器地址f0,fl,f2, f3,f4和f5中的值均保持不變,否則按以下規(guī)律確定地址若序號η為0,則寄存器地址f0, fl, f2,f3,f4和f5依次被賦值6,7,8,9,10,11 ;序號η每增加1,則寄存器地址f0,f 1,f2,f3,f4和f5的值都增加6,若序號η為7,則寄存器地址f4和f5地址保持不變,其他寄存器地址正常增加; . 6. 5)對O號寄存器中的值和字節(jié)替換操作的輸出執(zhí)行按位異或操作,用此結(jié)果再與輪常數(shù)值輸出進(jìn)行按位異或后,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f0所對應(yīng)的寄存器和雙口 SDRDM中; .6. 6)對I號寄存器中的值和寄存器地址f0所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址Π所對應(yīng)的寄存器和雙口 SDRDM中; .6. 7)對2號寄存器中的值和寄存器地址fl所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f2所對應(yīng)的寄存器和雙口 SDRDM中; .6.8)對3號寄存器中的值和寄存器地址f2所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f3所對應(yīng)的寄存器和雙口 SDRDM中; .6.9)對4號寄存器中的值和寄存器地址f3所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f4所對應(yīng)的寄存器和雙口 SDRDM中; .6.10)對5號寄存器中的值和寄存器地址f4所對應(yīng)的寄存器中的值執(zhí)行按位異或操作,將所得結(jié)果作為輪密鑰的一列存入寄存器地址f5所對應(yīng)的寄存器和雙口 SDRDM中;此時完成了輪密鑰的6列的存儲; .7)對序號η加1,若加I后的結(jié)果為8,則停止密鑰擴(kuò)展進(jìn)程,否則重復(fù)步驟4)至步驟7)。
全文摘要
本發(fā)明公開了一種基于高級加密標(biāo)準(zhǔn)AES的192比特位密鑰擴(kuò)展系統(tǒng)及方法,主要解決現(xiàn)有192比特AES加密算法中密鑰擴(kuò)展過程的低效率以及高功耗問題。其實現(xiàn)過程是在密鑰擴(kuò)展的第一輪對初始密鑰進(jìn)行存儲,取前4列作為該輪密鑰擴(kuò)展的輪密鑰,并進(jìn)行字循環(huán)、字節(jié)替換、按位異或操作;將所得結(jié)果作為輪密鑰同時存儲在本地寄存器和外部存儲單元中,供加密流程讀取使用;之后每輪都對前一輪所得輪密鑰重復(fù)上述操作,直到得到所有12個輪密鑰,結(jié)束密鑰擴(kuò)展。本發(fā)明能夠兼顧密鑰擴(kuò)展的實時性以及輪密鑰的可重用性,實現(xiàn)高效率和低功耗的密鑰擴(kuò)展,適用于AES加密算法的192比特密鑰擴(kuò)展過程。
文檔編號H04L9/06GK102624520SQ20121013239
公開日2012年8月1日 申請日期2012年5月2日 優(yōu)先權(quán)日2012年5月2日
發(fā)明者史江一, 李康, 趙哲斐, 趙彥尚, 邸志雄, 郝躍 申請人:西安電子科技大學(xué)